| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 73a946d commit 11ba859
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,4 +1,4 @@ | |||
| 1 | - /* auto-generated on 2024-01-22 09:15:53 -0500. Do not edit! */ | ||
| 1 | + /* auto-generated on 2024-01-29 13:13:24 -0500. Do not edit! */ | ||
| 2 | 2 | /* begin file src/ada.cpp */ | |
| 3 | 3 | #include "ada.h" | |
| 4 | 4 | /* begin file src/checkers.cpp */ | |
@@ -11221,7 +11221,7 @@ ada_warn_unused std::string to_string(ada::state state) { | |||
| 11221 | 11221 | namespace ada { | |
| 11222 | 11222 | ||
| 11223 | 11223 | bool url::parse_opaque_host(std::string_view input) { | |
| 11224 | - ada_log("parse_opaque_host ", input, "[", input.size(), " bytes]"); | ||
| 11224 | + ada_log("parse_opaque_host ", input, " [", input.size(), " bytes]"); | ||
| 11225 | 11225 | if (std::any_of(input.begin(), input.end(), | |
| 11226 | 11226 | ada::unicode::is_forbidden_host_code_point)) { | |
| 11227 | 11227 | return is_valid = false; | |
@@ -11235,7 +11235,7 @@ bool url::parse_opaque_host(std::string_view input) { | |||
| 11235 | 11235 | } | |
| 11236 | 11236 | ||
| 11237 | 11237 | bool url::parse_ipv4(std::string_view input) { | |
| 11238 | - ada_log("parse_ipv4 ", input, "[", input.size(), " bytes]"); | ||
| 11238 | + ada_log("parse_ipv4 ", input, " [", input.size(), " bytes]"); | ||
| 11239 | 11239 | if (input.back() == '.') { | |
| 11240 | 11240 | input.remove_suffix(1); | |
| 11241 | 11241 | } | |
@@ -11310,7 +11310,7 @@ bool url::parse_ipv4(std::string_view input) { | |||
| 11310 | 11310 | } | |
| 11311 | 11311 | ||
| 11312 | 11312 | bool url::parse_ipv6(std::string_view input) { | |
| 11313 | - ada_log("parse_ipv6 ", input, "[", input.size(), " bytes]"); | ||
| 11313 | + ada_log("parse_ipv6 ", input, " [", input.size(), " bytes]"); | ||
| 11314 | 11314 | ||
| 11315 | 11315 | if (input.empty()) { | |
| 11316 | 11316 | return is_valid = false; | |
@@ -11634,7 +11634,7 @@ ada_really_inline bool url::parse_scheme(const std::string_view input) { | |||
| 11634 | 11634 | } | |
| 11635 | 11635 | ||
| 11636 | 11636 | ada_really_inline bool url::parse_host(std::string_view input) { | |
| 11637 | - ada_log("parse_host ", input, "[", input.size(), " bytes]"); | ||
| 11637 | + ada_log("parse_host ", input, " [", input.size(), " bytes]"); | ||
| 11638 | 11638 | if (input.empty()) { | |
| 11639 | 11639 | return is_valid = false; | |
| 11640 | 11640 | } // technically unnecessary. | |
@@ -11686,6 +11686,8 @@ ada_really_inline bool url::parse_host(std::string_view input) { | |||
| 11686 | 11686 | ada_log("parse_host to_ascii returns false"); | |
| 11687 | 11687 | return is_valid = false; | |
| 11688 | 11688 | } | |
| 11689 | + ada_log("parse_host to_ascii succeeded ", *host, " [", host->size(), | ||
| 11690 | + " bytes]"); | ||
| 11689 | 11691 | ||
| 11690 | 11692 | if (std::any_of(host.value().begin(), host.value().end(), | |
| 11691 | 11693 | ada::unicode::is_forbidden_domain_code_point)) { | |
@@ -11696,7 +11698,7 @@ ada_really_inline bool url::parse_host(std::string_view input) { | |||
| 11696 | 11698 | // If asciiDomain ends in a number, then return the result of IPv4 parsing | |
| 11697 | 11699 | // asciiDomain. | |
| 11698 | 11700 | if (checkers::is_ipv4(host.value())) { | |
| 11699 | - ada_log("parse_host got ipv4", *host); | ||
| 11701 | + ada_log("parse_host got ipv4 ", *host); | ||
| 11700 | 11702 | return parse_ipv4(host.value()); | |
| 11701 | 11703 | } | |
| 11702 | 11704 | ||
@@ -13571,7 +13573,7 @@ void url_aggregator::set_hash(const std::string_view input) { | |||
| 13571 | 13573 | ||
| 13572 | 13574 | bool url_aggregator::set_href(const std::string_view input) { | |
| 13573 | 13575 | ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); | |
| 13574 | - ada_log("url_aggregator::set_href ", input, "[", input.size(), " bytes]"); | ||
| 13576 | + ada_log("url_aggregator::set_href ", input, " [", input.size(), " bytes]"); | ||
| 13575 | 13577 | ada::result<url_aggregator> out = ada::parse<url_aggregator>(input); | |
| 13576 | 13578 | ada_log("url_aggregator::set_href, success :", out.has_value()); | |
| 13577 | 13579 | ||
@@ -13585,7 +13587,8 @@ bool url_aggregator::set_href(const std::string_view input) { | |||
| 13585 | 13587 | } | |
| 13586 | 13588 | ||
| 13587 | 13589 | ada_really_inline bool url_aggregator::parse_host(std::string_view input) { | |
| 13588 | - ada_log("url_aggregator:parse_host ", input, "[", input.size(), " bytes]"); | ||
| 13590 | + ada_log("url_aggregator:parse_host \"", input, "\" [", input.size(), | ||
| 13591 | + " bytes]"); | ||
| 13589 | 13592 | ADA_ASSERT_TRUE(validate()); | |
| 13590 | 13593 | ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); | |
| 13591 | 13594 | if (input.empty()) { | |
@@ -13635,7 +13638,7 @@ ada_really_inline bool url_aggregator::parse_host(std::string_view input) { | |||
| 13635 | 13638 | update_base_hostname(input); | |
| 13636 | 13639 | if (checkers::is_ipv4(get_hostname())) { | |
| 13637 | 13640 | ada_log("parse_host fast path ipv4"); | |
| 13638 | - return parse_ipv4(get_hostname()); | ||
| 13641 | + return parse_ipv4(get_hostname(), true); | ||
| 13639 | 13642 | } | |
| 13640 | 13643 | ada_log("parse_host fast path ", get_hostname()); | |
| 13641 | 13644 | return true; | |
@@ -13651,6 +13654,8 @@ ada_really_inline bool url_aggregator::parse_host(std::string_view input) { | |||
| 13651 | 13654 | ada_log("parse_host to_ascii returns false"); | |
| 13652 | 13655 | return is_valid = false; | |
| 13653 | 13656 | } | |
| 13657 | + ada_log("parse_host to_ascii succeeded ", *host, " [", host->size(), | ||
| 13658 | + " bytes]"); | ||
| 13654 | 13659 | ||
| 13655 | 13660 | if (std::any_of(host.value().begin(), host.value().end(), | |
| 13656 | 13661 | ada::unicode::is_forbidden_domain_code_point)) { | |
@@ -13660,8 +13665,8 @@ ada_really_inline bool url_aggregator::parse_host(std::string_view input) { | |||
| 13660 | 13665 | // If asciiDomain ends in a number, then return the result of IPv4 parsing | |
| 13661 | 13666 | // asciiDomain. | |
| 13662 | 13667 | if (checkers::is_ipv4(host.value())) { | |
| 13663 | - ada_log("parse_host got ipv4", *host); | ||
| 13664 | - return parse_ipv4(host.value()); | ||
| 13668 | + ada_log("parse_host got ipv4 ", *host); | ||
| 13669 | + return parse_ipv4(host.value(), false); | ||
| 13665 | 13670 | } | |
| 13666 | 13671 | ||
| 13667 | 13672 | update_base_hostname(host.value()); | |
@@ -13914,7 +13919,7 @@ bool url_aggregator::set_hostname(const std::string_view input) { | |||
| 13914 | 13919 | } | |
| 13915 | 13920 | ||
| 13916 | 13921 | [[nodiscard]] std::string ada::url_aggregator::to_string() const { | |
| 13917 | - ada_log("url_aggregator::to_string buffer:", buffer, "[", buffer.size(), | ||
| 13922 | + ada_log("url_aggregator::to_string buffer:", buffer, " [", buffer.size(), | ||
| 13918 | 13923 | " bytes]"); | |
| 13919 | 13924 | if (!is_valid) { | |
| 13920 | 13925 | return "null"; | |
@@ -14013,8 +14018,8 @@ bool url_aggregator::set_hostname(const std::string_view input) { | |||
| 14013 | 14018 | return checkers::verify_dns_length(get_hostname()); | |
| 14014 | 14019 | } | |
| 14015 | 14020 | ||
| 14016 | - bool url_aggregator::parse_ipv4(std::string_view input) { | ||
| 14017 | - ada_log("parse_ipv4 ", input, "[", input.size(), | ||
| 14021 | + bool url_aggregator::parse_ipv4(std::string_view input, bool in_place) { | ||
| 14022 | + ada_log("parse_ipv4 ", input, " [", input.size(), | ||
| 14018 | 14023 | " bytes], overlaps with buffer: ", | |
| 14019 | 14024 | helpers::overlaps(input, buffer) ? "yes" : "no"); | |
| 14020 | 14025 | ADA_ASSERT_TRUE(validate()); | |
@@ -14038,20 +14043,25 @@ bool url_aggregator::parse_ipv4(std::string_view input) { | |||
| 14038 | 14043 | } else { | |
| 14039 | 14044 | std::from_chars_result r; | |
| 14040 | 14045 | if (is_hex) { | |
| 14046 | + ada_log("parse_ipv4 trying to parse hex number"); | ||
| 14041 | 14047 | r = std::from_chars(input.data() + 2, input.data() + input.size(), | |
| 14042 | 14048 | segment_result, 16); | |
| 14043 | 14049 | } else if ((input.length() >= 2) && input[0] == '0' && | |
| 14044 | 14050 | checkers::is_digit(input[1])) { | |
| 14051 | + ada_log("parse_ipv4 trying to parse octal number"); | ||
| 14045 | 14052 | r = std::from_chars(input.data() + 1, input.data() + input.size(), | |
| 14046 | 14053 | segment_result, 8); | |
| 14047 | 14054 | } else { | |
| 14055 | + ada_log("parse_ipv4 trying to parse decimal number"); | ||
| 14048 | 14056 | pure_decimal_count++; | |
| 14049 | 14057 | r = std::from_chars(input.data(), input.data() + input.size(), | |
| 14050 | 14058 | segment_result, 10); | |
| 14051 | 14059 | } | |
| 14052 | 14060 | if (r.ec != std::errc()) { | |
| 14061 | + ada_log("parse_ipv4 parsing failed"); | ||
| 14053 | 14062 | return is_valid = false; | |
| 14054 | 14063 | } | |
| 14064 | + ada_log("parse_ipv4 parsed ", segment_result); | ||
| 14055 | 14065 | input.remove_prefix(r.ptr - input.data()); | |
| 14056 | 14066 | } | |
| 14057 | 14067 | if (input.empty()) { | |
@@ -14076,17 +14086,22 @@ bool url_aggregator::parse_ipv4(std::string_view input) { | |||
| 14076 | 14086 | } | |
| 14077 | 14087 | } | |
| 14078 | 14088 | if ((digit_count != 4) || (!input.empty())) { | |
| 14089 | + ada_log("parse_ipv4 found invalid (more than 4 numbers or empty) "); | ||
| 14079 | 14090 | return is_valid = false; | |
| 14080 | 14091 | } | |
| 14081 | 14092 | final: | |
| 14082 | 14093 | ada_log("url_aggregator::parse_ipv4 completed ", get_href(), | |
| 14083 | 14094 | " host: ", get_host()); | |
| 14084 | 14095 | ||
| 14085 | 14096 | // We could also check r.ptr to see where the parsing ended. | |
| 14086 | - if (pure_decimal_count == 4 && !trailing_dot) { | ||
| 14097 | + if (in_place && pure_decimal_count == 4 && !trailing_dot) { | ||
| 14098 | + ada_log( | ||
| 14099 | + "url_aggregator::parse_ipv4 completed and was already correct in the " | ||
| 14100 | + "buffer"); | ||
| 14087 | 14101 | // The original input was already all decimal and we validated it. So we | |
| 14088 | 14102 | // don't need to do anything. | |
| 14089 | 14103 | } else { | |
| 14104 | + ada_log("url_aggregator::parse_ipv4 completed and we need to update it"); | ||
| 14090 | 14105 | // Optimization opportunity: Get rid of unnecessary string return in ipv4 | |
| 14091 | 14106 | // serializer. | |
| 14092 | 14107 | // TODO: This is likely a bug because it goes back update_base_hostname, not | |
@@ -14100,8 +14115,11 @@ bool url_aggregator::parse_ipv4(std::string_view input) { | |||
| 14100 | 14115 | } | |
| 14101 | 14116 | ||
| 14102 | 14117 | bool url_aggregator::parse_ipv6(std::string_view input) { | |
| 14118 | + // TODO: Implement in_place optimization: we know that input points | ||
| 14119 | + // in the buffer, so we can just check whether the buffer is already | ||
| 14120 | + // well formatted. | ||
| 14103 | 14121 | // TODO: Find a way to merge parse_ipv6 with url.cpp implementation. | |
| 14104 | - ada_log("parse_ipv6 ", input, "[", input.size(), " bytes]"); | ||
| 14122 | + ada_log("parse_ipv6 ", input, " [", input.size(), " bytes]"); | ||
| 14105 | 14123 | ADA_ASSERT_TRUE(validate()); | |
| 14106 | 14124 | ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); | |
| 14107 | 14125 | if (input.empty()) { | |
@@ -14335,7 +14353,7 @@ bool url_aggregator::parse_ipv6(std::string_view input) { | |||
| 14335 | 14353 | } | |
| 14336 | 14354 | ||
| 14337 | 14355 | bool url_aggregator::parse_opaque_host(std::string_view input) { | |
| 14338 | - ada_log("parse_opaque_host ", input, "[", input.size(), " bytes]"); | ||
| 14356 | + ada_log("parse_opaque_host ", input, " [", input.size(), " bytes]"); | ||
| 14339 | 14357 | ADA_ASSERT_TRUE(validate()); | |
| 14340 | 14358 | ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); | |
| 14341 | 14359 | if (std::any_of(input.begin(), input.end(), | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,4 +1,4 @@ | |||
| 1 | - /* auto-generated on 2024-01-22 09:15:53 -0500. Do not edit! */ | ||
| 1 | + /* auto-generated on 2024-01-29 13:13:24 -0500. Do not edit! */ | ||
| 2 | 2 | /* begin file include/ada.h */ | |
| 3 | 3 | /** | |
| 4 | 4 | * @file ada.h | |
@@ -4868,10 +4868,12 @@ struct url_aggregator : url_base { | |||
| 4868 | 4868 | } | |
| 4869 | 4869 | ||
| 4870 | 4870 | /** | |
| 4871 | - * Return true on success. | ||
| 4871 | + * Return true on success. The 'in_place' parameter indicates whether the | ||
| 4872 | + * the string_view input is pointing in the buffer. When in_place is false, | ||
| 4873 | + * we must nearly always update the buffer. | ||
| 4872 | 4874 | * @see https://url.spec.whatwg.org/#concept-ipv4-parser | |
| 4873 | 4875 | */ | |
| 4874 | - [[nodiscard]] bool parse_ipv4(std::string_view input); | ||
| 4876 | + [[nodiscard]] bool parse_ipv4(std::string_view input, bool in_place); | ||
| 4875 | 4877 | ||
| 4876 | 4878 | /** | |
| 4877 | 4879 | * Return true on success. | |
@@ -7078,14 +7080,14 @@ url_search_params_entries_iter::next() { | |||
| 7078 | 7080 | #ifndef ADA_ADA_VERSION_H | |
| 7079 | 7081 | #define ADA_ADA_VERSION_H | |
| 7080 | 7082 | ||
| 7081 | - #define ADA_VERSION "2.7.5" | ||
| 7083 | + #define ADA_VERSION "2.7.6" | ||
| 7082 | 7084 | ||
| 7083 | 7085 | namespace ada { | |
| 7084 | 7086 | ||
| 7085 | 7087 | enum { | |
| 7086 | 7088 | ADA_VERSION_MAJOR = 2, | |
| 7087 | 7089 | ADA_VERSION_MINOR = 7, | |
| 7088 | - ADA_VERSION_REVISION = 5, | ||
| 7090 | + ADA_VERSION_REVISION = 6, | ||
| 7089 | 7091 | }; | |
| 7090 | 7092 | ||
| 7091 | 7093 | } // namespace ada | |
| Back | FazBrowse Home | New Git URL |
0 commit comments