diff --git a/src/url_pattern.cpp b/src/url_pattern.cpp index 2fa1f1cfb..0c1c5647d 100644 --- a/src/url_pattern.cpp +++ b/src/url_pattern.cpp @@ -554,6 +554,7 @@ result> url_pattern::match( base_url_string); // If baseURLString was given, throw a TypeError. if (base_url_string) { + ada_log("failed to match because base_url_string was given"); return tl::unexpected(errors::type_error); } @@ -564,8 +565,10 @@ result> url_pattern::match( std::get(input), "url", protocol, username, password, hostname, port, pathname, search, hash); + // If this throws an exception, catch it, and return null. if (!apply_result.has_value()) { - return tl::unexpected(apply_result.error()); + ada_log("match returned std::nullopt because process threw"); + return std::nullopt; } // Set protocol to applyResult["protocol"]. @@ -604,7 +607,8 @@ result> url_pattern::match( auto url_input = std::get(input); auto url = ada::parse(url_input); if (!url) { - return tl::unexpected(errors::type_error); + ada_log("match throw because failed to parse url_input=", url_input); + return std::nullopt; } // Let baseURL be null. @@ -619,6 +623,7 @@ result> url_pattern::match( // If baseURL is failure, return null. if (!base_url) { + ada_log("match returned std::nullopt because failed to parse base_url=", *base_url_string); return std::nullopt; } @@ -635,6 +640,7 @@ result> url_pattern::match( // If url is failure, return null. if (!parsed_url) { + ada_log("match returned std::nullopt because url failed"); return std::nullopt; } diff --git a/tests/wpt_urlpattern_tests.cpp b/tests/wpt_urlpattern_tests.cpp index 9c132d56f..bdfd56766 100644 --- a/tests/wpt_urlpattern_tests.cpp +++ b/tests/wpt_urlpattern_tests.cpp @@ -412,13 +412,13 @@ TEST(wpt_urlpattern_tests, urlpattern_test_data) { base_url_view = std::string_view(base_url.value()); opt_base_url = &base_url_view; } - if (std::holds_alternative(init_variant)) { - auto str = std::get(init_variant); - ada_log("init_variant is str=", str); - result = parse_result->exec(std::string_view(str), opt_base_url); + if (std::holds_alternative(input_value)) { + auto str = std::get(input_value); + ada_log("input_value is str=", str); + result = parse_result->exec(str, opt_base_url); } else { - ada_log("init_variant is url_pattern_init"); - auto obj = std::get(init_variant); + ada_log("input_value is url_pattern_init"); + auto obj = std::get(input_value); result = parse_result->exec(obj, opt_base_url); }