0.55 2021-09-13 -feature: raw_$field now acts as a setter when a new value is provided 0.54 2021-09-03 -feature: added fragment() as alias of frag() (thanks markov2) -bugfix: fixes several utf8 encoding bugs in html_url, normalize (thanks markov2) 0.53 2021-08-31 -bugfix: html_url w/ empty relative url crashes w/ floating point error (thanks markov2) -bugfix: html_url w/ fragment appends null char to uri (thanks markov2) -bugfix: html_url segfaults when both rel and base start with "//" (thanks markov2) -bugfix: normalized URIs with an authority section and an empty path must have a trailing slash (thanks markov2) 0.52 2021-08-20 -feature: html_url now implemented in XS -feature: html_url has OO ctor equivalent, new_html_url -feature: short-hand ctor equivalent to new_abs, abs_uri 0.51 2021-08-12 -feature: new constructor, new_abs($rel, $base) -feature: abs() aliased to absolute() -feature: rel() aliased to relative() -feature: canonical() aliased to normalize() (this was true in prior versions, but undocumented) -feature: normalize() now decodes unreserved chars and normalizes + to %20 (RFC 3986, 6.2.2.2) -feature: TO_JSON() added as alias of to_string() -miscellaneous minor efficiency/speed improvements 0.50 2021-08-03 -behavior: correct uri_split and uri to treat leading double-slash in input string as the beginning of the authority section, as URI and URI::Split do, instead of as the beginning of the path with ad leading empty segment -feature: new subroutine html_url, which scrubs whitespace permitted by URLs read from HTML documents (tab, newline, carriage return) and replaces backslashes with forward slashes (also allowed in HTML, I'm afraid) 0.49 2019-08-02 -make 0.48_01 official 0.48_01 2019-07-31 -bugfix: calling query_keyset with a zero-length key could result in a malformed query string -bugfix: calling set_param with an array containing a zero-length string could result in a malformed query string 0.48 2019-07-09 -make 0.47_01 official 0.47_01 2019-07-06 -bugfix: fix dynamically set $VERSION in URI::Fast::IRI 0.47 2019-07-05 -bugfix: escape_tree and unescape_tree die when called with non-reference argument -workaround: an older release had a versioned URI::Fast::IRI, requiring that it remains versioned to keep the cpan indexer happy; this change works around that by linking it to $URI::Fast::VERSION. -bugfix: path([]) caused infinite loop, because why would av_top_index return 0 for an empty array anyway? 0.46 2019-01-03 -feature: new routines escape_tree() and unescape_tree() added 0.45 2018-12-10 -feature: documented and exposed lower level method split_path, added split_path_compat which replicates the behavior of URI->path_segments as a getter 0.44 2018-12-05 -bugfix: removed hard-coded references to class name which were preventing expected behavior when subclassing URI::Fast 0.43 2018-11-27 -new feature: append() method serially constructs a URI from fragments of path, query, and fragment (credit: merlyn) 0.42 2018-11-21 -bugfix: uri_split() forces stringification of input -behavior: URI::Fast::Test routines now automatically stringify and parse their parameters 0.41 2018-08-15 -bugfix: small memory leak in to_string when there is no authority section present -bugfix: to_string did not properly encode authority section in some cases -new method: absolute($base) -new method: normalize (like URI->canonical) -new method: relative($base) -optimization: aliases moved to XS -optimization: overload of to_string moved to XS -optimization: shorthand constructors (uri, iri) moved to XS -optimization: simple unified accessors moved to XS 0.40 2018-08-08 -bugfix: gracefully handle incorrectly encoded query strings with unencoded '=' not following a key -bugfix: param and query incorrectly unset single parameters when passed a falsey value (credit: vroom) -documentation: clarify handling of '+' in decode -new method: clone() as an alias for uri() (credit: merlyn) 0.39 2018-07-22 -behavior: no size limit on member string sizes -bugfix: encode and decode no longer emit a warning when passed undef -bugfix: get_auth was not decoding utf8 as asserted by the docs -bugfix: get_query was not decoding utf8 as asserted by the docs -bugfix: some setters emit a warning and do not clear member when passed undef -bugfix: some setters were not properly handling magic -new methods: raw_$field to get the raw, encoded field value 0.38 2018-07-09 -behavior: uri_t->path increased from 1024 bytes to 2048 -behavior: setters now croak when an input string is truncated to fit within the uri_t struct -bugfix: authority section ignored when no scheme present during construction (credit: martin) -optimization: fixed slowness in encode/decode 0.37 2018-07-05 -cpan indexer issue with URI::Fast::IRI addressed 0.36 2018-07-05 -behavior: query_hash now accepts hash ref as a parameter -bugfix: correctly count and skip utf8 bytes when encoding an IRI -bugfix: drop invalid whitespace skipping scheme (credit: aeruder) -bugfix: drop logic incompatible with bsd make -bugfix: encode non-utf8 input strings in new() and uri_split() -bugfix: increase some member sizes to allow room for utf8 sequences -bugfix: path correctly handles forward slashes in segments when set with array -bugfix: set utf8 flag in compound iri accessors -optimization: use memcpy instead of strncpy in some cases -optimization: xs setters return void 0.35 2018-06-28 -behavior: all query scanning functions now treat '&' and ';' as valid separators -behavior: explicitly specifying a separator in a query setter replaces existing separators in the query -behavior: skip whitespace surrounding parsed uris -bugfix: correctly parse ipv6 addresses -bugfix: possible buffer overflow in uri_scan_auth -bugfix: set_query, set_fragment, set_path unnecessarily encode permitted characters (credit: Dave Hubbard) -bugfix: when stringifying, use ':' instead of '://' when no authority section present -bugfix: when stringifying, path is always separated from authority by '/' -documention: stringification with overloaded "" -new method: compare($other) with overloaded eq -new method: query_keyset({...}) -new method: url_encode/url_decode aliased to encode/decode (credit: bluefeet) -new module: URI::Fast::Test to make unit testing with Test2 easier (credit: merlyn) -optimization: faster and more consistent query scanning -optimization: reduced memset usage (credit: aeruder) 0.34 2018-06-13 -bugfix: set_param could clobber existing query parameters (credit: aeruder) 0.33 2018-06-13 -new method add_param() appends query parameters without clobbering existing query keys (credit: sara) 0.32 2018-06-12 -alias as_string -> to_string (credit: merlyn) 0.31 2018-06-12 -@EXPORT_OK now includes encode() and decode() (credit: merlyn) 0.30 2018-06-12 -incompatible change: dropped default scheme; when no scheme is present in the source string, the stringified URI is excluded -dropped prototype from URI::Fast::uri() 0.29 2018-06-07 -optimization: uri() now sets default scheme to "file" in XS -docs updated to clarify the unclear (credit: val, merlyn) -incompatible change: param() croaks when called in scalar context but encounters multiple parameter values (credit: merlyn) 0.28 2018-05-30 -bugfix: segfault when c function uri_decode called with len=0 and an input string with length > 0 0.27 2018-05-26 -declare POD encoding 0.26 2018-05-25 -switch from Dist::Zilla and Inline::C to vanilla XS and ExtUtils::MakeMaker to simplify building binary distributions -support for interpreter threads -remove separate URI::Fast::IRI module as Dist::Zilla's POD generator is no longer used 0.25 (failed) -failed due to version conflict in URI::Fast::IRI, which has no version 0.24 2018-05-23 -bugfix: move URI::Fast::IRI to its own file to unconfuse Dist::Zilla when generating docs 0.23 2018-04-26 -support for IRIs via new constructor, iri() -documented uri_split() 0.22 2018-03-27 -bugfix: add 'name' and 'version' parameters to `use Inline` statment and call to `Inline->init` to avoid runtime lookup errors 0.21 2018-03-27 -compromise: attempt to decode utf8 from percent-encoded sequences, but fail gracefully 0.20 2018-03-27 -don't croak on invalid utf8; uri may include arbitrary encoded bytes 0.19 2018-03-27 -added minimal validation of decoded utf8 (croaks on invalid sequences) 0.18 2018-03-21 -support for tied scalar inputs in XS code 0.17 2018-03-19 -bugfix: in which sysread gives up and puts the code in __DATA__ after all 0.16 2018-03-19 -bugfix: mixed separators in generated source file path on some mswin32 systems 0.15 2018-03-16 -bugfix: split_path generates incorrect segments on //paths 0.14 2018-03-16 -bugfix: dynamically find path to uri_fast.c -bugfix: move uri_fast.c out of lib root 0.13 2018-03-16 -support for specifying delimiter when modifying query parameters -bugfix: inlined function visibility lost in generated xs scope 0.12 2018-03-14 -bugfix: fix compiler error on MSWin32 (thanks appveyor!) 0.11 2018-03-13 -bugfix: length was being ignored in uri_scan_auth 0.10 2018-03-13 -exposed clear_* methods -get_auth replaced by function joining sub-members -more thorough testing of parsing edge cases -more thorough testing of memory leaks -bugfix: missing bounds checks in parser and setters -bugfix: segfault when query key not followed by '=' -bugfix: non-digits no longer accepted when setting/parsing port number -bugfix: increased member size for uri_t -added MetaProvides::Package Dist::Zilla plugin for experimental Kwalitee 0.09 2018-03-08 -constructor is more efficient -set_param does less copying, uses less memory -Bugfix: set_param incorrctly placed (or did not place) ampersands in some edge cases -Kwalitee fixes -Fix missing entries in v0.08's change log (oops) 0.08 2018-03-07 -Fix test dependency version causing cpan tester failures -Adopted URI::Encode::XS's encoding/decoding strategy -Reduced heap usage 0.07 2018-03-06 -UTF-8 support -New methods: query_keys, query_hash, encode, decode -Many methods rewritten in C/XS to make up for the added cost of UTF-8 support -Switch tests from using Test2::Bundle::Extended to Test2::V0 -Bugfix: fix some missing test dependencies on restricted smoker setups -Bugfix: some unit tests were using the uri being tested as the test name, triggering errors when the uri included a fragment (hash and newlines are invalid in test names) 0.06 2018-02-27 -New ultra-fast parser and struct-based object written in C 0.05 2018-02-27 -Update required version of Test2::Suite to 0.000049 to include U in Test2::Bundle::Extended 0.04 2018-02-26 -Faster uri_split implemented with Inline::C -Faster auth parsing implemented with Inline::C -Faster auth assembly implemented with Inline::C -Faster query param access by doing a regex for each access rather than parsing and storing (who knew?) -This module no longer has common::sense -Bugfix: auth params now correctly url-encoded/decoded -See also that a SEE ALSO section was added to POD 0.03 2018-02-20 -10% speedup in stringification by not creating variables -Bugfix: setting auth or query did not clear sub-attributes -Bugfix: host was being appended regardless of presence 0.02 2018-02-20 -Bump minimum URI::Encode::XS version to 0.07 (thanks eserte!) 0.01 2018-02-19 -Initial release