NOTE: uriparser is looking for help with a few things:
      https://github.com/uriparser/uriparser/labels/help%20wanted
      If you can help, please get in touch.  Thanks!

2026-05-09 -- 1.0.2

>>>>>>>>>>>>> SECURITY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  * Fixed: [CVE-2026-44927]
      Stop truncating `ptrdiff_t` to `int`
      Thanks for the report to Ilia Alshanetsky and Joshua W. Windle!
      (GitHub #304)
  * Fixed: [CVE-2026-44928]
      Fix `EqualsUri` with regard to `.absolutePath`
      Thanks for the report to Ilia Alshanetsky! (GitHub #305)
>>>>>>>>>>>>> SECURITY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  * Fixed: Fix OOM related memory leak in `CopyUriMm`
      Thanks for the report to Ilia Alshanetsky! (GitHub #306)
  * Improved: Simplify internal function `CompareRange` into `RangeEquals`
      (GitHub #303)
  * Improved: Make function `RangeEquals` use size_t` internally
      (GitHub #307)
  * Soname: 3:2:2 — see https://verbump.de/ for what these numbers do
      (liburiparser.so.1.2.2)

2026-04-27 -- 1.0.1

>>>>>>>>>>>>> SECURITY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  * Fixed: [CVE-2026-42371]
      Protect from integer overflow in text range comparison.
      Thanks for the report and pull request to Joshua W. Windle! (GitHub #298)
>>>>>>>>>>>>> SECURITY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  * Fixed: Fix `reallocarray` preprocessor handling for Illumos (GitHub #289)
  * Improved: Fix an in-code comment typo in src/UriCommon.c;
      Thanks for the report and pull request to Tim Düsterhus! (GitHub #290)
  * Improved: CMake: Start enforcing supported C++ standard (GitHub #295)
  * Improved: Allow use of C++11 to future unit tests (GitHub #296)
  * Infrastructure: Cover compilation with Visual Studio 18 2026 (GitHub #301)
  * Infrastructure: Address warning on CMake <3.10 in CI (GitHub #297)
  * Soname: 3:1:2 — see https://verbump.de/ for what these numbers do
      (liburiparser.so.1.2.1)

2025-12-15 -- 1.0.0

>>>>>>>>>>>>> SECURITY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  * Fixed: [CVE-2025-67899]
      Protect from stack overflow during parsing by dissolving all 13 cases
      of recursion, both direct and indirect. The attack vector was long
      (or crafted) URI input. The known impact is denial of service or more.
      Thanks for the report to Sergey Svistunov!
      Thanks for in-depth review to Tim Düsterhus! (sponsored by Tideways GmbH)
      Thanks for C callgraph tool "egypt" (https://www.gson.org/egypt/)
        to Andreas Gustafsson and for "dot_find_cycles.py" to Jason Antman!
      (GitHub #282, GitHub #284)
>>>>>>>>>>>>> SECURITY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  * Changed: Start requiring a C99 compiler (GitHub #264, GitHub #273)
  * Changed: Require CMake >=3.15.0 (GitHub #270)
  * Changed: Stop building tests by default (GitHub #283)
  * Fixed: Normalization of URIs with leading dot segments
      produced ambiguous results in the sense that a reparse
      after normalization would have misinterpreted path parts
      as a host (GitHub #262, GitHub #263, GitHub #265)
      Examples of affected URIs:
      - "scheme:/.//path1/path2"
      - "/.//path1/path2"
      - ".//path1/path2"
      The fix is to not remove that dot segment.
      Thanks to Ignace Nyamagana Butera and to Tim Düsterhus for the report!
  * Fixed: Insufficient pointer alignment from allocation wrappers
      used in the implementation of function uriCompleteMemoryManager.
      (GitHub #261)
      Thanks to Matthew Fernandez and Rolf Eike Beer for the report and review!
  * Fixed: Do not set `absolutePath` for empty paths when removing host
      Thanks for the report and pull request to Tim Düsterhus!
      (GitHub #275, GitHub #276)
  * Fixed: Documentation of functions uriCompleteMemoryManager,
      uriEmulateCalloc, uriEmulateReallocarray and uriTestMemoryManager
      (GitHub #261)
  * Fixed: CMake: Remake approach to static CRT with MSVC compilers
      Old: -DURIPARSER_MSVC_RUNTIME=/MT
      New: -DURIPARSER_MSVC_STATIC_CRT=ON
      (GitHub #270)
  * Fixed: Documentation: Get CMake variables list back in sync and sorted
      in the readme (GitHub #270)
  * Fixed: Various typos found by Codespell
      (https://github.com/codespell-project/codespell) (GitHub #259)
  * Added: Add a new (and recommended to use) version of uriTestMemoryManager
      that can challenge pointer alignment (GitHub #261)
      New functions:
        uriTestMemoryManagerEx
  * Improved: Increase test coverage by mutation testing
      Thanks for the pull request to Tim Düsterhus! (GitHub #266)
  * Improved: Address compiler warning -Wunused-but-set-variable (GitHub #268)
  * Improved: Deduplicate internal char set macros (GitHub #280)
  * Infrastructure: Enable stack traces from UndefinedBehaviorSanitizer in CI
      via environment variable UBSAN_OPTIONS (GitHub #261)
  * Infrastructure: Bump GoogleTest to 1.12.0 in AppVeyor CI to fix the build
      with CMake >=3.5 (GitHub #261)
  * Infrastructure: Migrate Windows CI from AppVeyor to GitHub Actions
      (GitHub #270)
  * Infrastructure: Make GitHub Actions detect and reject known typos using
      Codespell (https://github.com/codespell-project/codespell) (GitHub #259)
  * Infrastructure: Update Clang from 20 to 21 (GitHub #267)
  * Infrastructure: Start specifying CXX and CXXFLAGS for fuzzing CI
      (GitHub #268)
  * Infrastructure: Make CI report on test coverage using LLVM, and offer
      these reports for download (GitHub #32, GitHub #269)
  * Infrastructure: Make CI enforce clang-format clean code (GitHub #272)
  * Soname: 3:0:2 — see https://verbump.de/ for what these numbers do
      (liburiparser.so.1.2.0)

2025-09-03 -- 0.9.9

  * Changed: Require CMake >=3.10.0 (GitHub #204)
  * Fixed: Dissolve undefined behavior in parsing of URIs (GitHub #252)
      Thanks to Tim Düsterhus for the report!
  * Fixed: Normalized percent-encoded octets should have uppercase letters
      in the host (GitHub #221, GitHub #222)
      Thanks to Máté Kocsis for the pull request!
  * Fixed: Fix documentation of uriEscape (GitHub #206, GitHub #207)
  * Fixed: Docstring typo in ParseIpFourAddress (GitHub #254)
  * Fixed: Documentation: Make Mainpage.txt bypass the C preprocessor
      (GitHub #226, GitHub #227)
  * Fixed: Documentation: Migrate Doxygen from ${CPP} to ${CC} -E (GitHub #192)
  * Fixed: Fix macros URI_VER_SUFFIX_UNICODE and URI_VER_UNICODE (GitHub #258)
      Thanks to Tim Düsterhus for the report and patch!
  * Added: Support for copying Uri structures (GitHub #200, GitHub #230,
      GitHub #237, GitHub #240, GitHub #250, GitHub #251)
      Thanks to Máté Kocsis and to Tim Düsterhus!
      New functions:
        uriCopyUri[AW]
        uriCopyUriMm[AW]
  * Added: Add port normalization to NormalizeSyntax function (GitHub #231)
  * Added: Add function HasHost to the public API (GitHub #234)
      Thanks to Máté Kocsis for the pull request!
      New functions:
        uriHasHost[AW]
  * Added: Support obtaining base runtime version (GitHub #219, GitHub #258)
      New functions:
        uriBaseRuntimeVersion[AW]
  * Added: CMake: Add alias "uriparser::uriparser" (GitHub #197)
  * Added: Integrate fuzzers from google/oss-fuzz repository and
      improve those fuzzers on top (GitHub #209, GitHub #211, GitHub #212,
      GitHub #214)
      Thanks to @tyler92 for two of the related pull requests!
  * Added: Support setting individual components of a UriUri[AW] structure
      (GitHub #196, GitHub #249)
      Part of this work was commissioned by the PHP Foundation.
      Thanks to Máté Kocsis and Tim Düsterhus for the detailed review!
      New functions:
        uriIsWellFormedFragment[AW]
        uriIsWellFormedHostIp4[AW]
        uriIsWellFormedHostIp6[AW]
        uriIsWellFormedHostIp6Mm[AW]
        uriIsWellFormedHostIpFuture[AW]
        uriIsWellFormedHostIpFutureMm[AW]
        uriIsWellFormedHostRegName[AW]
        uriIsWellFormedPath[AW]
        uriIsWellFormedPort[AW]
        uriIsWellFormedQuery[AW]
        uriIsWellFormedScheme[AW]
        uriIsWellFormedUserInfo[AW]
        uriParseIpSixAddress[AW]
        uriParseIpSixAddressMm[AW]
        uriSetFragment[AW]
        uriSetFragmentMm[AW]
        uriSetHostAuto[AW]
        uriSetHostAutoMm[AW]
        uriSetHostIp4[AW]
        uriSetHostIp4Mm[AW]
        uriSetHostIp6[AW]
        uriSetHostIp6Mm[AW]
        uriSetHostIpFuture[AW]
        uriSetHostIpFutureMm[AW]
        uriSetHostRegName[AW]
        uriSetHostRegNameMm[AW]
        uriSetPath[AW]
        uriSetPathMm[AW]
        uriSetPortText[AW]
        uriSetPortTextMm[AW]
        uriSetQuery[AW]
        uriSetQueryMm[AW]
        uriSetScheme[AW]
        uriSetSchemeMm[AW]
        uriSetUserInfo[AW]
        uriSetUserInfoMm[AW]
  * Improved: CMake: Compile with -std=c90 by default (GitHub #232)
  * Improved: Be consequent about and document .hostData.ipFuture .hostText
      relation (GitHub #243)
  * Improved: Document and cover FreeUriMembers after memset with zeros
      (GitHub #238, GitHub #239)
  * Improved: CLI tool "uriparse": Add missing hostData.ipFuture output
      (GitHub #253)
  * Improved: tests: Mass-replace ASSERT_TRUE([..] == [..]) by ASSERT_EQ
      (GitHub #235)
  * Improved: tests: Leverage assertion EXPECT_STREQ (GitHub #257)
  * Improved: Percent encoding related code cleanup (GitHub #242)
  * Improved: Documentation: Update some URLs to new HTTPS locations
      Thanks to Hanno Böck for the pull request!
      (GitHub #224)
  * Improved: Documentation: Hide URI_PUBLIC (GitHub #236)
  * Improved: Convert remaining DOS (CR/LF) newlines to Unix newlines
      Thanks to Hanno Böck for the pull request!
      (GitHub #225)
  * Improved: Rename misleading variable doneMask to revertMask
      (GitHub #233, GitHub #244)
  * Improved: Make licensing easier to discover (GitHub #246)
  * Changed: Documentation: For the Qt Compressed Help file, migrate from
      naming ".qch" to "-doc.qch" (GitHub #191)
  * Infrastructure: Update Clang from 18 to 20 (GitHub #217, GitHub #228)
  * Infrastructure: Bump CI to Ubuntu 24.04 (GitHub #216)
  * Infrastructure: Adapt to breaking changes in CI (GitHub #199, GitHub #204)
  * Soname: 2:0:1 — see https://verbump.de/ for what these numbers do
      (liburiparser.so.1.1.0)

2024-05-05 -- 0.9.8

>>>>>>>>>>>>> SECURITY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  * Fixed: [CVE-2024-34402]
      Protect against integer overflow in ComposeQueryEngine
      (GitHub #183, GitHub #185)
  * Fixed: [CVE-2024-34403]
      Protect against integer overflow in ComposeQueryMallocExMm
      (GitHub #183, GitHub #186)
>>>>>>>>>>>>> SECURITY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  * Changed: Require CMake >=3.5.0 (GitHub #172)
  * Added: CMake option URIPARSER_SHARED_LIBS=(ON|OFF) to control,
      whether to produce a shared or static library for uriparser
      and that alone, falls back to standard BUILD_SHARED_LIBS
      if available, else defaults to "ON" (GitHub #169, GitHub #170)
  * Improved: Document that scheme-based normalization a la
      section 6.2.3 of RFC 3986 is a responsibility of the application
      using uriparser (GitHub #173, GitHub #174)
  * Improved: Document supported code points for functions uriEscape(Ex)W
      (GitHub #171, GitHub #175)
  * Infrastructure: Update Clang from 15 to 18 (GitHub #161, GitHub #187)
  * Infrastructure: Adapt to breaking changes in Clang packaging (GitHub #160)
  * Infrastructure: Get sanitizer CFLAGS and LDFLAGS back in sync (GitHub #161)
  * Infrastructure: Pin GitHub Actions to specific commits for security
      (GitHub #165)
  * Soname: 1:31:0 — see https://verbump.de/ for what these numbers do
      (liburiparser.so.1.0.31)

2022-10-05 -- 0.9.7

  * Fixed: Multiple issues with IPv6 and IPvFuture literal parsing
      (GitHub #146, GitHub #150)
      Thanks to Scallop Ye for the report and the pull request!
  * Fixed: Fix symbol visibility for -DBUILD_SHARED_LIBS=OFF (GitHub #139,
      GitHub #141); thanks to Mariusz Zaborski for the report!
  * Fixed: For MinGW, use size_t for inet_ntop declaration and fix macro
      checks for both MinGW and mingw-w64 (GitHub #131)
  * Fixed: Compiler warnings (GitHub #132, GitHub #152)
  * Improved: Use name UriConfig.h rather than generic config.h for the
      config header file to avoid name clashes and also include it through
      "UriConfig.h" with quotes rather than <UriConfig.h> so that it is found
      in quote path locations (GitHub #149)
      Thanks to Gaspard Petit for bringing this up!
  * Improved: Document need for UriConfig.h in UriMemory.c (GitHub #136)
  * Infrastructure: Add (support for) Visual Studio 17/2022 (GitHub #152)
  * Infrastructure: Drop (support for) Visual Studio <=14/2015 (GitHub #152)
  * Infrastructure: Update Clang from 13 to 15 (GitHub #143, GitHub #151)
  * Infrastructure: Make MinGW with 32bit Wine on Ubuntu 20.04 possible
      (GitHub #142, GitHub #144, GitHub #145)
  * Soname: 1:30:0 — see https://verbump.de/ for what these numbers do

2022-01-06 -- 0.9.6

>>>>>>>>>>>>> SECURITY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  * Fixed: [CVE-2021-46141]
      Fix a bug affecting both uriNormalizeSyntax* and uriMakeOwner*
      functions where the text range in .hostText would not be duped using
      malloc but remain unchanged (and hence "not owned") for URIs with
      an IPv4 or IPv6 address hostname; depending on how an application
      uses uriparser, this could lead the application into a use-after-free
      situation.
      As the second half, fix uriFreeUriMembers* functions that would not
      free .hostText memory for URIs with an IPv4 or IPv6 address host;
      also, calling uriFreeUriMembers* multiple times on a URI of this
      very nature would result in trying to free pointers to stack
      (rather than heap) memory (GitHub #121, GitHub #124)
      Commit 987b046e41f407d17c622e580fc82a5e834b4329
      Commit b1a34743bc1472e055d886e29e9b53f670eb3282
  * Fixed: [CVE-2021-46142]
      Fix functions uriNormalizeSyntax* for out-of-memory situations
      (i.e. malloc returning NULL) for URIs containing empty segments
      (any of user info, host text, query, or fragment) where previously
      pointers to stack (rather than heap) memory were freed (GitHub #122,
      GitHub #124)
      Commit c0483990e6b5b454f7c8752b36760cfcb0d093f5
>>>>>>>>>>>>> SECURITY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  * Fixed: CMake: Call "enable_language(CXX)" prior to tinkering with
      CMAKE_CXX_* variables (GitHub #110)
      Thanks to Alexander Richardson for the patch (originally at libexpat)
  * Fixed: CMake: Support absolute paths for both CMAKE_INSTALL_LIBDIR
      and CMAKE_INSTALL_INCLUDEDIR (GitHub #114)
      Thanks to Rafael Fontenelle for bringing this up (originally at libexpat)
  * Fixed: Windows: Address MSVC compiler warnings (GitHub #111, GitHub #113)
  * Fixed: Documentation: Space requirements for uriUriStringToUnixFilename
      did not take into account short form "file:/bin/bash" of RFC 8089 of 2017
      (with prefix "file:/" rather than "file:///") that uriparser supports
      since release 0.8.6 in 2018 (GitHub #118, GitHub #119)
  * Fixed: Compile error with MinGW GCC 9 related to a mismatched prototype
      for function inet_ntop (GitHub #117, GitHub #120)
      Thanks to Sandro Mani for the report!
  * Fixed: Compile warnings in test suite code (GitHub #120)
  * Improved: Respect variable ${CPP} in doc/preprocess.sh (GitHub #115)
  * Added: Test suite invocation for MinGW using Wine (GitHub #120)
  * Soname: 1:29:0 — see https://verbump.de/ for what these numbers do

2021-03-18 -- 0.9.5

  * Fixed: Fix a bug regarding section "5.2.4. Remove Dot Segments"
      of RFC 3986 that affected both normalization and reference resolution
      with regard to trailing slashes (GitHub #92, #97)
      Thanks to Dan Pape for the report!
  * Fixed: MinGW: Fix name of static library (GitHub #90)
      Thanks to SpaceIm for the patch and Sandro Mani for review!
  * Fixed: Use correct inline marker "__forceinline" for Intel C++ Compiler
      (GitHub #93)
      Thanks to jensenrichardson for the patch!
  * Fixed: Link against pthreads for (default) -DURIPARSER_BUILD_TESTS=ON
      (GitHub #99, #100)
  * Fixed: When integrated using CMake function add_subdirectory, installation
      could fail due to lack of prefix ${CMAKE_CURRENT_SOURCE_DIR} (GitHub #98)
      Thanks for the patch to Shehzan Mohammed!
  * Fixed: Addressed MSVC compile warning about lack of /EHsc when compiling
      the C++ test suite code (GitHub #102)
  * Fixed: Stopped misadvertising wide characters as Unicode support
      (GitHub #104)
  * Added: CMake option URIPARSER_WARNINGS_AS_ERRORS=(ON|OFF)
      to turn compile warnings into errors, defaults to "OFF" (GitHub #102)
  * Improved: pkg-config: Use ${prefix} and ${exec_prefix} to ease
      overriding variables using --define-variable=NAME=VALUE,
      e.g. as done on OpenWRT (GitHub #91)
      Thanks to Karel Kočí for the pull request!
  * Improved: Auto-detection of the qhelpgenerator command based on CMake
      package "Qt5Help" when available.  CMake option "QHG_LOCATION" can still
      be used to enforce a specific location (GitHub #103)
      Thanks for his help to Andreas Sturmlechner!
  * Improved: Make documentation use pkg-config in example on how to
      check for uriparser from within configure.ac (GNU Autoconf)
      (GitHub #37, #106)
  * Improved: In testing code, add a missing 'extern "C"' (GitHub #109)
      Thanks to Jørgen Ibsen for the patch!
  * Soname: 1:28:0 — see https://verbump.de/ for what these numbers do

2020-05-31 -- 0.9.4

  * Fixed: testrunner: No longer crashes when compiled with NDEBUG (GitHub #67)
  * Fixed: CMake: Support GTest 1.8.0 (GitHub #68)
      Thanks to Ryan Schmidt for the related report!
  * Fixed: CMake: Use variable GTEST_INCLUDE_DIRS (with plural "S") rather than
      GTEST_INCLUDE_DIR (GitHub #79, #81)
      Thanks to Wouter Beek for the related report!
  * Improved: CMake: Send config summary to stdout, not stderr (GitHub #72)
      Thanks to Scott Donelan for the patch!
  * Improved: Make -DURIPARSER_BUILD_TESTS=OFF unlock compilation without
      a C++ compiler; thanks to Fabrice Fontaine for the patch! (GitHub #69)
  * Added: Functions to make UriUri[AW] instances independent of the original
      URI string (GitHub #77 and #78)
      New functions:
        uriMakeOwner[AW]
        uriMakeOwnerMm[AW]
  * Added: CMake option URIPARSER_ENABLE_INSTALL to toggle installation of
      files, defaults to "ON" (GitHub #74, #75)
      Thanks to Scott Donelan for the patch!
  * Soname: 1:27:0

2019-04-28 -- 0.9.3

  * Fixed: pkg-config: Fix version line in liburiparser.pc (GitHub #65)
  * Changed: MinGW: Add library version suffix to DLL name
      Thanks to Sandro Mani for the patch! (GitHub #63, #64)
  * Soname: 1:26:0

2019-04-22 -- 0.9.2

  * Fixed: Add missing extern "C" wrapper to UriIp4.h for use from C++
  * Fixed: Linking error for symbol defaultMemoryManager from mixing C and C++
      Thanks to Jørgen Ibsen for the report! (GitHub #52)
  * Fixed: Link errors on Haiku regarding function inet_ntop (GitHub #45)
      Thanks to Schrijvers Luc for the patch!
  * Fixed: Mark API functions with __declspec(dllexport) and
      __declspec(dllimport) in *.h files for Visual Studio (GitHub #60)
  * Improved: Use -fvisibility=hidden by default with supporting compilers,
       e.g. GCC and Clang (GitHub #60)
  * Changed: Migrated from GNU Autotools to CMake (GitHub #17, #47, #56, #59)
      Thanks for their support with the CMake migration to:
      - David Demelier
      - Jørgen Ibsen
      - KangLin
      - Kouhei Sutou
      - myd7349
      - Richard Hodges
      - Zachary Lund
  * Removed: All Windows-related build systems other than CMake
  * Soname: 1:25:0

2019-01-02 -- 0.9.1

>>>>>>>>>>>>> SECURITY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  * Fixed: [CVE-2018-20721]
      Out-of-bounds read in uriParse*Ex* for incomplete URIs with IPv6
      addresses with embedded IPv4 address, e.g. "//[::44.1";
      mitigated if passed parameter <afterLast> points to readable memory
      containing a '\0' byte.
      Commit cef25028de5ff872c2e1f0a6c562eb3ea9ecbce4
      Thanks to Joergen Ibsen for the report!
>>>>>>>>>>>>> SECURITY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  * Fixed: When parsing a malformed URI with an IPvFuture address
      (e.g. "http://[vA.123456" missing "]"), errorPos would point to the first
      character after "v" than the actual position of the error (here: the end
      of the string)
  * Fixed: uriToStringCharsRequired* reported 1 more byte than actually needed
      for IPv4 address URIs (GitHub #41); Thanks to @gyh007 for the patch!
  * Fixed: Compilation with MinGW
      Thanks to Sandro Mani for the patch!
  * Fixed: Drop use of asprintf from the test suite for MinGW (GitHub #40)
  * Improved: For parse errors, waterproof errorPos <= afterLast
  * Soname: 1:24:0

2018-10-27 -- 0.9.0

>>>>>>>>>>>>> SECURITY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  * Fixed: [CVE-2018-19198]
      Out-of-bounds write in uriComposeQuery* and uriComposeQueryEx*
      Commit 864f5d4c127def386dd5cc926ad96934b297f04e
      Thanks to Google Autofuzz team for the report!
  * Fixed: [CVE-2018-19199]
      Detect integer overflow in uriComposeQuery* and uriComposeQueryEx*
      Commit f76275d4a91b28d687250525d3a0c5509bbd666f
      Thanks to Google Autofuzz team for the report!
  * Fixed: [CVE-2018-19200]
      Protect uriResetUri* against acting on NULL input
      Commit f58c25069cf4a986fe17a80c5b38687e31feb539
>>>>>>>>>>>>> SECURITY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  * Fixed: Be fully compliant to C89 (GitHub #28) and C++98 in test code
  * Fixed: Fix off-by-one in uriComposeQueryCharsRequired* and ...Ex*
      Reported space requirements were 1 byte bigger than necessary
  * Changed: Marked as deprecated:
      Deprecated functions:
        uriNormalizeSyntaxMaskRequired[AW]
        uriParseUri[AW]
        uriParseUriEx[AW]
  * Added: Add convenience functions to ease user code to parse a single URI
      New functions:
        uriParseSingleUri[AW]
        uriParseSingleUriEx[AW]
        uriParseSingleUriExMm[AW]
  * Added: Support for custom memory managers (GitHub #26, #35), see Doxygen
      New functions (as extension of existing ones):
        uriAddBaseUriExMm[AW]
        uriComposeQueryMallocExMm[AW]
        uriDissectQueryMallocExMm[AW]
        uriFreeQueryListMm[AW]
        uriFreeUriMembersMm[AW]
        uriNormalizeSyntaxExMm[AW]
        uriParseSingleUriExMm[AW]
        uriRemoveBaseUriMm[AW]
      New functions (for convenience):
        uriCompleteMemoryManager
        uriEmulateCalloc
        uriEmulateReallocarray
        uriTestMemoryManager
      New error codes:
        URI_ERROR_MEMORY_MANAGER_FAULTY
        URI_ERROR_MEMORY_MANAGER_INCOMPLETE
      New types:
        UriFuncCalloc
        UriFuncFree
        UriFuncMalloc
        UriFuncRealloc
        UriFuncReallocarray
        UriMemoryManager
  * Added: Add non-void versions of uriNormalizeSyntaxMaskRequired*
      New functions:
        uriNormalizeSyntaxMaskRequiredEx[AW]
  * Changed: Migrate test suite from CppTest to GoogleTest 1.8.1
  * Improved: Make test suite free of memory leaks (GitHub #31)
      Thanks to AddressSanitizer!
  * Removed: Support for pointless define URI_SIZEDOWN (GitHub #29)
      Related configure option --enable-sizedown has also been removed.
  * Soname: 1:23:0

2018-08-18 -- 0.8.6

  * Fixed: Bad/NULL .hostText.afterLast when parsing certain rather pathologic
      but well-formed URIs with empty host (e.g. "//:%aa@") (GitHub #15)
      Thanks to Kurt Schwehr for the report!
  * Fixed: Fix uriRemoveBaseUri for case where scheme, host name,
      IPvFuture address or path segments of the source address were
      string prefixes of the related counterpart in the base URI.
      Thanks to Yang Yu for the patch! (GitHub #19, #20)
  * Fixed: Make UriStringToUnixFilename and UriStringToWindowsFilename
      support minimal representation a la RFC 8089, e.g. file:/bin/bash
      (compare to file:///bin/bash with three slashes) (GitHub #12, #14)
      Thanks to Zane van Iperen for the report!
  * Fixed: Documentation typos (GitHub #10, #11)
      Thanks to Graham Percival!
  * Improved: Made API docs of uriRemoveBaseUri more clear
      (related to GitHub #19)
  * Soname: 1:22:0

2018-02-07 -- 0.8.5

  * Changed: The uriparser project has moved from SourceForge to GitHub:
      Code + issue tracker: https://github.com/uriparser/uriparser
      New website: https://uriparser.github.io/
      Please update any links of yours, accordingly. Thank you!
  * Fixed: Memleak in out-of-memory clean-up code
      of URI normalization, related to SF.net bug #28.
      Thanks to Chris Hills for the report!
  * Fixed: Fix compilation of uriparse(1) on FreeBSD
      Thanks to Ed Schouten for the patch!
  * Fixed: Fix C90 compilation errors
      Thanks to Joel Cunningham for the patches!
  * Fixed: Space requirements documented for uriWindowsFilenameToUriStringA
      given URI "file://server1/file1.txt" (SF.net bug #31)
      Thanks to threedyd for the report!
  * Fixed: Compiler warnings
      Thanks to Joel Cunningham for the patches!
  * Fixed: Stop exporting internal function RemoveBaseUriImpl
      Thanks to Joel Cunningham for the report!
  * Fixed: API documentation front page no longer empty with Doxygen 1.8.13
  * Fixed: "make -C doc install" fixed for lack of .map files
  * Improved: Communicate that absolutePath is always URI_FALSE for URIs
      with a host in uriparse CLI tool output and Uri.h header
      (GitHub #2, SF.net #30)
  * Soname: 1:21:0

2015-10-12 -- 0.8.4

  * Fixed: Stack overflow on parsing malformed IPv6 addresses with
      more than eigtht quads.  Thanks to Alexander Klink for the report!
  * Soname: 1:20:0

2015-10-04 -- 0.8.3

  * Fixed: uriCompareRange reported NULL pointer and range of
      length zero as equal, by mistake.
      Thanks to Robert Kausch and his Coverity report.
  * Fixed: Use-after-free in out-of-memory code of uriMakeOwner.
      Thanks to Chris Hills and his Klocwork-based report (SF.net bug #28)
  * Soname: 1:19:0

2015-04-27 -- 0.8.2

  * Fixed: Broken conversion from/to Windows network shares (SF.net bug #21)
      Thanks to Adam Gross and Dmitry Repkin!
  * Fixed: Limit uriCompareRange return values to -1/0/1 (SF.net bug #24)
      As a side effect, this fixes the test suite for AArch64.
      Thanks to Marcin Juszkiewicz for the patch!
  * Fixed: MinGW Makefile:
      LIB_DIR fixed from ../../lib leftover to ../../src (SF.net bug #27)
      Thanks to Dmytro Zagashev for the report!
  * Fixed: Add missing NULL checks to UriStringToFilename (SF.net bug #25)
      Thanks to Jerome Custodio for the report!
  * Changed: Leave inlining decisions to GCC
  * Soname: 1:18:0

2014-10-20 -- 0.8.1

  * Fixed: Sync URI_VER_* preprocessor defines (were at 0.7.6, SF.net bug #23)
  * Fixed: Bug in internal function that may flip uriEqualsUri results around
  * Added: Function uriAddBaseUriEx allowing to resolve URIs with
      a scheme identical to that of the base URI to resolve against
      as if the URI to resolve had no scheme specified, when flag
      URI_RESOLVE_IDENTICAL_SCHEME_COMPAT is specified
      (SF.net feature request #4)
  * Soname: 1:17:0

2014-07-12 -- 0.8.0.1

  * Fixed: ISO C90 warnings (SF.net bug #20)
  * Changed: No longer ship RFC documents (to make things easier for Debian)
  * Soname: 1:16:0

2013-12-20 -- 0.8.0

  * Fixed: Resolution of relative URI "/" broken
      Thanks to Mo McRoberts for the patch!
  * Fixed: uriAddBaseUri produced uriUri objects with both host
      and the absolutePath flag set (while the absolutePath flag
      should only be true for URI objects without a host) when
      resolving absolute URIs like "/" or "/foo/bar".
      Now the absolutePath flag is set to URI_FALSE and an empty
      segment is added as necessary
  * Fixed: .errorCode could end up unset, previously
      Thanks to Radu Hociung for the patch!  (SF.net bug #16)
  * Fixed: Resolve use of non-POSIX "sed -r" used when building
     documentation  (SF.net bug #18)
     Thanks to Ryan Schmidt for reporting!
  * Fixed: Build DLL with -no-undefined on Windows
      Thanks to Michel Zou for the patch!  (SF.net bug #19)
  * Added: Command line tool "uriparse"
      Thanks to Radu Hociung for coding!  (SF.net feature request #3)
  * Soname: 1:15:0

2013-08-24 -- 0.7.9

  * Fixed: Error position ended up as NULL for some syntax errors.
      Thanks to Daniel Solano Gómez for the patch!  (SF.net bug #14)
  * Soname: 1:14:0

2013-05-13 -- 0.7.8

  * Fixed: Fix dissection of query string "q=hello&x=&y=" (SF.net bug #12)
      Thanks to Marc Novakowski for reporting!
  * Soname: 1:13:0

2012-04-05 -- 0.7.7

  * Fixed: Fix rejection of some valid characters for userinfo
      section, e.g. "http://%2Fuser:%2F21@host/" (SF.net bug #11)
  * Fixed: Fix rejection of valid double colon in userinfo
      section, e.g. "http://::@host/"
  * Soname: 1:12:0

2012-01-20 -- 0.7.6

  * Fixed: Qt Compressed Help file was not installed
  * Fixed: Shadow/VPATH build doc generation
  * Fixed: Compile error from Doxygen when configuring with
      neither --enable-doc nor --disable-doc
  * Fixed: Code documentation errors
      Thanks to Valentin Haenel for the patch!
  * Fixed: Fix include path in pkg-config, i.e. remove
      "/uriparser" suffix as uriparser's headers are meant to
      be included by statements like #include <uriparser/....> .
      Thanks to Philip de Nier for reporting!
  * Fixed: Compilation in context of Eclipse + Cygwin + wchar_t
      (SF.net bug #10)
      Thanks to Gary Mazzaferro for reporting!
  * Fixed: Selection of supported character widths at build
      time: <char *> or <wchar_t *> or both
  * Added: configure parameters to disable either character
      widths: --disable-char, --disable-wchar_t
  * Soname: 1:11:0

2009-03-04 -- 0.7.5

  * Added: pkg-config file
  * Fixed: File Doxyfile.in was missing from release archives
      Thanks to Rakesh Pandit for reporting!
  * Fixed: Doc generation troubles
  * Changed: No longer shipping bundled libcpptest
  * Changed: New dependencies:
      - libcpptest 1.1.0 or later
      - pkg-config
      The libcpptest dependency can be disabled through
      configuring with --disable-test, which excludes the
      test suite from compilation.
  * Soname: 1:10:0

2008-12-23 -- 0.7.4

  * Fixed: Null pointer de-referencing when dissecting query
      strings starting with "&" right after "?" (SF.net bug #7).
      Thanks to Harvey Vrsalovic for reporting!
  * Fixed: Memory leak in uriFreeQueryList function (SF.net bug #6)
      Thanks to Daniel Chapiesky for reporting!
  * Fixed: Memory leak in uriNormalizeSyntax(Ex) functions (SF.net bug #6)
      Thanks to Daniel Chapiesky for reporting!
  * Improved: Nested configure hacks resolved
  * Soname: 1:9:0

2008-11-08 -- 0.7.3

  * Fixed: Missing NULL check in parsing routines
      Thanks to Sezai Tekin for reporting!
  * Fixed: uriparser now builds on Cygwin
  * Fixed: Now shipping gnulib's config.guess from HEAD
      which is suitable for Haiku (SF.net bug #5)
  * Changed: swprintf requirement resolved
  * Changed: Build system changes:
      - configure option --enable-doc added
      - configure.in renamed to configure.ac
      - some Autotools files moved to build-aux directory
  * Added: Qt Assistant documentation output:
      - Qt Compressed Help (.qch) at <doc/uriparser-doc-*.qch>
      - Qt Help Project (.qhp) at <doc/html/index.qhp>
      Generation requires Doxygen 1.5.7.1-20081103 or later.
  * Soname: 1:8:0

2008-09-01 -- 0.7.2

  * Fixed: Bad cleanup logic in functions
      - uriAddBaseUri(..)
      - uriRemoveBaseUri(..)
      Previously you needed to call uriFreeUriMembers on return code
      URI_ERROR_MALLOC and only then. So that's why these functions now
      take cleanup off your shoulders. An extra call to uriFreeUriMembers
      from your side is still needed in case of success.
  * Soname: 1:7:0

2008-04-27 -- 0.7.1

  * Fixed: Bogus syntax error when parsing URIs with port-like
      passwords, e.g. "http://user:21@host/" (SF.net bug #1)
      Thanks to Friedrich Delgado Friedrichs for reporting!
  * Fixed: Parser did not handle trailing slashes correctly in some cases,
      which also made the structures produced from parsing "http://e.com/"
      and "http://e.com" indistinguishable. (SF.net bug #2)
      Thanks to Edward Z. Yang for reporting!

2008-04-04 -- 0.7.0

  * Added: Dissection and composition of query strings
  * Added: Documentation improvements
      (in|out|inout indicators, addition of \since and \see)
  * Changed: Code::Blocks project files updated from file format
      version 1.4 to 1.6, which is produced by Code::Blocks 8.02
  * Added: Code::Blocks workspace file
  * Soname: 1:5:0

2008-02-25 -- 0.6.4

  * Added: Syntax-based normalization can now handle relative URIs,
      e.g. "../../a/b/.././c" is normalized to "../../a/c"
  * Fixed: Normalization code could free foreign memory
  * Fixed: Normalization processed the path segment even when asked not to
  * Added: MinGW Makefile and related readme
      Thanks to Michael Anthony Puls II!
  * Fixed: Documentation bug not requiring enough memory for the output
      buffer when converting a relative file URI back to a filename
  * Soname: 1:4:0

2008-02-11 -- 0.6.3

  * Fixed: Two major crash bugs in normalization code
      Thanks to Adrian Manrique for the patch!
  * Added: Brief usage tutorial
  * Soname: 1:3:0

2008-02-08 -- 0.6.2

  * Fixed: Freeing a normalized URI like "http://test?"
      caused a crash. Thanks to Adrian Manrique for reporting!
  * Fixed: Filename <--> URI string conversion helpers can
      now handle relative URIs and filenames
  * Soname: 1:2:0

2007-12-23 -- 0.6.1

  * Fixed: Percent-encodings in hostnames were not repaired during normalization.
      Thanks to Adrian Manrique for reporting!
  * Fixed: Percent-encodings were fixed after dot removal not before during
      normalization.
      Thanks to Adrian Manrique for reporting!
  * Fixed: Include path order bug
      Thanks to Ed Schouten for reporting this!
  * Fixed: Shadow builds now possible
      Thanks to Adeodato Simó for the patch!
  * Added: Version guards for Autoconf/Automake
      Thanks to Martin Michlmayr for reporting!
  * Soname: 1:1:0

2007-09-17 -- 0.6.0

  * Fixed: Proper soname updates from now on, starting at 1:0:0
  * Removed: Visual Studio 2003 project files

2007-09-13 -- 0.5.2

  * Added: RemoveBaseUri function to create URI references
  * Added: Unix/Windows filename <--> URI string conversion helpers
  * Added: EscapeEx function to escape text blocks without zero termination
  * Fixed: Bug in ToString for URIs with scheme, path, but no host (e.g. "f:/.//g")
  * Fixed: AddBase now resolves ".//g" with base "f:/a" to "f:/.//g" instead of
      "f://g" which would result in "g" becoming the authority part when parsing
      a recomposition (ToString) of that URI structure. This is a whole in RFC 3986,
      see http://lists.w3.org/Archives/Public/uri/2007Aug/0003.html for details.

2007-08-09 -- 0.5.1

  * Fixed: Empty host bug (URIs like "///g")
  * Fixed: Relative URIs are no longer touched by normalization
  * Fixed: MergePath failed for empty paths
  * Fixed: Bug with "." segments in AddBase
      All of the above revealed by test cases from 4Suite (http://4suite.org/)

2007-07-28 -- 0.5.0

  * Added: Syntax-based normalization
  * Added: Percent-encoding function Escape
  * Improved: Malloc/NULL checks added
  * Added: New function UnescapeInPlaceEx can also decode '+' to ' '
      and convert line breaks
  * Added: Exact space computation for ToString, see ToStringCharsRequired
  * Added: --enable-sizedown for saving space and slower code
  * Fixed: Two internal functions were exposed in the API by mistake:
      uriPushToStack and uriStackToOctet
  * Added: Visual Studio 2005 project files
  * Removed: Legacy code (removal was announced for 0.5.0)

2007-07-06 -- 0.4.1

  * Fixed: ToString did not work for IPv4 and IPv6 hosts

2007-07-03 -- 0.4.0

  * Added: References resolution (think relative to absolute)
  * Added: Naive URI equality check
  * Added: URIs can now be converted back to strings
  * Fixed: The first path segment of a relative URI was eaten
      (functions ParseSegmentNz and ParseMustBeSegmentNzNc)
  * Fixed: uri->scheme.first was not reset in some cases
      (function ParseMustBeSegmentNzNc)
  * Improved: Test suite now built on "make check", not before
  * Fixed: Test suite always returned 0 (success)

2007-04-23 -- 0.3.4

  * Added: Shared library support (moved to libtool)

2007-04-03 -- 0.3.3

  * Fixed: Now unix EOLs constantly
  * Fixed: Added forgotten files to release package

2007-03-31 -- 0.3.2

  * Fixed: Now compiles on FreeBSD

2007-03-28 -- 0.3.1

  * Fixed: Now compiles on Mac OS X

2007-03-26 -- 0.3.0

  * Added: New API, old marked deprecated
  * Added: Added support for wide strings (think wchar_t)
  * Added: Doxygen code documentation
  * Added: Test suite using CppTest
  * Changed: Library code is now licensed under the new BSD license.
      The test suite code is licensed under LGPL.

2006-12-08 -- 0.2.1
