curl - Changes

curl / Docs / Releases / Changelog
Related:
Daily Snapshots
Source repo
Security
Vulnerabilities
Release log
Pending Release Notes

# All changes ever made

## Fixed in 8.20.0 - April 29 2026

8.20.0
8.20.0
8.20.0 changes only

Changes:

- async-thrdd: use thread queue for resolving
- build: make NTLM disabled by default
- cmake: drop support for CMake 3.17 and older
- lib: add thread pool and queue
- lib: drop support for < c-ares 1.16.0
- lib: make SMB support opt-in
- multi.h: add CURLMNWC_CLEAR_ALL
- rtmp: drop support

Bugfixes:

- altsvc: cap the list at 5,000 entries
- altsvc: drop the prio field from the struct
- altsvc: skip expired entries read from file
- asyn-ares: connect async
- asyn-ares: drop orphaned variable references
- asyn-ares: fix HTTPS-lookup when not on port 443
- asyn-thrdd: drop redundant `result` check
- asyn-thrdd: fix clang-tidy unused value warning
- async-ares: fix query counter handling
- autotools: limit checksrc target to ignore non-repo test sources
- badwords-all: exit with correct code on errors
- badwords: combine the whitelisting into a single regex
- badwords: detect 'the the' and 'with with'
- badwords: only check comments and strings in source code
- badwords: rework exceptions, fix many of them
- boringssl: fix more coexist cases with Schannel/WinCrypt
- build: adjust/add casts to fix `-Wformat-signedness`
- build: assume `snprintf()` in `mprintf`, drop feature check
- build: compiler warning silencing tidy-ups
- build: drop `openssl` module dependency for BoringSSL from `libcurl.pc`
- build: drop duplicate `pthread.h` includes
- build: drop redundant `USE_QUICHE` guards
- build: enable `-Wimplicit-int-enum-cast` compiler warning, fix issues
- build: fix `-Wformat-signedness` by adjusting printf masks
- build: link `bcrypt.lib` via vcxproj files
- build: skip detecting `pipe2()` for Apple targets
- cf-https-connect: silence `-Wimplicit-int-enum-cast` with HTTPS-RR
- cf-https-connect: silence `-Wimplicit-int-enum-cast` with HTTPS-RR
- cf-ip-happy: limit concurrent attempts
- cf-socket: avoid low risk integer overflow on ancient Solaris
- cfilters: fix Curl_pollset_poll() return code mixup
- clang-tidy: avoid assignments in `if` expressions
- clang-tidy: enable more checks, fix fallouts
- cmake: add CMake Config-based dependency detection
- cmake: add CMake Config-based dependency detection for c-ares, wolfSSL
- cmake: document functions used from Windows system DLLs
- cmake: enable pthreads for BoringSSL/AWS-LC
- cmake: resolve targets recursively when generating `libcurl.pc`
- cmake: rework binutils ld hack to not read `LOCATION` property
- cmake: silence bad library `Threads::Threads` warning
- cmake: use `AIX` built-in variable (with CMake 4.0+)
- config2setopts: make --capath work in proxy disabled builds
- configure: fix `--with-ngtcp2=<path>` option for crypto libs
- configure: fix LibreSSL ngtcp2 1.15.0+ crypto lib selection logic
- configure: prefer dependency-specific variables over `$withval`
- configure: remove superfluous experimental warning for HTTP/3
- configure: silence useless clang warnings in C89 builds
- configure: tidy up comments
- connect: fix typo on error message
- cookie: fix rejection when tabs in value
- curl-wolfssl.m4: fix to use the correct value for pkg-config directory
- curl.h: replace macros with C++-friendly method to enforce 3 args
- curl_ctype.h: fix spelling in a couple of locally used macros
- curl_get_line: error out on read errors
- curl_get_line: fix potential infinite loop when filename is a directory
- curl_ngtcp2: extend and update callbacks for 1.22.0+
- curl_ntlm_core: drop redundant PP condition
- curl_ntlm_core: use wolfCrypt DES API with wolfSSL
- curl_setup.h: drop stray/unused `USE_OPENSSL_QUIC` guard
- curl_sha512_256: support delegating to wolfSSL API
- curl_version_info.md: clarify age details
- CURLOPT_HAPROXY_CLIENT_IP.md: mention assumption on data format
- CURLOPT_RTSP_SESSION_ID.md: clarify reuse "dangers"
- CURLOPT_RTSP_SESSION_ID.md: expand the comment
- CURLOPT_RTSP_SESSION_ID.md: minor language fix
- CURLOPT_SOCKS5_AUTH.md: an access property
- CURLOPT_SSL_CTX_FUNCTION.md: expand on effects connection reuse
- CURLOPT_UPLOAD_FLAGS.md: expand
- curlx_now(), prevent zero timestamp
- DEPRECATE: fix minor release number typo
- digest: pass in the username quoted (as well)
- dns: https-eyeballing async
- dnscache: own source file, improvements
- docs/cmdline-opts: tidy up retry-connrefused
- docs/lib: fix typos
- docs/libcurl: improve easy setopt examples
- docs: clarify retry-max-time timing
- docs: CURLOPT_LOGIN_OPTIONS is a login property
- docs: enable more compiler warnings for C snippets, fix 3 finds
- docs: list more dependencies for running Python HTTP tests
- docs: mention more zip bomb precautions
- docs: minor wording tweaks
- docs: noproxy wants the punycoded hostname version
- docs: SSH host verification is done at connect time
- docs: use the correct CURLOPT_WRITEFUNCTION signature
- doh: fix memory-leak when doing a second DoH resolve
- doh: remove superfluous doh_req check
- examples/websocket: fix to sleep more on Windows
- examples: drop warning silencers no longer hit
- examples: fix typo in comment
- file: init fd to -1 to prevent close fd 0 on early failure
- fopen: for temp files, inherit permissions only for owner
- ftp: do not strdup DATA hostname
- ftp: make the MDTM date parser stricter (again)
- ftp: reject PWD responses containing control characters
- gcc: guard `#pragma diagnostic` in core code for <4.6
- generate.bat: remove extra % from VC11 and VC12 runs
- genserv.pl: make external calls safe
- getinfo: initialize `PureInfo` field `used_proxy`
- getinfo: repair CURLINFO_TLS_SESSION
- gnutls: fix clang-tidy warning with !verbose
- gtls: fail for large files in `load_file()`
- h3: HTTPS-RR use in HTTP/3
- Happy Eyeballs: add resolution time delay
- haproxy: use correct ip version on client supplied address
- hostip: clear the sockaddr_in6 structure before use
- hostip: init the curl_jmpenv_lock appropriately
- hostip: resolve user supplied ip addresses
- HSTS: cap the list
- hsts: make the HSTS read callback handle name dupes
- hsts: skip expired HSTS entries read from file
- hsts: when a dupe host adds subdomains, use that
- http2: clear the h2 session at delete
- http2: prevent secure schemes pushed over insecure connections
- http2: return error on OOM in push headers
- HTTP3.md: drop outdated mentions of OpenSSL-QUIC
- http: clear credentials better on redirect
- http: clear digest nonce on cross-origin redirect
- http: clear the proxy credentials as well on port or scheme change
- http: fix auth_used and auth_avail
- http: fix Curl_compareheader for multi value headers
- http: make Curl_compareheader handle multiple commas in header
- http: on 303, switch to GET
- http: use header_has_value() instead of duplicate code
- imap: reset the UIDVALIDITY state between transfers
- include: drop badword from public headers
- INSTALL.md: update Cygwin instructions
- keylog.h: replace literal number with macro in declaration
- keylog: drop unused/redundant includes and guards
- ldap: drop duplicate `ldap_set_option()` on Windows
- ldap: fix to initialize cleartext connection on Windows
- lib1560: fix comment typo
- lib1960: fix test failure
- lib: accept larger input to md5/hmac/sha256/sha512 functions
- lib: always use Curl_1st_fatal instead of Curl_1st_err
- lib: fix typos in comments
- lib: make resolving HTTPS DNS records reliable:
- lib: minor comment typos
- lib: move request specific allocations to the request struct
- lib: replace `PRI*32` printf masks with C89 ones
- libssh2: allocate libssh2-friendly memory in kbd_callback
- libssh2: fix error handling on quote errors
- libssh: fix 64-bit printf mask for mingw-w64 <=6.0.0
- libssh: fix `-Wsign-compare` in 32-bit builds
- libssh: path length precaution
- libssh: propagate error back in SFTP function
- libtest: drop duplicate include
- location/follow: mention netrc
- man: fix argument type for `CURLSHOPT_[UN]SHARE` options
- mbedtls: cleanup more without care for 'initialized'
- mbedtls: fix ECJPAKE matching
- mbedtls: remove failf() call with first argument as NULL
- md4, md5: switch to wolfCrypt API in wolfSSL builds
- mime: only allow 40 levels of calls
- misc: fix code quality findings
- mk-ca-bundle.pl: make `ca-bundle.crt` timestamp match `certdata.txt`'s
- multi: enhance pending handles fairness
- multi: fix connection retry for non-http
- multi: improve wakeup and wait code
- netrc: find login-less password when user is given in URL
- netrc: remove unused parsenetrc() macro for netrc-disabled
- netrc: skip malformed macdef lines
- openssl channel_binding: lookup digest algorithm without NID
- openssl: drop obsolete SSLv2 logic
- openssl: fix build with 4.0.0-beta1 no-deprecated
- openssl: fix memory leaks in ECH code (OpenSSL 3)
- openssl: fix unused variable warnings in !verbose builds
- openssl: trace count of found / imported Windows native CA roots
- OS400: add new definitions to the ILE/RPG binding.
- os400sys: fix typo in comment (symmetry)
- parsedate: bsearch the time zones
- parsedate: fix wrong treatment of "military time zones"
- parsedate: refactor
- perl: harden external command invocations
- progress: count amount of data "delivered" to application
- protocol.h: fix the CURLPROTO_MASK
- protocol: disable connection reuse for SMB(S)
- protocol: use scheme names lowercase
- proxy: chunked response, error code
- pytest: add additional quiche check for flaky test_05_01
- pytest: check 429 handling
- rand: use `BCryptGenRandom()` in UWP builds
- ratelimit: reset on start
- request: reset resp_trailer in new requests
- runtests: skip setting ed25519 SSH key format
- rustls: fix memory leak on repeated SSLKEYLOGFILE fails
- rustls: handle EOF during initial handshake
- schannel: increase renegotiation timeout to 60 seconds
- scripts: drop redundant double-quotes: `"$var"` -> `$var` (Perl)
- scripts: harden / tidy up more Perl `system()` calls
- sendf: fix CR detection if no LF is in the chunk
- setopt: fix typos in comments
- setopt: move CURLOPT_CURLU
- setup connection filter: mark as setup
- sha256, sha512_256: switch to wolfCrypt API
- sha256: support delegating to wolfSSL API
- share: concurrency handling, easy updates
- share: do bitshifts after the type is checked to be valid
- socks: reject zero-length GSSAPI/SSPI tokens from proxy
- socks: use dns filter for resolving
- spelling: fix typos
- src: use ftruncate() unconditionally
- sshserver.pl: harden more `system()` calls
- sshserver.pl: pass command-line to `system()` safely
- strerr: correct the strerror_s() return code condition
- sws: fix potential OOB write
- synctime: fix off-by-one read and write to a read-only buffer (Windows)
- test 766: flag as timing-dependent
- test1675: unit tests for URL API helper functions
- test459: switch to mode="warn" for stderr check
- testcurl.pl: replace shell commands with Perl `rmtree()`
- tests/unit/README: describe how to unit test static functions
- tests: avoid infinite recursion for `make check`
- tests: use %b64[] instead of "raw" base64
- tool: check for curlinfo->age when determining if ssh backend
- tool: fix memory mixups
- tool: fix retries in parallel mode
- tool: fix two more allocator mismatches
- tool_cb_hdr: only truncate etags output when regular file
- tool_cb_rea: make waitfd() return void
- tool_cb_wrt: fix no-clobber error handling
- tool_cfgable: free the SSL signature algorithms
- tool_formparse: propagate my_get_line errors when reading headers
- tool_getparam: use correct free function for libcurl memory
- tool_ipfs: accept IPFS gateway URL without set port number
- tool_msgs: avoid null pointer deref for early errors
- tool_operate: actually apply the --parallel-max-host limit
- tool_operate: drop the scheme-guessing in the -G handling
- tool_operate: fix condition for loading `curl-ca-bundle.crt` (Windows)
- tool_operate: fix memory-leak on failed uploads
- tool_operate: fix minor memory-leak on early error
- tool_operate: reset the upload glob counter for next URL
- tool_operhlp: fix `add_file_name_to_url()` result on OOM
- tool_operhlp: iterate through all slashes to find name
- tool_operhlp: propagate low-level OOM in `add_file_name_to_url()`
- tool_setopt: return error on OOM correctly
- tool_urlglob: fix memory-leak on glob range overflow
- top-complexity: prevent filename-based shell injection risk
- transfer: clear the old autoreferer
- transfer: clear the URL pointer in OOM to avoid UAF
- transfer: enable custom methods again on next transfer
- transfer: enhance secure check
- unit1675: fix `-Wformat-signedness`
- url: do not reuse a non-tls starttls connection if new requires TLS
- url: improve connection reuse on negotiate
- url: init req.no_body in DO so that it works for h2 push
- url: set default upload flags to CURLULFLAG_SEEN
- url: use the socks type for socks proxy
- url: use URL for lowercase URL even in comments
- urlapi: fix handling of "file:///"
- urlapi: make dedotdotify handle leading dots correctly
- urlapi: same origin tests
- urlapi: stop extracting hostname from file:// URLs on Windows
- urlapi: verify the last letter of a scheme when set explicitly
- urldata.h: fix typo and lingering backtick
- urldata: connection bit ipv6_ip is wrong
- urldata: import port types and conn destination format
- urldata: make hstslist only present in HSTS builds
- urldata: make speeder_c uint32
- urldata: move cookiehost to struct SingleRequest
- urldata: remove trailers_state
- vquic: fix variable name in fallback code
- vtls: fix comment typos and tidy up a type
- vtls: log when key logging is enabled.
- vtls_scache: check reentrancy
- vtls_scache: include cert_blob independently of verifypeer
- wolfssl: document v5.0.0 (2021-11-01) as minimum required
- wolfssl: fix `-Wmissing-prototypes`
- wolfssl: fix handling of abrupt connection close
- ws: fix a blocking curl_ws_send() to report written length correctly
- x509asn1: fix to return error in an error case from `encodeOID()`
- x509asn1: fixed and adapted for ASN1tostr unit testing
- x509asn1: improve encodeOID

## Fixed in 8.19.0 - March 11 2026

8.19.0
8.19.0
8.19.0 changes only

Changes:

- BUG-BOUNTY.md: we stop the bug-bounty end of Jan 2026
- cmake: add `CURL_BUILD_EVERYTHING` option
- mqtt: initial support for MQTTS
- tool: support fractions for --limit-rate and --max-filesize
- tool_cb_hdr: with -J, use the redirect name as a backup
- vquic: drop support for OpenSSL-QUIC
- windows: add build option to use the native CA store
- windows: bump minimum to Vista (from XP)

Bugfixes:

- altsvc: only accept 17 byte dates from files
- asyn-ares: abort with OOM error when Curl_dnscache_mk_entry fails
- async-ares: blocking resolve timeout handling, better
- badwords: move into ./scripts, speed up
- build: add missing `GENERATEDCERTS` files
- build: adjust minimum version for some clang picky warnings
- build: check `MSG_NOSIGNAL` directly, drop detection and interim macro
- build: constify `memchr()`/`strchr()`/etc result variables (cont.)
- build: detect and include `inttypes.h` again
- build: do not include wolfSSL header in `curl_setup.h`
- build: drop duplicate C includes
- build: drop global suppression of `-Wformat-nonliteral`, fix fallouts
- build: drop unused `snprintf()` feature check on Windows
- build: fix `-Wunused-macros` warnings, and related tidy-ups
- build: fix building rare combinations
- build: fully omit verbose strings and code when disabled
- build: globally suppress DJGPP warnings in `FD_SET()`
- build: merge TrackMemory (`CURLDEBUG`) into debug-enabled option
- build: move curl stat struct type to the curlx namespace
- build: opt-in MSVC to C99-style verbose logging logic
- build: require POSIX `strdup()`
- build: tidy up and dedupe `strdup` functions
- cf-socket: ignore SOCK_CLOEXEC etc for socktype equality checks
- cf-socket: use SOCK_CLOEXEC in socket_open when available
- checksrc-all.pl: skip non-repository files
- checksrc: do not apply `BANNEDFUNC` to struct member functions
- checksrc: warn for leading spaces before the preprocessor hash
- clang-tidy: add missing and delete redundant parentheses
- clang-tidy: add more missing parentheses in macro values
- clang-tidy: avoid/silence `bugprone-not-null-terminated-result`
- clang-tidy: check `bugprone-macro-parentheses`, fix fallouts
- clang-tidy: drop redundant conditions reported by `misc-redundant-expression`
- clang-tidy: enable `bugprone-signed-char-misuse`, fix fallouts
- clang-tidy: enable more checks
- clang-tidy: enable scanning headers
- clang-tidy: fix issues found with build-fuzzing
- clang-tidy: silence more minor issues found by v22
- cmake/FindMbedTLS: add workaround for missing static MSVC `mbedcrypto.lib` 4.0.0
- cmake: add `CURL_DROP_UNUSED` option to reduce binary sizes
- cmake: add native clang-tidy support for tests, with concatenated sources
- cmake: always build curlu and curltool test libs in unity mode
- cmake: always define `CURL::win32_winsock` on Windows in `curl-config.cmake`
- cmake: convert `curl_add_clang_tidy_test_target()` macro to function
- cmake: enable binutils ld workaround for all toolchains at build-time
- cmake: fix `LOCATION` property access condition (debug)
- cmake: fix `LOCATION` property read errors in target debug function
- cmake: fix building with `CMAKE_FIND_PACKAGE_PREFER_CONFIG=ON`
- cmake: fix confusing error when a dependency is undetected in `curl-config.cmake`
- cmake: fix logic for openssl/zlib binutils ld workaround
- cmake: fix passing system header directories to clang-tidy for tests
- cmake: fix system include directory position for clang-tidy in tests
- cmake: improve clang-tidy test command-line reproduction
- cmake: minor fixes to test targets after prev
- cmake: normalize uppercase hex winver (for display)
- cmake: omit `curl.rc` from curltool lib
- cmake: reference OpenSSL and ZLIB imported targets only when enabled
- cmake: replace internal option with a new `tt` (test tools) target
- cmake: silence potential unused var warnings in C++ test snippet
- cmake: silence silly Apple clang warnings in C89 mode, test in CI
- cmake: silence useless compiler warnings triggered by the FASTBuild generator
- cmake: skip binutils ld hack if zlib/openssl target is not `IMPORTED`
- cmake: warn for invalid `CURL_TARGET_WINDOWS_VERSION` values
- cmke: add `*_USE_STATIC_LIBS` options for 9 dependencies
- config-plan9: set `HAVE_STDINT_H` again
- config2setopts: acknowledge OOM error from CURLOPT_MIMEPOST
- config2setopts: fix for --disable-aws build configuration
- configure: drop always true `if` check (Windows)
- content_encoding: return 'identity' if none other exists
- curl: add -I and -i to -h important
- curl: limit Windows-specific code to Windows builds, other tidy-ups
- curl_easy_nextheader.md: a new transfer invalidates 'prev'
- curl_get_line: drop single-use macro
- curl_multi_perform.md: resolve inconsistency
- curl_ntlm_core: merge two `#if` blocks
- curl_setup.h: drop extra header guard for internal include
- curl_setup.h: merge back single-use internal header `curl_setup_once.h`
- curl_setup.h: simplify curl memory macro mappings
- curl_setup_once: allow CURL_DEBUGASSERT for customization
- CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.md: fix available protocols
- curlx: drop unused `curlx_saferealloc()`
- digest: escape double quotes and backslashes in realm and nonce
- digest: fix memory leak in auth_create_digest_http_message()
- digest: handle quotes in the path
- docs/INSTALL: update configure details
- docs/libcurl: unify WARNING use
- docs: add LibreELEC to DISTROS.md
- docs: add reproducible example for generating man page
- docs: avoid starting sentences with However,
- docs: avoid using the word 'magic'
- docs: clarify --ipv4 and --ipv6
- docs: document the need for a 64-bit type and stdint.h
- docs: drop 'basically'
- docs: explicitly call out Slowloris as not a security flaw
- docs: fix grammar nitpicks
- docs: handle error in `curl_global_init*` examples
- docs: replace instances of the vague qualifier 'quite'
- docs: reword explanation of --variable option
- docs: some nitpicks
- docs: use dot instead of comma at end of sentences
- easy: reset errorbuf on eyeballing success
- easy: reset pausing when resetting request
- examples/usercertinmem: use modern OpenSSL API, drop mentions of RSA
- examples: improve OpenSSL certificate examples
- examples: omit forward declarations, apply misc fixes
- FAQ: syntax improvements
- fopen.h: simplify curl memory macro mappings
- ftp: replace a `curlx_free()` with `curlx_dyn_free()`
- ftp: split ftp_state_use_port into sub functions
- GOVERNANCE.md: Post-Daniel BDFL
- gss: exclude verbose error logic from non-verbose builds
- h2+h3: align stream close handling
- hostip.c: fix leak of addrinfo
- hostip6: remove debug-only code
- hostip: fix unreachable code in rare build configuration
- http/3: add description for known server error codes
- http1: fix potential NULL dereference in `Curl_h1_req_parse_read()`
- http: only send bearer if auth is allowed
- http_aws_sigv4: fix query normalization of %2b
- imap: add a check for Curl_meta_get()
- imap: check `imap_sendf()` printf masks at compile-time
- imap: skip literals inside quoted strings
- include: avoid recursive macros
- include: mask computed auth/proto bitmasks to 32 bits
- INSTALL-CMAKE.md: document Apple framework options
- INSTALL.md: fix typo
- INSTALL.md: suggest `-Wl,-dead_strip` for Apple targets
- KNOWN_BUGS.md: absolute Unix domain filename for SOCKS on Windows
- ldap: silence clang-tidy v22 warning
- ldap: silence potential unused variable warning (OS400)
- lib: delete unused local includes
- lib: disable websockets early if no http
- lib: make sigpipe handling more lazy
- lib: reorder protocol functions to avoid forward declarations (email)
- lib: reorder protocol functions to avoid forward declarations (ftp)
- lib: reorder protocol functions to avoid forward declarations (misc cont.)
- lib: reorder protocol functions to avoid forward declarations (misc)
- lib: reorder protocol functions to avoid forward declarations (ssh)
- lib: separate scheme info from protocol implementation
- lib: skip compiling code with features disabled
- lib: use (u)int64_t instead of long long
- libcurl docs: reduce 'since ...' in descriptions
- libcurl-security.md: fix typos and add a point about URLs
- libtests: drop two redundant `memset()`s
- Makefile.am: delete RPM targets referencing non-existent files
- Makefile.am: drop stray VC project files from dist
- managen: silence Perl warnings
- mbedtls: guard TLS 1.3 + session tickets usage inside ifdef
- mbedtls: no pinnedpubkey wo MBEDTLS_SSL_KEEP_PEER_CERTIFICATE
- mbedtls: remove newline from failf() call
- mbedtls: split mbed_connect_step1 into sub functions
- md4, md5: drop redundant forward declarations
- md4, md5: replace custom types with `uint32_t`
- memdebug: include `backtrace.h` as system header
- mime: drop fallback for unused `R_OK` macro
- mimepost: allocate main struct on-demand
- mk-ca-bundle.pl: drop support for obsolete/insecure fingerprint algos
- mod_curltest: silence unused argument compiler warning
- mprintf: drop old sprintf fallback
- mprintf: rename internal enum to avoid collision with AmigaOS symbol
- mprintf: silence clang-tidy `readability-suspicious-call-argument`
- mprintf: use `_snprintf()` when compiled with VS2013 and older
- mqtt: better too-big-message-check
- mqtt: fix EOF handling
- mqtt: verify Remaining Length for CONNACK and PUBACK
- msvc: drop exception, make `BIT()` a bitfield with Visual Studio
- msvc: VS2026: unlock picky warning in cmake, test in CI
- multi: avoid a theoretical 32-bit wrap
- multi: fix unreachable code compiler warning
- multi: probe for IPv6 functionality in multi_init()
- multi: split multi_runsingle into sub functions
- multi: update timer unconditionally in multi_remove_handle
- ngtcp2: stabilize recv
- noproxy: simplify, don't mix const non-const in strchr()
- openldap: avoid forward declarations in ldaps code
- openssl+ech: workaround for insecure handshakes
- openssl: adapt to OpenSSL master adding const to more APIs
- OpenSSL: check reuse of sessions for verify status
- openssl: disable local keylog feature if built-in upstream
- openssl: fix compiler warning with OpenSSL master
- openssl: fix potential NULL dereference when loading certs (Windows)
- openssl: fix potential OOB read in debug/verbose logging
- plan9: drop special build and orphaned references
- proxy-auth: additional tests
- pytest: remove 03_02
- quiche: use PRIu64 for outputting the stream id
- rand: drop impossible preprocessor branches (wincrypt)
- rand: drop scan-build silencer
- ratelimit: download finetune
- request.h: rename parameter 'buf' to 'req' in Curl_req_send
- REUSE: drop broken reference to `MAIL-ETIQUETTE`
- rtsp: fix assertion failure on zero-length RTP payload
- rtspd: fix to check `realloc()` result
- runtests: pass config filename to stunnel in native format (Windows)
- schannel: refactor: reduce variable scopes, fix comment, fix indent
- send: drop `CURL_UNCONST()` from buffer argument on most platforms
- setopt: fix checking range for CURLOPT_MAXCONNECTS
- setopt: refuse blobs with zero length
- setup-os400.h: drop no longer used custom type `u_int32_t`
- sigpipe: unset SA_SIGINFO since it is using sa_handler
- silent.md: also mention it shuts off warning messages
- smb: free the path in the request struct properly
- smb: include arpa/inet.h for NonStop
- socket: check result of SO_NOSIGPIPE
- socketpair: clear 'err' when retrying due to EINTR
- socketpair: set SO_NOSIGPIPE where possible
- socks: ensure DNS is freed in failure cases.
- src: simplify declaring `curl_ca_embed`
- ssh: dedupe state change function
- stop using the word 'just'
- sws: prevent "connection monitor" to say disconnect twice
- synctime: fix use of uninitialized buffer on non-Windows
- system_win32: replace manual init code with `curlx_now_init()` call
- tests/server/sockfilt: avoid possible endless loop on Windows
- tests/server: drop unused `curlx/version_win32.c`
- tests/server: fix to clear the complete `srvr_sockaddr_union_t` variable
- tests/server: tidy-up error messages (Windows)
- tests: avoid assignment in `if` conditions in `first.h`
- tests: convert base64 data to %b64[]
- tftp: correct the filename length check
- timeout handling: auto-detect effective timeout
- tls: add new SSLSUPP flags for several options
- tls: remove checks for DEFAULT
- tool: enable header separation for HTTPS proxies
- tool: improve config error messaging
- tool: improve error/warning messages when output filename sanitization fails
- tool: rename curl handle and result variable in `--libcurl`-generated code
- tool: return code variable consistency
- tool_cb_hdr: suppress header output when --out-null
- tool_cb_prg: drop duplicate preprocessor logic
- tool_dirhie: drop superfluous `F_OK` fallback (Windows)
- tool_doswin: avoid memory-leak with CURL_FN_SANITIZE_*
- tool_doswin: avoid Windowsisms in socket code (cont.)
- tool_doswin: avoid Windowsisms in socket code
- tool_doswin: document `ENABLE_VIRTUAL_TERMINAL_PROCESSING` toolchain support
- tool_getparam: avoid `-Wcomma` with Apple clang in C89 mode
- tool_operate: remove 'else' for VMS
- tool_operate: reset the URL --url-query between --next
- typos: silence false positives found in C code
- unit3205: suppress two clang-tidy false positives
- URL-SYNTAX.md: fix port number mistakes for IMAP and LDAP
- url.c: code/comment cleanup around conn creation
- url.h: fix `-Wdocumentation`
- url: fix reuse of connections using HTTP Negotiate
- urlapi: use U_CURLU_URLDECODE when toggling it off unsigned
- urldata.h: remove two forward-declared structs not used
- urldata: byebye `conn->hostname_resolve`
- urldata: change 'keep_post' into three distinct bitfields
- urldata: convert 'long' fields to fixed variable types
- urldata: switch to uint* types
- usercertinmem: use the correct cert BIO
- verbose.md: explain the { and } prefixes
- vquic: fix unused variable warning reported by clang-tidy
- vquic: handle SOCKEMSGSIZE correctly
- vtls: dedupe common on-session-reuse logic
- vtls: use ALPN http/1.0 & http/1.1 for HTTP/1.0 requests
- VULN-DISCLOSURE-POLICY.md: push reports to the web form
- VULN-DISCLOSURE-POLICY.md: use hackerone
- winapi: use FormatMessageA instead of FormatMessageW
- windows: `USE_WINSOCK` to guard winsock2 code (where missing)
- windows: determine `RtlVerifyVersionInfo` address on global init
- windows: tidy up `wincrypt.h` / BoringSSL/AWS-LC coexist workaround
- wolfssl: fix build without USE_BIO_CHAIN
- ws/tftp: include header file even when protocol disabled
- x509asn1: make encodeOID stop on too long input

## Fixed in 8.18.0 - January 7 2026

8.18.0
8.18.0
8.18.0 changes only

Changes:

- build: drop support for VS2008 (Windows)
- build: drop Windows CE / CeGCC support
- gnutls: drop support for GnuTLS < 3.6.5
- gnutls: implement CURLOPT_CAINFO_BLOB
- openssl: bump minimum OpenSSL version to 3.0.0

Bugfixes:

- _PROGRESS.md: add the E unit, mention kibibyte
- alt-svc: more flexibility on same destination
- altsvc: accept ma/persist per alternative entry
- altsvc: make it one malloc instead of three per entry
- AmigaOS: increase minimum stack size for tool_main
- apple sectrust: fix ancient evaluation
- apple-sectrust: always ask when `native_ca_store` is in use
- asyn-ares: handle Curl_dnscache_mk_entry() OOM error
- asyn-ares: remove hostname free on OOM
- asyn-thrdd: fix Curl_async_getaddrinfo() on systems without getaddrinfo
- asyn-thrdd: release rrname if ares_init_options fails
- auth: always treat Curl_auth_ntlm_get() returning NULL as OOM
- autotools: add nettle library detection via pkg-config (for GnuTLS)
- autotools: drop autoconf <2.59 compatibility code (zz60-xc-ovr)
- autotools: fix LargeFile feature display on Windows (after prev patch)
- autotools: tidy-up `if` expressions
- badwords: add mistyped 'first', fix fallouts
- badwords: catch and fix threading-related words
- badwords: fix issues found in scripts and other files
- badwords: fix issues found in tests
- build: add build-level `CURL_DISABLE_TYPECHECK` options
- build: exclude clang prereleases from compiler warning options
- build: replace `-pedantic` with `-Wpedantic` when supported
- build: set `-Wno-format-signedness`
- build: tidy-up MSVC CRT warning suppression macros
- ccsidcurl: make curl_mime_data_ccsid() use the converted size
- cf-h1-proxy: support folded headers in CONNECT responses
- cf-https-connect: allocate ctx at first in cf_hc_create()
- cf-socket: drop feature check for `IPV6_V6ONLY` on Windows
- cf-socket: enable Win10 `TCP_KEEP*` options with old SDKs
- cf-socket: limit use of `TCP_KEEP*` to Windows 10.0.16299+ at runtime
- cf-socket: return OOM error if socket() fails due to OOM
- cf-socket: trace ignored errors
- cfilters: make conn_forget_socket a private libssh function
- checksrc.pl: detect assign followed by more than one space
- cmake: adjust defaults for target platforms not supporting shared libs
- cmake: define dependencies as `IMPORTED` interface targets
- cmake: delete unused file `CMake/CMakeConfigurableFile.in`
- cmake: disable `CURL_CA_PATH` auto-detection if `USE_APPLE_SECTRUST=ON`
- cmake: fix `ws2_32` reference in `curl-config.cmake`
- cmake: honor `CURL_DISABLE_INSTALL` and `CURL_ENABLE_EXPORT_TARGET`
- cmake: replace deprecated `OPENSSL_FOUND` with `OpenSSL_FOUND`
- cmake: replace deprecated `PERL_FOUND` with `Perl_FOUND`
- cmake: save and restore `CMAKE_MODULE_PATH` in `curl-config.cmake`
- cmake: set found status to OFF when not found (for compression deps)
- code: minor indent fixes before closing braces
- CODE_STYLE.md: sync banned function list with checksrc.pl
- compressed.md: might generate a huge amount of bytes
- config-win32.h: delete obsolete, non-Windows comments
- config-win32.h: drop unused/obsolete `CURL_HAS_OPENLDAP_LDAPSDK`
- config2setopts: add space in cookie header with multiple -b
- config2setopts: bail out if curl_url_get() returns OOM
- config2setopts: exit if curl_url_set() fails on OOM
- configure: delete unused variable
- conncache: silence `-Wnull-dereference` on gcc 14 RISC-V 64
- conncontrol: reuse handling
- connect: reshuffle Curl_timeleft_ms to avoid 'redundant condition'
- connection: attached transfer count
- content_encoding: avoid strcpy
- cookie. return proper error on OOM
- cookie: allocate the main struct once cookie is fine
- cookie: flush better
- cookie: only keep and use the canonical cleaned up path
- cookie: propagate errors better, cleanup the internal API
- cookie: return error on OOM
- cookie: when parsing a cookie header, delay all allocations until okay
- cshutdn: acknowledge FD_SETSIZE for shutdown descriptors
- curl: fix progress meter in parallel mode
- curl_fopen: do not pass invalid mode flags to `open()` on Windows
- curl_gssapi: make sure Curl_gss_log_error() has an initialized buffer
- curl_ntlm_core: fix DES_* symbols for some wolfSSL builds
- curl_quiche: refuse headers with CR, LF or null bytes
- curl_sasl: if redirected, require permission to use bearer
- curl_sasl: make Curl_sasl_decode_mech compare case insensitively
- curl_setup.h: document more funcs flagged by `_CRT_SECURE_NO_WARNINGS`
- curl_setup.h: drop stray `#undef stat` (Windows)
- curl_setup.h: drop superfluous parenthesis from `Curl_safefree` macro
- curl_threads: don't do another malloc if the first fails
- curl_trc: delete unused DoH remains
- CURLINFO: remove 'get' and 'get the' from each short desc
- CURLINFO_SCHEME/PROTOCOL: they return the "scheme" for a "transfer"
- CURLINFO_TLS_SSL_PTR.md: remove CURLINFO_TLS_SESSION text
- CURLMOPT_SOCKETFUNCTION.md: fix the callback argument use
- CURLOPT_ACCEPT_ENCODING.md: warn about the expansion
- CURLOPT_FOLLOWLOCATION.md: s/Authentication:/Authorization:/
- CURLOPT_HAPROXY_CLIENT_IP.md: emphasize reused connection use
- CURLOPT_READFUNCTION.md: clarify the size of the buffer
- CURLOPT_SSH_KEYFUNCTION.md: fix minor indent mistake in example
- curlx/fopen: replace open CRT functions their with `_s` counterparts (Windows)
- curlx/multibyte: stop setting macros for non-Windows
- curlx/strerr: use `strerror_s()` on Windows
- curlx: add `curlx_rename()`, fix to support long filenames on Windows
- curlx: curlx_strcopy() instead of strcpy()
- curlx: limit use of system allocators to the minimum possible
- curlx: replace `mbstowcs`/`wcstombs` with `_s` counterparts (Windows)
- curlx: replace `sprintf` with `snprintf`
- curlx: use curl alloc in `curlx_win32_stat()` (Windows)
- curlx: use curlx allocators in non-memdebug builds (Windows)
- DEPRECATE: add CMake <3.18 deprecation for April 2026
- digest: fix OWS and escaped quote handling
- digest_sspi: fix a memory leak on error path
- digest_sspi: properly free sspi identity
- DISTROS.md: add OpenBSD
- DISTROS: fix a Mageia URL
- DISTROS: remove broken URLs for buildroot
- doc: some returned in-memory data may not be altered
- Dockerfile: update debian:bookworm-slim digest to e899040
- docs/libcurl: fix C formatting nits
- docs: add a note about --compressed to note about binary output
- docs: clarify how to do unix domain sockets with SOCKS proxy
- docs: fix checksrc `EQUALSPACE` warnings
- docs: fix time_posttransfer output unit as seconds
- docs: mention umask need when curl creates files
- docs: remove dead URLs
- docs: rename CURLcode variables to 'result'
- docs: spell it Rustls with a capital R
- docs: switch more URLs to https://
- docs: use .example URLs for proxies
- docs: use mresult as variable name for CURLMcode
- escape: add a length check in curl_easy_escape
- example: fix formatting nits
- examples/crawler: fix variable
- examples/multi-uv: fix invalid req->data access
- examples/threaded-ssl: delete in favor of `examples/threaded`
- examples/threaded: fix race condition
- examples: fix minor typo
- examples: make functions/data static where missing
- examples: tidy-up headers and includes
- examples: use 64-bit `fstat` on Windows
- FAQ/TODO/KNOWN_BUGS: convert to markdown
- FAQ: fix hackerone URL
- file: do not pass invalid mode flags to `open()` on upload (Windows)
- formdata: validate callback is non-NULL before use
- ftp: make EPRT connections non-blocking
- ftp: refactor a piece of code by merging the repeated part
- ftp: remove #ifdef for define that is always defined
- ftp: return better on OOM in two places
- ftp: return from ftp_state_use_port immediately on OOM
- getenv: drop internal 1-to-1 wrapper
- getinfo: improve perf in debug mode
- gnutls: add PROFILE_MEDIUM as default
- gnutls: report accurate error when TLS-SRP is not built-in
- gtls: add return checks and optimize the code
- gtls: Call keylog_close in cleanup
- gtls: skip session resumption when verifystatus is set
- h2/h3: handle methods with spaces
- headers: add length argument to Curl_headers_push()
- hostcheck: fail wildcard match if host starts with a dot
- hostip.h: drop redundant `setjmp.h` include
- hostip: don't store negative lookup on OOM
- hostip: make more functions return CURLcode
- hostip: only store negative response for CURLE_COULDNT_RESOLVE_HOST
- hsts: propagate and error out correctly on OOM
- hsts: use one malloc instead of two per entry
- http: acknowledge OOM errors from Curl_input_ntlm
- http: avoid two strdup()s and do minor simplifications
- http: error on OOM when creating range header
- http: fix OOM exit in Curl_http_follow
- http: handle oom error from Curl_input_digest()
- http: replace atoi use in Curl_http_follow with curlx_str_number
- http: return OOM errors from hsts properly
- http: the :authority header should never contain user+password
- http: unfold response headers earlier
- idn: avoid allocations and wcslen on Windows
- idn: clarify null-termination on Windows
- idn: fix memory leak in `win32_ascii_to_idn()`
- idn: use curlx allocators on Windows
- imap: check buffer length before accessing it
- imap: make sure Curl_pgrsSetDownloadSize() does not overflow
- inet_ntop: avoid the strlen()
- INSTALL-CMAKE.md: document static option defaults more
- krb5: fix detecting channel binding feature
- krb5_sspi: unify a part of error handling
- ldap: call ldap_init() before setting the options
- ldap: drop PP logic for old, unsupported, Windows SDKs
- ldap: improve detection of Apple LDAP
- ldap: provide version for "legacy" ldap as well
- lib/sendf.h: forward declare two structs
- lib: cleanup for some typos about spaces and code style
- lib: create unitprotos.h in the builddir, not srcdir
- lib: drop unused or duplicate `curlx/timeval.h` includes
- lib: drop unused protocol headers
- lib: eliminate size_t casts
- lib: error for OOM when extracting URL query
- lib: fix formatting nits (part 2)
- lib: fix formatting nits (part 3)
- lib: fix formatting nits
- lib: fix gssapi.h include on IBMi
- lib: name the main CURLMcode variable 'mresult'
- lib: refactor the type of funcs which have useless return and checks
- lib: replace `_tcsncpy`/`wcsncpy`/`wcscpy` with `_s` counterparts (Windows)
- lib: timer stats improvements
- lib: use `SOCKET_WRITABLE()`/`SOCKET_READABLE()` where possible
- libssh2: add paths to error messages for quote commands
- libssh2: cleanup ssh_force_knownhost_key_type
- libssh2: consider strdup() failures OOM and return correctly
- libssh2: replace atoi() in ssh_force_knownhost_key_type
- libssh: fix state machine loop to progress as it should
- libssh: properly free sftp_attributes
- libssh: require private key or user-agent for public key auth
- libssh: set both knownhosts options to the same file
- libtests: replace `atoi()` with `curlx_str_number()`
- limit-rate: add example using --limit-rate and --max-time together
- localtime: detect thread-safe alternatives and use them
- m4/sectrust: fix test(1) operator
- manage: expand the 'libcurl support required' message
- mbedTLS: cleanup insecure/deprecated code
- mbedtls: fix potential use of uninitialized `nread`
- mbedtls: sync format across log messages
- mbedtls_threadlock: avoid calloc, use array
- mdlinkcheck: ignore IP numbers, allow '@' in raw URLs
- mdlinkcheck: only look for markdown links in markdown files
- memdebug: add mutex for thread-safety
- memdebug: fix realloc logging
- mk-ca-bundle.md: the file format docs URL is permaredirected
- mk-ca-bundle.pl: default to SHA256 fingerprints with `-t` option
- mk-ca-bundle.pl: use `open()` with argument list to replace backticks
- mqtt: reject overly big messages
- mqtt: return error when a too large packet is decoded
- multi: make max_total_* members size_t
- multi: remove MSTATE_TUNNELING
- multi: simplify admin handle processing
- multibyte: limit `curlx_convert_*wchar*()` functions to Unicode builds
- ngtcp2+openssl: fix leak of session
- ngtcp2: remove the unused Curl_conn_is_ngtcp2 function
- ngtcp2: retune window sizes
- noproxy: fix build on systems without IPv6
- noproxy: fix ipv6 handling
- noproxy: replace atoi with curlx_str_number
- openssl: exit properly on OOM when getting certchain
- openssl: fix a potential memory leak of bio_out
- openssl: fix a potential memory leak of params.cert
- openssl: fix building against no-dsa openssl
- openssl: fix building against no-ocsp openssl with Apple SecTrust
- openssl: no verify failf message unless strict
- openssl: release ssl_session if sess_reuse_cb fails
- openssl: remove code handling default version
- openssl: simplify `HAVE_KEYLOG_CALLBACK` guard
- openssl: stop checking for `OPENSSL_NO_SHA*` macros
- openssl: stop checking for `OPENSSL_NO_TLSEXT` macro
- openssl: toggling CURLSSLOPT_NO_PARTIALCHAIN makes a different CA cache
- OS400/ccsidcurl: fix curl_easy_setopt_ccsid for non-converted blobs
- OS400/makefile.sh: fix shellcheck warning SC2038
- os400sys: replace `strcpy()` with `memcpy()`
- osslq: code readability
- progress: make it one column narrower
- progress: narrower time display, multiple fixes
- progress: show fewer digits
- projects/README.md: Markdown fixes
- pytest fixes and improvements
- pytest: add tests using sshd
- pytest: disable two H3 earlydata tests for all platforms (was: macOS)
- pytest: do not ignore server issues
- pytest: enable OCSP test 17_08 for LibreSSL
- pytest: fix and improve reliability
- pytest: improve stragglers
- pytest: quiche flakiness
- pytest: skip H2 tests if feature missing from curl
- quiche: use client writer
- ratelimit blocking: fix busy loop
- ratelimit: redesign
- rtmp: fix double-free on URL parse errors
- rtmp: precaution for a potential integer truncation
- rtmp: stop redefining `setsockopt` system symbol on Windows
- runner.pm: run memanalyzer as a Perl module
- runtests: add options to set minimum number of tests, use them
- runtests: detect bad libssh differently for test 1459
- runtests: drop Python 2 support remains
- runtests: enable torture testing with threaded resolver
- runtests: improve XML prolog check, enable `-w` permanently, fix two tests
- runtests: make memanalyzer a Perl module (for 1.1-2x speed-up per test run)
- rustls: fix a potential memory issue
- rustls: minor adjustment of sizeof()
- rustls: simplify init err path
- rustls: verify that verifier_builder is not NULL
- schannel: cap the maximum allowed size for loading cert
- schannel: fix memory leak of cert_store_path on four error paths
- schannel: replace atoi() with curlx_str_number()
- schannel: use Win8 `CERT_NAME_SEARCH_ALL_NAMES_FLAG` with old SDKs
- schannel_verify: fix a memory leak of cert_context
- scripts: fix shellcheck SC2046 warnings
- scripts: use end-of-options marker in `find -exec` commands
- setopt: disable CURLOPT_HAPROXY_CLIENT_IP on NULL
- setopt: when setting bad protocols, don't store them
- sftp: fix range downloads in both SSH backends
- slist: constify Curl_slist_append_nodup() string argument
- smb: fix a size check to be overflow safe
- socketpair: drop redundant `_WIN32` branch and include
- socks_sspi: use free() not FreeContextBuffer()
- source: misc typos
- speedcheck: do not trigger low speed cancel on transfers with CURL_READFUNC_PAUSE
- speedlimit: also reset on send unpausing
- src: drop redundant definition of `BIT()`
- src: fix formatting nits
- ssh: tracing and better pollset handling
- sspi: fix memory leaks on error paths in `Curl_create_sspi_identity()`
- sws: fix binding to unix socket on Windows
- synctime: tidy up, make it work on all platforms
- telnet: abort on bad suboption sequence
- telnet: replace atoi for BINARY handling with curlx_str_number
- TEST-SUITE.md: correct the man page's path
- test07_22: fix flakiness
- test1475: consistently use %CR in headers
- test1498: disable 'HTTP PUT from stdin' test on Windows
- test2045: replace HTML multi-line comment markup with `#` comments
- test318: tweak the name a little
- test3207: enable memdebug for this test again
- test363: delete stray character (typo) from a section tag
- test568: fix codespell, catch it next time early in CI
- test568: remove what looks like an email and a URL
- test787: fix possible typo `&` -> `%` in curl option
- test96: fix to accept non-unity memdump content with MSVC
- tests/data: move `--libcurl` output to external data files
- tests/data: replace hard-coded test numbers with `%TESTNUMBER`
- tests/data: support using native newlines on disk, drop `.gitattributes`
- tests/server: do not fall back to original data file in `test2fopen()`
- tests/server: fix initialization on Windows Vista+
- tests/server: replace `atoi()` and `atol()` with `curlx_str_number()`
- tests: add `%AMP` macro, use it in two tests
- tests: add a standard log line for alloc failures
- tests: allow 2500-2503 to use ~2MB malloc
- tests: drop redundant parenthesis from two macro expressions
- tests: fix formatting nits
- tests: rename CURLMcode variables to mresult
- tftp: release filename if conn_get_remote_addr fails
- tftpd: fix/tidy up `open()` mode flags
- tidy-up: avoid `(())`, clang-format fixes and more
- tidy-up: move `CURL_UNCONST()` out from macro `curl_unicodefree()`
- tidy-up: URLs (cont.) and mdlinkcheck
- tidy-up: URLs
- TODO: remove a mandriva.com reference
- tool: consider (some) curl_easy_setopt errors fatal
- tool: log when loading .curlrc in verbose mode
- tool_cfgable: free ssl-sessions at exit
- tool_doswin: clear pointer when thread takes ownership
- tool_doswin: increase allowable length of path sanitizer
- tool_doswin: remove the max length check
- tool_getparam: simplify the --rate parser
- tool_getparam: use memdup0() instead of malloc + copy
- tool_getparam: verify that a file exists for some options
- tool_help: add checks to avoid unsigned wrap around
- tool_ipfs: check return codes better
- tool_msgs: make voutf() use stack instead of heap
- tool_operate: exit on curl_share_setopt errors
- tool_operate: fix a case of ignoring return code in operate()
- tool_operate: fix case of ignoring return code in single_transfer
- tool_operate: remove redundant condition
- tool_operate: return error for OOM in append2query
- tool_operate: use curlx_str_number instead of atoi
- tool_paramhlp: refuse --proto remove all protocols
- tool_paramhlp: remove a malloc+free from proto2num()
- tool_paramhlp: simplify number parsing
- tool_progress: fix large time outputs and decimal size display
- tool_urlglob: acknowledge OOM in peek_ipv6
- tool_urlglob: clean up used memory on errors better
- tool_urlglob: constify an argument
- tool_urlglob: fix propagating OOM error from `sanitize_file_name()`
- tool_urlglob: support globs as long as config line lengths
- tool_writeout: bail out proper on OOM
- url: fix return code for OOM in parse_proxy()
- url: if curl_url_get() fails due to OOM, error out properly
- url: if OOM in parse_proxy() return error
- url: return error at once when OOM in netrc handling
- urlapi: fix mem-leaks in curl_url_get error paths
- urlapi: handle OOM properly when setting URL
- urlapi: return OOM correctly from parse_hostname_login()
- verify-release: update to avoid shellcheck warning SC2034
- vquic-tls/gnutls: call Curl_gtls_verifyserver unconditionally
- vquic: do not pass invalid mode flags to `open()` (Windows)
- vquic: do_sendmsg full init
- vquic: ignore 0-length UDP packets
- vquic: initialize new callback in nghttp3 1.14.0+
- vtls: drop unused `use_alpn` from `ssl_connect_data` struct
- vtls: fix CURLOPT_CAPATH use
- vtls: handle possible malicious certs_num from peer
- vtls: pinned key check
- VULN-DISCLOSURE-POLICY.md: CRLF in data
- wcurl: import v2025.11.09
- wcurl: import v2026.01.05
- windows: assume `USE_WIN32_LARGE_FILES`
- windows: fix `CreateFile()` calls to support long filenames
- windows: use `_strdup()` instead of `strdup()` where missing
- wolfSSL: able to differentiate between IP and DNS in alt names
- wolfssl: avoid NULL dereference in OOM situation
- wolfssl: fix a potential memory leak of session
- wolfssl: fix cipher list, skip 5.8.4 regression
- wolfssl: fix possible assert with `!HAVE_NO_EX` wolfSSL builds
- wolfssl: proof use of wolfSSL_i2d_SSL_SESSION
- wolfssl: simplify wssl_send_earlydata
- ws: replace a cast by matching the format string
- x509asn1: drop unused `hostcheck.h`, `vtls_int.h` includes

## Fixed in 8.17.0 - November 5 2025

8.17.0
8.17.0
8.17.0 changes only

Changes:

- build: drop Heimdal support
- build: drop the winbuild build system
- krb5: drop support for Kerberos FTP
- libssh2: up the minimum requirement to 1.9.0
- multi: add notifications API
- progress: expand to use 6 characters per size
- ssl: support Apple SecTrust configurations
- tool_getparam: add --knownhosts
- vssh: drop support for wolfSSH
- wcurl: import v2025.11.04
- write-out: make %header{} able to output *all* occurrences of a header

Bugfixes:

- ares: fix leak in tracing
- asyn-ares: remove wrong comment about the callback argument
- asyn-ares: use the duped hostname pointer for all calls
- asyn-thrdd resolver: clear timeout when done
- asyn-thrdd: drop pthread_cancel
- autotools: add support for libgsasl auto-detection via pkg-config
- autotools: capitalize Rustls in the log output
- autotools: drop detection of ancient OpenSSL libs RSAglue and rsaref
- autotools: fix duplicate UNIX and BSD flags in buildinfo.txt
- autotools: fix silly mistake in clang detection for buildinfo.txt
- autotools: make --enable-code-coverage support llvm/clang
- autotools: merge `if`s in GnuTLS/OpenSSL feature detection
- aws-lc: re-enable large read-ahead with v1.61.0 again
- base64: accept zero length argument to base64_encode
- build: address some -Weverything warnings, update picky warnings
- build: avoid overriding system open and stat symbols
- build: avoid overriding system symbols for fopen functions
- build: avoid overriding system symbols for socket functions
- build: show llvm/clang in platform flags and buildinfo.txt
- c-ares: when resolving failed, persist error
- cf-h2-proxy: break loop on edge case
- cf-ip-happy: mention unix domain path, not port number
- cf-socket: always check Curl_cf_socket_peek() return code
- cf-socket: check params and remove accept procondition
- cf-socket: make set_local_ip void, and remove failf()
- cf-socket: set FD_CLOEXEC on all sockets opened
- cf-socket: tweak a memcpy() to read better
- cf-socket: use the right byte order for ports in bindlocal
- cfilter: unlink and discard
- cfilters: check return code from Curl_pollset_set_out_only()
- checksrc: allow disabling warnings on FIXME/TODO comments
- checksrc: catch banned functions when preceded by (
- checksrc: fix possible endless loop when detecting BANNEDFUNC
- checksrc: fix possible endless loops in the banned function logic
- checksrc: fix to handle ) predecing a banned function
- checksrc: reduce directory-specific exceptions
- CI.md: refresh
- cmake/FindGSS: dedupe pkg-config module strings
- cmake/FindGSS: drop wrong header check for GNU GSS
- cmake/FindGSS: fix pkg-config fallback logic for CMake <3.16
- cmake/FindGSS: simplify/de-dupe lib setup
- cmake/FindGSS: whitespace/formatting
- cmake: add and use local FindGnuTLS module
- cmake: add CURL_CODE_COVERAGE option
- cmake: build the "all" examples source list dynamically
- cmake: clang detection tidy-ups
- cmake: drop exclamation in comment looking like a name
- cmake: fix `HAVE_GNUTLS_SRP` detection after adding local FindGnuTLS module
- cmake: fix building docs when the base directory contains .3
- cmake: fix Linux pre-fill `HAVE_POSIX_STRERROR_R` (when `_CURL_PREFILL=ON`)
- cmake: fix Linux pre-fills for non-glibc (when `_CURL_PREFILL=ON`)
- cmake: minor Heimdal flavour detection fix
- cmake: pre-fill three more type sizes on Windows
- cmake: say 'absolute path' in option descriptions and docs
- cmake: support building some complicated examples, build them in CI
- cmake: use modern alternatives for get_filename_component()
- cmake: use more COMPILER_OPTIONS, LINK_OPTIONS / LINK_FLAGS
- cmdline-docs: extended, clarified, refreshed
- cmdline-opts/_PROGRESS.md: explain the suffixes
- configure: add "-mt" for pthread support on HP-UX
- conn: fix hostname move on connection reuse
- conncache: prevent integer overflow in maxconnects calculation
- connect: for CONNECT_ONLY, CURLOPT_TIMEOUT does not apply
- connect: remove redundant condition in shutdown start
- cookie: avoid saving a cookie file if no transfer was done
- cookie: only count accepted cookies in Curl_cookie_add
- cookie: remove the temporary file on (all) errors
- cpool: make bundle->dest an array; fix UB
- curl.h: remove incorrect comment about CURLOPT_PINNEDPUBLICKEY
- curl_easy_getinfo: error code on NULL arg
- curl_easy_setopt.md: add missing CURLOPT_POSTFIELDS
- curl_mem_undef.h: limit to CURLDEBUG for non-memalloc overrides
- curl_ngtcp2: fix `-Wunreachable-code` with H3 !verbose !unity clang
- curl_osslq: error out properly if BIO_ADDR_rawmake() fails
- curl_path: make sure whitespace-only is illegal
- Curl_resolv: fix comment. 'entry' argument is not optional
- curl_slist_append.md: clarify that a NULL pointer is not acceptable
- curl_threads: delete WinCE fallback branch
- CURLINFO_FTP_ENTRY_PATH.md: this is for SFTP as well
- CURLOPT_COOKIEFILE.md: clarify when the cookies are loaded
- CURLOPT_COPYPOSTFIELDS.md: used with MQTT and RTSP as well
- CURLOPT_HEADER/WRITEFUNCTION.md: drop '* size' since size is always 1
- CURLOPT_MAXLIFETIME_CONN: make default 24 hours
- CURLOPT_POSTFIELDSIZE*: these also work for MQTT and RTSP
- CURLOPT_SERVER_RESPONSE_TIMEOUT*: add default and see-also
- CURLOPT_SSL_VERIFYHOST.md: add see-also to two other VERIFYHOST options
- CURLOPT_TIMECONDITION.md: works for FILE and FTP as well
- cw-out: fix EAGAIN handling on pause
- cw-out: unify the error handling pattern in cw_out_do_write
- digest_sspi: fix two memory leaks in error branches
- dist: do not distribute CI.md
- docs/cmdline-opts: drop double quotes from GLOBBING and URL examples
- docs/libcurl: clarify some timeout option behavior
- docs/libcurl: remove ancient version references
- docs/libcurl: use lowercase must
- docs: expand on quoting rules for filenames in SFTP quote
- docs: fix/tidy code fences
- doh: cleanup resources on error paths
- doswin: CloseHandle the thread on shutdown
- easy_getinfo: check magic, Curl_close safety
- ECH.md: make OpenSSL branch clone instructions work
- examples/chkspeed: portable printing when outputting curl_off_t values
- examples/http2-serverpush: fix file handle leaks
- examples/sessioninfo: cast printf string mask length to int
- examples/sessioninfo: do not disable security
- examples/synctime: fix null-termination assumptions
- examples/synctime: make the sscanf not overflow the local buffer
- examples/usercertinmem: avoid stripping const
- examples/websocket: fix use of uninitialized rlen
- examples: call curl_global_cleanup() where missing
- examples: check more errors, fix cleanups, scope variables
- examples: drop unused curl/mprintf.h includes
- examples: fix build issues in 'complicated' examples
- examples: fix more potential resource leaks, and more
- examples: fix two build issues surfaced with WinCE
- examples: fix two issues found by CodeQL
- examples: fix two more cases of stat() TOCTOU
- examples: improve global init, error checks and returning errors
- examples: replace casts with `curl_off_t` printf masks
- examples: return curl_easy_perform() results
- firefox-db2pem.sh: add macOS support, tidy-ups
- form.md: drop reference to MANUAL
- ftp: add extra buffer length check
- ftp: check errors on remote ip for data connection
- ftp: fix ftp_do_more returning with *completep unset
- ftp: fix port number range loop for PORT commands
- ftp: fix the 213 scanner memchr buffer limit argument
- ftp: improve fragile check for first digit > 3
- ftp: reduce size of some struct fields
- ftp: remove 'newhost' and 'newport' from the ftp_conn struct
- ftp: remove misleading comments
- ftp: remove the retr_size_saved struct field
- ftp: remove the state_saved struct field
- ftp: replace strstr() in ;type= handling
- ftp: simplify the 150/126 size scanner
- gnutls: check conversion of peer cert chain
- gnutls: fix re-handshake comments
- gssapi: make channel binding conditional on GSS_C_CHANNEL_BOUND_FLAG
- gtls: avoid potential use of uninitialized variable in trace output
- gtls: check the return value of gnutls_pubkey_init()
- header.md: see-also --proxy-header and vice versa
- hmac: free memory properly on errors
- hostip: don't store negative resolves due unrelated errors
- hostip: fix infof() output for non-ipv6 builds using IPv6 address
- hostip: remove leftover INT_MAX check in Curl_dnscache_prune
- http2: check push header names by length first
- http2: cleanup pushed newhandle on fail
- http2: ingress handling edge cases
- HTTP3: clarify the status for "old" OpenSSL, not current
- http: check the return value of strdup
- http: fix `-Wunreachable-code` in !websockets !unity builds
- http: fix `-Wunused-variable` in !alt-svc !proxy !ws builds
- http: handle user-defined connection headers
- http: look for trailing 'type=' in ftp:// without strstr
- http: make Content-Length parser more WHATWG
- http: only accept ';' as a separator for custom headers
- http: return error for a second Location: header
- http_aws_sigv4: check the return value of curl_maprintf()
- http_proxy: fix adding custom proxy headers
- httpsrr: free old pointers when storing new
- httpsrr: send HTTPS query to the right target
- imap: fix custom FETCH commands to handle literal responses
- imap: parse and use UIDVALIDITY as a number
- imap: treat capabilities case insensitively
- INSTALL-CMAKE.md: add manual configuration examples
- INSTALL-CMAKE.md: document useful build targets
- INSTALL-CMAKE.md: fix descriptions for LDAP dependency options
- INSTALL: update the list of known operating systems
- INTERNALS: drop Winsock 2.2 from the dependency list
- ip-happy: do not set unnecessary timeout
- ip-happy: prevent event-based stall on retry
- kerberos: bump minimum to 1.3 (2003-07-08), drop legacy logic
- kerberos: drop logic for MIT Kerberos <1.2.3 (pre-2002) versions
- kerberos: stop including gssapi/gssapi_generic.h
- krb5: fix output_token allocators in the GSS debug stub (Windows)
- krb5: return appropriate error on send failures
- krb5_gssapi: fix memory leak on error path
- krb5_sspi: the chlg argument is NOT optional
- ldap: avoid null ptr deref on failure
- ldap: do not base64 encode zero length string
- ldap: do not pass a \n to failf()
- ldap: tidy-up types, fix error code confusion
- lib1514: fix return code mixup
- lib: delete unused crypto header includes
- lib: drop unused include and duplicate guards
- lib: fix build error with verbose strings disabled
- lib: remove newlines from failf() calls
- lib: remove personal names from comments
- lib: SSL connection reuse
- lib: stop NULL-checking conn->passwd and ->user
- lib: upgrade/multiplex handling
- libcurl-multi.md: added curl_multi_get_offt mention
- libcurl-security.md: mention long-running connections
- libssh/libssh2: reject quote command lines with too much data
- libssh/sftp: fix resume corruption by avoiding O_APPEND with rresume
- libssh2/sftp: fix resume corruption by avoiding O_APPEND with rresume
- libssh2/sftp_realpath: change state consistently
- libssh2: avoid risking using an uninitialized local struct field
- libssh2: bail out on chgrp and chown number parsing errors
- libssh2: clarify that sshp->path is always at least one byte
- libssh2: drop two redundant null-terminations
- libssh2: error check and null-terminate in ssh_state_sftp_readdir_link()
- libssh2: fix EAGAIN return in ssh_state_auth_agent
- libssh2: fix return code for EAGAIN
- libssh2: use sockindex consistently
- libssh: acknowledge SSH_AGAIN in the SFTP state machine
- libssh: catch a resume point larger than the size
- libssh: clarify myssh_block2waitfor
- libssh: drop two unused assignments
- libssh: error on bad chgrp number
- libssh: error on bad chown number and store the value
- libssh: fix range parsing error handling mistake
- libssh: make atime and mtime cap the timestamp instead of wrap
- libssh: react on errors from ssh_scp_read
- libssh: return out of memory correctly if aprintf fails
- libssh: return the proper error for readdir problems
- Makefile.example: bump default example from FTP to HTTPS
- Makefile.example: fix option order
- Makefile.example: make default options more likely to work
- Makefile.example: simplify and make it configurable
- managen: ignore version mentions < 7.66.0
- managen: render better man page references/links
- managen: strict protocol check
- managen: verify the options used in example lines
- mbedtls: add support for 4.0.0
- mbedtls: check result of setting ALPN
- mbedtls: fix building with <3.6.1
- mbedtls: fix building with sha-256 missing from PSA
- mbedtls: handle WANT_WRITE from mbedtls_ssl_read()
- md4: drop mbedtls implementation (not available in mbedtls v3+)
- mdlinkcheck: reject URLs containing quotes
- memdup0: handle edge case
- mime: fix unpausing of readers
- mime: fix use of fseek()
- multi.h: add CURLMINFO_LASTENTRY
- multi: check the return value of strdup()
- multi_ev: remove unnecessary data check that confuses analysers
- netrc: when the cached file is discarded, unmark it as loaded
- nghttp3: return NGHTTP3_ERR_CALLBACK_FAILURE from recv_header
- ngtcp2: add a comment explaining write result handling
- ngtcp2: adopt ngtcp2_conn_get_stream_user_data if available
- ngtcp2: check error code on connect failure
- ngtcp2: close just-opened QUIC stream when submit_request fails
- ngtcp2: compare idle timeout in ms to avoid overflow
- ngtcp2: fix early return
- ngtcp2: fix handling of blocked stream data
- ngtcp2: fix returns when TLS verify failed
- ngtcp2: overwrite rate-limits defaults
- noproxy: fix the IPV6 network mask pattern match
- NTLM: disable if DES support missing from OpenSSL or mbedTLS
- ntlm: improved error path on bad incoming NTLM TYPE3 message
- openldap/ldap; check for binary attribute case insensitively
- openldap: avoid indexing the result at -1 for blank responses
- openldap: check ber_sockbuf_add_io() return code
- openldap: check ldap_get_option() return codes
- openldap: do not pass newline to infof()
- openldap: fix memory-leak in error path
- openldap: fix memory-leak on oldap_do's exit path
- openldap: limit max incoming size
- openssl-quic: check results better
- openssl-quic: handle error in SSL_get_stream_read_error_code
- openssl-quic: ignore unexpected streams opened by server
- openssl: better return code checks when logging cert data
- openssl: call SSL_get_error() with proper error
- openssl: check CURL_SSLVERSION_MAX_DEFAULT properly
- openssl: clear retry flag on x509 error
- openssl: combine all the x509-store flags
- openssl: fail if more than MAX_ALLOWED_CERT_AMOUNT certs
- openssl: fail the transfer if ossl_certchain() fails
- openssl: fix build for v1.0.2
- openssl: fix peer certificate leak in channel binding
- openssl: fix resource leak in provider error path
- openssl: fix unable do typo in failf() calls
- openssl: free UI_METHOD on exit path
- openssl: make the asn1_object_dump name null-terminated
- openssl: only try engine/provider if a cert file/name is provided
- openssl: set io_need always
- openssl: skip session resumption when verifystatus is set
- os400: document threads handling in code.
- OS400: fix a use-after-free/double-free case
- osslq: set idle timeout to 0
- pingpong: remove two old leftover debug infof() calls
- pop3: check for CAPA responses case insensitively
- pop3: fix CAPA response termination detection
- pop3: function could get the ->transfer field wrong
- pytest: skip specific tests for no-verbose builds
- quic: fix min TLS version handling
- quic: ignore EMSGSIZE on receive
- quic: improve UDP GRO receives
- quic: remove data_idle handling
- quiche: fix possible leaks on teardown
- quiche: fix verbose message when ip quadruple cannot be obtained.
- quiche: handle tls fail correctly
- quiche: when ingress processing fails, return that error code
- rtsp: use explicit postfieldsize if specified
- runtests: tag tests that require curl verbose strings
- rustls: exit on error
- rustls: fix clang-tidy warning
- rustls: fix comment describing cr_recv()
- rustls: limit snprintf proper in cr_keylog_log_cb()
- rustls: make read_file_into not reject good files
- rustls: pass the correct result to rustls_failf
- rustls: typecast variable for safer trace output
- rustls: use %zu for size_t in failf() format string
- sasl: clear canceled mechanism instead of toggling it
- schannel: assign result before using it
- schannel: fix memory leak
- schannel: handle Curl_conn_cf_send() errors better
- schannel: lower the maximum allowed time to block to 7 seconds
- schannel: properly close the certfile on error
- schannel_verify: do not call infof with an appended \n
- schannel_verify: fix mem-leak in Curl_verify_host
- schannel_verify: use more human friendly error messages
- scp/sftp: fix disconnect
- scripts: pass -- before passing xargs
- setopt: accept *_SSL_VERIFYHOST set to 2L
- setopt: allow CURLOPT_DNS_CACHE_TIMEOUT set to -1
- setopt: fix unused variable warning in minimal build
- setopt: make CURLOPT_MAXREDIRS accept -1 (again)
- singleuse.pl: fix string warning
- smb: adjust buffer size checks
- smb: transfer debugassert to real check
- smtp: check EHLO responses case insensitively
- smtp: fix EOB handling
- smtp: return value ignored
- socks: advance iobuf instead of reset
- socks: avoid UAF risk in error path
- socks: deny server basic-auth if not configured
- socks: handle error in verbose trace gracefully
- socks: handle premature close
- socks: make Curl_blockread_all return CURLcode
- socks: properly maintain the status of 'done'
- socks: rewwork, cleaning up socks state handling
- socks_gssapi: also reset buffer length after free
- socks_gssapi: make the gss_context a local variable
- socks_gssapi: reject too long tokens
- socks_gssapi: remove superfluous releases of the gss_recv_token
- socks_gssapi: remove the forced "no protection"
- socks_gssapi: replace `gss_release_buffer()` with curl free
- socks_sspi: bail out on too long fields
- socks_sspi: fix memory cleanup calls
- socks_sspi: remove the enforced mode clearing
- socks_sspi: restore non-blocking socket on error paths
- socks_sspi: use the correct free function
- socksd: remove --bindonly mention, there is no such option
- spelling: fix new finds by typos-cli 1.39.0
- src/var: remove dead code
- ssl-session-cache: check use on config and availability
- ssl-sessions.md: mark option experimental
- strerror: drop workaround for SalfordC win32 header bug
- sws: fix checking sscanf() return value
- sws: pass in socket reference to allow function to close it
- tcp-nodelay.md: expand the documentation
- telnet: ignore empty suboptions
- telnet: make bad_option() consider NULL a bad option too
- telnet: make printsub require another byte input
- telnet: print DISPlay LOCation in printsub without mutating buffer
- telnet: refuse IAC codes in content
- telnet: return error if WSAEventSelect fails
- telnet: return error on crazy TTYPE or XDISPLOC lengths
- telnet: send failure logged but not returned
- telnet: use pointer[0] for "unknown" option instead of pointer[i]
- test1100: fix missing `<protocol>` section
- tests/libtest/cli*: fix init/deinit, leaks, and more
- tests/server: drop pointless memory allocation overrides
- tests/server: drop unsafe open() override in signal handler (Windows)
- tftp: check and act on tftp_set_timeouts() returning error
- tftp: check for trailing ";mode=" in URL without strstr
- tftp: default timeout per block is now 15 seconds
- tftp: error requests for blank filenames
- tftp: handle tftp_multi_statemach() return code
- tftp: pin the first used address
- tftp: propagate expired timer from tftp_state_timeout()
- tftp: return error if it hits an illegal state
- tftp: return error when sendto() fails
- thread: errno on thread creation
- tidy-up: assortment of small fixes
- tidy-up: avoid using the reserved macro namespace
- tidy-up: fcntl.h includes
- tidy-up: update MS links, allow long URLs via checksrc
- tidy-up: URLs
- time-cond.md: refer to the singular curl_getdate man page
- TLS: IP address verification, extend test
- TODO: fix a typo
- TODO: remove already implemented or bad items
- tool: fix exponential retry delay
- tool_cb_hdr: fix fwrite check in header callback
- tool_cb_hdr: size is always 1
- tool_cb_rea: use poll instead of select if available
- tool_cfgable: remove superfluous free calls
- tool_doswin: fix to use curl socket functions
- tool_filetime: cap crazy file times instead of erroring
- tool_filetime: replace cast with the fitting printf mask (Windows)
- tool_formparse: rewrite the headers file parser
- tool_getparam/set_rate: skip the multiplication on overflow
- tool_getparam: always disable "lib-ids" for tracing
- tool_getparam: make --fail and --fail-with-body override each other
- tool_getparam: warn if provided header looks malformed
- tool_ipfs: check the return value of curl_url_get for gwpath
- tool_ipfs: simplify the ipfs gateway logic
- tool_msgs: make errorf() show if --show-error
- tool_operate: improve wording in retry message
- tool_operate: keep failed partial download for retry auto-resume
- tool_operate: keep the progress meter for --out-null
- tool_operate: move the checks that skip ca cert detection
- tool_operate: retry on HTTP response codes 522 and 524
- tool_operate: return error on strdup() failure
- tool_paramhlp: remove outdated comment in str2tls_max()
- tool_parsecfg: detect and error on recursive --config use
- tool_progress: handle possible integer overflows
- tool_progress: make max5data() use an algorithm
- transfer: avoid busy loop with tiny speed limit
- transfer: fix retry for empty downloads on reuse
- transfer: reset retry count on each request
- unit1323: sync time types and printf masks, drop casts
- unit1664: drop casts, expand masks to full values
- url: make Curl_init_userdefined return void
- urldata: FILE is not a list-only protocol
- urldata: make 'retrycount' a single byte
- urldata: make redirect counter 16-bit
- vauth/digest: improve the digest parser
- version: add GSS backend name and version
- vquic: fix idle-timeout checks (ms<-->ns), 64-bit log & honor 0=no-timeout
- vquic: fix recvmsg loop for max_pkts
- vquic: handling of io improvements
- vquic: sending non-gso packets fix for EAGAIN
- vtls: alpn setting, check proto parameter
- vtls: check final cfilter node in find_ssl_filter
- vtls: drop duplicate `CURL_SHA256_DIGEST_LENGTH` definition
- vtls: properly handle SSL shutdown timeout
- vtls: remove call to PKCS12_PBE_add()
- vtls: unify the error handling in ssl_cf_connect().
- vtls_int.h: clarify data_pending
- vtls_scache: fix race condition
- wcurl: sync to +dev snapshot
- windows: replace _beginthreadex() with CreateThread()
- windows: stop passing unused, optional argument for Win9x compatibility
- windows: use consistent format when showing error codes
- windows: use native error code types more
- wolfssl: check BIO read parameters
- wolfssl: clear variable to avoid uninitialized use
- wolfssl: fix error check in shutdown
- wolfssl: fix resource leak in verify_pinned error paths
- wolfssl: no double get_error() detail
- ws: clarify an error message
- ws: fix some edge cases
- ws: fix type conversion check
- ws: reject curl_ws_recv called with NULL buffer with a buflen

## Fixed in 8.16.0 - September 10 2025

8.16.0
8.16.0
8.16.0 changes only

Changes:

- build: bump minimum required mingw-w64 to v3.0 (from v1.0)
- curl: add --follow
- curl: add --out-null
- curl: add --parallel-max-host to limit concurrent connections per host
- curl: make --retry-delay and --retry-max-time accept decimal seconds
- hostip: cache negative name resolves
- ip happy eyeballing: keep attempts running
- mbedtls: bump minimum version required to 3.2.0
- multi: add curl_multi_get_offt
- multi: add CURLMOPT_NETWORK_CHANGED to signal network changed
- netrc: use the NETRC environment variable (first) if set
- smtp: allow suffix behind a mail address for RFC 3461
- tls: make default TLS version be minimum 1.2
- tool_getparam: add support for `--longopt=value`
- vquic: drop msh3
- websocket: support CURLOPT_READFUNCTION
- writeout: add %time{}

Bugfixes:

- _PROTOCOLS.md: mention file:// is only for absolute paths
- acinclude: --with-ca-fallback only works with OpenSSL
- alpn: query filter
- ares: destroy channel on shutdown
- ares: use `ares_strerror()` to retrieve error messages
- asyn-thrdd: fix --disable-socketpair builds
- asyn-thrdd: fix Curl_async_pollset without socketpair
- asyn-thrdd: fix no `HAVE_GETADDRINFO` builds
- asyn-thrdd: manage DEFERRED and locks better
- autotools: make curl-config executable
- aws-lc: do not use large buffer
- BINDINGS.md: add LibQurl
- bufq: add integer overflow checks before chunk allocations
- bufq: removed "Useless Assignment"
- bufq: simplify condition
- build: allow libtests/clients to use libcurl dependencies directly
- build: disable `TCP_NODELAY` for emscripten
- build: enable _GNU_SOURCE on GNU/Hurd
- build: extend GNU C guards to clang where applicable, fix fallouts
- build: fix build errors/warnings in rare configurations
- build: fix disable-verbose
- build: fix mingw-w64 version guard for mingw32ce
- build: if no perl, fix to use the pre-built hugehelp, if present
- build: link to Apple frameworks required by static wolfSSL
- build: support LibreSSL native crypto lib with ngtcp2 1.15.0+
- build: tidy up compiler definition for tests
- cf-https-connect: delete unused declaration
- clang-tidy: disable `clang-analyzer-security.ArrayBound`
- cmake: `CURL_CA_FALLBACK` only works with OpenSSL
- cmake: capitalize 'Rustls' in the config summary
- cmake: defer building `unitprotos.h` till a test target needs it
- cmake: define `WIN32_LEAN_AND_MEAN` for examples
- cmake: drop redundant unity mode for `curlinfo`
- cmake: enable `-Wall` for MSVC 1944
- cmake: fix `ENABLE_UNIX_SOCKETS=OFF` with pre-fill enabled on unix
- cmake: fix setting LTO properties on the wrong targets
- cmake: fix to disable Schannel and SSPI for non-Windows targets
- cmake: fix to restrict `SystemConfiguration` to macOS
- cmake: honor `CMAKE_C_FLAGS` in test 1119 and 1167
- cmake: improve error message for invalid HTTP/3 MultiSSL configs
- cmake: keep websockets disabled if HTTP is disabled
- cmake: make `runtests` targets build the curl tool
- cmake: make the ExternalProject test work
- cmake: omit linking duplicate/unnecessary libs to tests & examples
- cmake: re-add simple test target, and name it `tests`
- cmake: set `CURL_DIRSUFFIX` automatically in multi-config builds
- CODE_STYLE: sync with recent `checksrc.pl` updates
- config-win32.h: do not use winsock2 `inet_ntop()`/`inet_pton()`
- configure: if no perl, disable unity and shell completion, related tidy ups
- configure: tidy up internal names in ngtcp2 ossl detection logic
- connectdata: remove primary+secondary ip_quadruple
- connection: terminate after goaway
- contrithanks: fix for BSD `sed` tool
- cookie: don't treat the leading slash as trailing
- cookie: remove expired cookies before listing
- curl-config: remove X prefix use
- curl/system.h: fix for GCC 3.3.x and older
- curl: make the URL indexes 64-bit
- curl: tool_read_cb fix of segfault
- curl_addrinfo: drop workaround for old-mingw
- curl_easy_ssls_export: make the example more clear
- curl_fnmatch, servers: drop local macros in favor of `sizeof()`
- curl_mime_data_cb.md: mention what datasize is for
- curl_ossl: extend callback table for nghttp3 1.11.0
- curl_setup.h: include `stdint.h` earlier
- curl_setup.h: move UWP detection after `config-win32.h` (revert)
- curl_setup.h: move UWP detection after `config-win32.h`
- CURLINFO_FILETIME*.md: correct the examples
- CURLOPT: bump `CURL_REDIR_*` macros to `long`
- CURLOPT: bump `CURL_SSLVERSION_*` macros to `long`
- CURLOPT: bump `CURLALTSVC_*` macros to `long`
- CURLOPT: bump `CURLFTP*` enums to `long`, drop casts
- CURLOPT: bump `CURLHEADER_*` macros to `long`, drop casts
- CURLOPT: bump `CURLPROTO_*` macros to `long`
- CURLOPT: bump `CURLPROXY_*` enums to `long`, drop casts
- CURLOPT: bump `CURLWS_NOAUTOPONG`, `CURLWS_RAW_MODE` macros to `long`
- CURLOPT: bump remaining macros to `long`
- CURLOPT: drop redundant `long` casts
- CURLOPT: replace `(long)` cast with `L` suffix for `CURLHSTS_*` macros
- CURLOPT_HTTP_VERSION: mention new default value
- CURLOPT_SSL_CTX_*: replace the base64 with XXXX
- delta: fix warnings, fix for non-GNU `date` tool
- DEPRECATE.md: drop old OpenSSL versions
- DEPRECATE.md: drop support for c-ares versions before 1.16.0
- DEPRECATE.md: drop support for Windows XP/2003
- DEPRECATE.md: remove leftover "nothing"
- DISTROS.md: add Haiku
- docs/cmdline-opts: the auth types are not mutually exclusive
- docs: add CURLOPT type change history, drop casts where present
- docs: fix link CONTRIBUTE.md link
- docs: fix name in curl_easy_ssls_export man page
- docs: fix typo (staring -> starting)
- docs: point two broken links to archive.org
- doh: rename symbols to avoid collision with mingw-w64 headers
- easy handle: check validity on external calls
- examples: drop long cast for `CURLALTSVC_*`
- examples: make `CURLPIPE_MULTIPLEX` fallback `long`
- examples: remove base64 encoded chunks from examples
- examples: remove href_extractor.c
- ftp: store directory components as start+len instead of memdup'ing
- ftp: use 'conn' instead of 'data->conn'
- gnutls: fix building with older supported GnuTLS versions
- gnutls: some small cleanups
- hmac: return error if init fails
- hostip: do DNS cache pruning in milliseconds
- HTTP3.md: avoid `configure` issue for ngtcp2 1.14.0+ compatibility
- http: const up readonly H2_NON_FIELD
- http: do the cookie list access under lock
- http: silence `-Warray-bounds` with gcc 13+
- idn: reject conversions that end up as a zero length hostname
- inet_pton, inet_ntop: drop declarations when unused
- lib1560: fix memory leak when run without UTF-8 support
- lib1560: replace an `int` with `bool`
- lib2700: use `testnum`
- lib517: use `LL` 64-bit literals & re-enable a test case (`time_t`)
- lib: drop `UNUSED_PARAM` macro
- libcurl: reset rewind flag in curl_easy_reset()
- libssh: Use sftp_aio instead of sftp_async for sftp_recv
- libtests: update format strings to avoid casts, drop some macros
- libtests: use `FMT_SOCKET_T`, drop more casts
- managen: reset text mode at end of table marker
- mbedtls: check for feature macros instead of version
- mdlinkcheck: handle links with a leading slash properly
- memanalyze: fix warnings
- memory: make function overrides work reliably in unity builds
- multi event: remove only announced
- multi: don't insert a node into the splay tree twice
- multi: fix assert in multi_getsock()
- multi: fix bad splay management
- multi: process pending, one by one
- multi: replace remaining EXPIRE_RUN_NOW
- multissl: initialize when requesting a random number
- ngtcp2: extend callback tables for nghttp3 1.11.0 and ngtcp2 1.14.0
- ngtcp2: handshake timeout should be equal to --connect-timeout
- ngtcp2: use custom mem funcs
- openssl: add and use `HAVE_BORINGSSL_LIKE` internal macro
- openssl: add and use `HAVE_OPENSSL3` internal macro
- openssl: assume `OPENSSL_VERSION_NUMBER`
- openssl: auto-pause on verify callback retry
- openssl: check SSL_write() length on retries
- openssl: clear errors after a failed `d2i_X509()`
- openssl: drop more legacy cruft
- openssl: drop redundant `HAVE_OPENSSL_VERSION` macro
- openssl: drop redundant version check
- openssl: drop single-use interim macro `USE_OPENSSL_SRP`
- openssl: enable `HAVE_KEYLOG_CALLBACK` for AWS-LC
- openssl: merge two `#if` blocks
- openssl: output unescaped UTF-8 x509 issuer/subject DNs
- openssl: remove legacy cruft, document macro guards
- openssl: save and restore OpenSSL error queue in two functions
- openssl: some small cleanups
- openssl: split cert_stuff into smaller sub functions
- openssl: sync an AWS-LC guard with BoringSSL
- openssl: use `RSA_flags()` again with BoringSSL
- parallel-max: bump the max value to 65535
- parsedate: make Curl_getdate_capped able to return epoch
- processhelp.pm: fix to use the correct null device on Windows
- processhelp.pm: use `Win32::Process*` perl modules if available
- projects: drop unused logic from `generate.bat`
- projects: fix Windows project 'clean' function
- pytest: add SOCKS tests and scoring
- pytest: fix test_17_09_ssl_min_max for BoringSSL
- pytest: increase server KeepAliveTimeout
- pytest: relax error check on test_07_22
- resolving: dns error tracing
- runtests: assume `Time::HiRes`, drop Perl Win32 dependency
- runtests: remove warning message
- runtests: replace `--ci` with `--buidinfo`, show OS/Perl version again
- runtests: show still running tests when nothing has happened for a while
- schannel: add an error message for client cert not found
- schannel: assume `CERT_CHAIN_REVOCATION_CHECK_CHAIN`
- schannel: drop fallbacks for 4 macros
- schannel: drop fallbacks for unused `BCRYPT_*` macros
- schannel: drop old-mingw special case
- schannel: fix recent update for mingw32ce
- schannel: fix renegotiation
- schannel: improve handshake procedure
- schannel: not supported with UWP, drop redundant code
- schannel: use if(result) like the code style says
- scripts: enable strict warnings in Perl where missing, fix fallouts
- scripts: fix two Perl uninitialized value warnings
- sendf: getting less data than "max allowed" is okay
- servers: convert two macros to scoped static const strings
- setopt: refactor out the booleans from setopt_long to setopt_bool
- setopt: split out cookielist() and cookiefile()
- socks: do_SOCKS5: Fix invalid buffer content on short send
- socks_sspi: simplify, clean up Curl_SOCKS5_gssapi_negotiate
- spacecheck.pl: when detecting unicode, mention line number
- spacecheck: warn for 3+ empty lines in a row, fix fallouts
- spelling: file system
- test1148: drop redundant `LC_NUMBER=` env setting
- test1557: pass `long` type to `multi_setopt()`
- test1560: set locale/codeset with `LC_ALL` (was: `LANG`), test in CI
- test1560: skip some URLs if UTF-8 is not supported
- test1: raise alloc limits
- test428: re-enable for Windows
- test436: fix running on Windows with `_curlrc` present
- test: add `cygwin` feature and use it (test 1056, 1517)
- tests/ech_tests.sh: indent, if/for style, inline ifs
- tests: constify command-line arguments
- tests: delete unused commands
- tests: drop unused `BLANK` envs, unset `CURL_NOT_SET`
- tests: drop unused `CURL_FORCEHOST` envs
- tests: fix perl warnings in http2-server, http3-server
- tests: fix prechecks to call the bundle libtest tool
- tests: fix UTF-8 detection, per-test `LC_*` settings, CI coverage
- tests: merge clients into libtests, drop duplicate code
- tests: remove the QUIT filters
- tests: set `CURL_ENTROPY` per test, not globally
- tests: unset some envs instead of blanking them
- threaded-resolver: fix shutdown
- tidy-up: `Curl_thread_create()` callback return type
- tidy-up: move literal to the right side of comparisons
- tidy-up: prefer `ifdef`/`ifndef` for single checks
- tls: CURLINFO_TLS_SSL_PTR testing
- TODO: remove session export item
- TODO: remove the expand ~ idea
- tool_cb_wrt: stop alloc/free for every chunk windows console output
- tool_filetime: accept setting negative filetime
- tool_getparam: let --trace-config override -v
- tool_getparam: warn on more unicode prefixes
- tool_operate: avoid superfluous strdup'ing output
- tool_operate: use stricter curl_multi_setopt() arguments
- tool_operate: use the correct config pointer
- tool_paramhlp: fix secs2ms()
- tool_parsecfg: use dynbuf for quoted arguments
- tool_urlglob: add integer overflow protection
- tool_urlglob: polish, cleanups, improvements
- typecheck-gcc: add type checks for curl_multi_setopt()
- unit-tests: build the unitprotos.h from here
- unit2604: avoid `UNCONST()`
- URL-SYNTAX.md: drop link to codepoints.net to pass linkcheck
- urlapi: allow more path characters "raw" when asked to URL encode
- urldata: reduce two long struct fields to unsigned short
- urlglob: only accept 255 globs
- vquic-tls: fix SSL backend type for QUIC connections using gnutls
- vquic: use curl_getenv
- vtls: set seen http version on successful ALPN
- websocket example: cast print values to unsigned int
- websocket: handling of PONG frames
- websocket: improve handling of 0-len frames
- websocket: reset upload_done when sending data
- windows: assume `ADDRESS_FAMILY`, drop feature checks
- windows: document toolchain support for `CERT_NAME_SEARCH_ALL_NAMES_FLAG`
- windows: document toolchain support for some macros (cont.)
- windows: document toolchain support for some macros
- windows: drop `CRYPT_E_*` macro fallbacks, limit one to mingw32ce
- windows: drop two interim, single-use macros
- windows: drop unused `curlx/version_win32.h` includes
- windows: fix `if_nametoindex()` detection with autotools, improve with cmake
- windows: include `wincrypt.h` before `iphlpapi.h` for mingw-w64 <6
- windows: target version macro tidy-ups
- wolfssl: rename ML-KEM hybrids to match IETF draft
- write-out.md: header_json is not included the json object
- ws: avoid NULL pointer deref in curl_ws_recv

## Fixed in 8.15.0 - July 16 2025

8.15.0
8.15.0
8.15.0 changes only

Changes:

- TLS: remove support for Secure Transport and BearSSL

Bugfixes:

- altsvc: accept 'clear' without semicolon as well
- asyn-ares: remove redundant NULL check
- asyn-thrdd: free the previous name before strdup'ing the new
- autotools: detect and link `brotlicommon` library for brotli
- autotools: drop `$top_builddir/src` from src header path
- autotools: drop headers from src mk-unity rules (fixup)
- autotools: drop no longer necessary `--srcdir` unity options
- autotools: drop redundant `Makefile.inc` from `EXTRA_DIST` in src
- autotools: simplify configuration in tests, examples
- bufq: change read/write signatures
- bufq: remove the unused Curl_bufq_unwrite function
- build: assume `sys/socket.h`, `sys/time.h` on non-Windows (as in `curl/curl.h`)
- build: drop `HAVE_SYS_SOCKET_H` and `HAVE_SYS_TIME_H` macros
- build: drop explicit curlx from hdr paths, refer headers with `curlx/` prefix
- build: drop unused variables in tests
- build: fix libcurltool with cmake and tunits, related tidy-ups
- build: split `.c` and `.h` file lists in tests
- build: stop checking for `sys/stat.h`
- build: stubgss tidy-ups (in tests)
- build: sync build scripts between client/libtest
- build: tidy up `Makefile.inc` use in lib and src
- build: tidy up header paths, use srcdir where possible
- cf-socket: make socket data_pending a nop
- checksrc-all: rewrite in Perl, remove `checksrc.bat`
- checksrc: reduce exceptions, apply again to curlx
- cmake/FindGSS: fix processing C header path options
- cmake/FindGSS: initialize result variables
- cmake: `curl_add_clang_tidy_test_target` tidy-ups
- cmake: build `stubgss` library for libtests to match autotools
- cmake: check USE_WINDOWS_SSPI when adding secur32 to CURL_LIBS
- cmake: configure c-ares header directory in project root (was: lib)
- cmake: document OpenSSL and ngtcp2 crypto lib custom variables
- cmake: drop never propagated C macros
- cmake: drop passing redundant `CURL_STATICLIB` in examples and clients
- cmake: drop redundant macro from test clients
- cmake: drop reference to future variable
- cmake: enable soversion by default for OpenHarmony OS
- cmake: fix `curl_add_clang_tidy_test_target` when no `-D` option
- cmake: fix generator expression in docs/examples
- cmake: gather options recursively in `curl_add_clang_tidy_test_target`
- cmake: make docs depend on support files
- cmake: move `OUTPUT` argument in the `add_custom_command()` line
- cmake: omit clang-tidy on internal libs curlu and curltool
- cmake: replace `cmakelint` with `cmake-lint` from `cmakelang`, fix issues
- cmake: replace the way clang-tidy verifies tests, fix issues found
- cmake: simplify handling generated `lib1521.c` in libtests
- cmake: sync `target_link_libraries()` order in tests more
- cmake: sync tests scripts by using the variable `BUNDLE`
- cmake: sync tests scripts with each other and autotools (more)
- cmake: use `target_link_options()` when available
- config-win32: fix default targets, shorten macro logic
- configure: order LDAP after the SSL libraries
- connect: drop unused struct member
- connection: clarify `transport`
- connection: eliminate member `remote_addr`
- curl-config: fix whitespace in usage text
- curl.h: make CURL_IPRESOLVE_* symbols defined as longs
- curl.h: make CURLSSLOPT_* symbols defined as longs
- curl.h: remove the "RESERVED" error codes
- curl: implement non-blocking STDIN read on Windows
- curl: improve non-blocking STDIN performance
- curl: remove the global argument from many functions
- curl: unify pointer names to global config
- curl_get_line: make sure lines end with newline
- curl_memory.h: fix to undefine `accept4`
- curl_path: make SFTP handle a path like /~ properly.
- curlinfo: provide the 'digest' feature
- CURLSHOPT_SHARE.md: mention multi-threading requires callbacks
- DEPRECATE.md: add VS2005 removal to the list
- digest: fix build with disabled digest auth
- DISTROS: update NixOS link
- docs,tests: fix english grammar "allow to" -> "allow <something> to"
- docs/CONTRIBUTE: fix broken link
- docs/examples: add ftp-delete.c
- docs: beef up examples/websocket.c
- docs: fix broken link in CODE_REVIEW.md
- docs: fix broken link in INSTALL.md
- docs: fix docs for CURLOPT_PREQUOTE after #17616
- docs: fix documentation of connect_only 2
- docs: fix two typos
- docs: mention that the netrc file works without port numbers
- docs: mention the as-is concept generically
- docs: note SSLS-EXPORT feature in -ssl-sessions doc
- docs: reflect that delimiter-separated capath is only OpenSSL
- docs: sync -tls-earlydata support w/ CURLOPT_SSL_OPTIONS
- docs: warn about lifetime in CURLOPT_CLOSESOCKET*
- easy: fix comment-documentation
- easygetopt: fix curl logo in header comment
- firefox-db2pem: avoid use of eval in script
- ftp: fix prequotes for a directory in URL
- ftplistparser: split parse_unix into sub functions
- h2_serverpush: fix file handle leaks reported by clang-tidy
- h3: fix query of concurrent streams
- http/3: report handshake with version and cipher as for TCP connections
- http2: do not delay RST send on aborted transfer
- http2: fix var types in is_alive() implementations
- http: explicitly ignore parsing errors for Retry-After
- http: fix build with cookies and HSTS disabled
- http_ntlm: protect against null deref
- http_ntlm: remove unreachable code
- INSTALL.md: cygwin details and add source code link
- ldap: avoid automake caching issues with LDAP library names
- ldap: if ldap-lib is sufficient, add it to LIBS.
- ldap: initial support for --with-ldap option
- lib2082: drop `typedef struct`
- lib: address singleuse issues
- lib: avoid reusing unclean connection
- lib: drop two interim macros in favor of native libcurl API calls
- lib: fix unused parameter/function compiler warnings
- lib: make `CURLX_SET_BINMODE()` and use it
- lib: make `curlx_wait_ms()` and use it
- lib: replace scache no-op macros with `#ifdef`
- lib: stop `time()` debug overrides at the end of source in altsvc, hsts
- lib: unify recv/send function signatures
- libcurl-env.md: drop LOGNAME, USER and NTLMUSER
- libcurl.m4: fix indentation
- libssh2: remove use of 'initialised' for cleanup
- libssh: de-complex myssh_statemach_act()
- libssh: fix readdir issues
- libtests: make test 1503,1504,1505 use the 1502 binary
- libtests: more header tidy-ups
- libtests: stop building the sames source multiple times
- memdebug.h: #undef `fclose` before defining it
- memdebug.h: eliminate global macro `CURL_MT_LOGFNAME_BUFSIZE`
- memdebug: include in unity batch
- memory: stop overriding unused `wcsdup()`/`_wcsdup()` system functions
- memory: tidy up `_tcsdup()` override
- misc: fix typos
- mk-lib1521: replace `printf` with `curl_mprintf`
- multi: add dirty bitset
- multi: do no expire a blocked transfer
- multi: fix polling with pending input
- multi: remove careful bounds check as coverity says it is not needed
- multi: xfer table/bitset, handle limits
- ngtcp2: fix coverity warning about result handling
- openssl: enable readahead
- openssl: error on SSL_ERROR_SYSCALL
- openssl: fix handling of buffered data
- openssl: fix openssl engine use
- openssl: fix pkcs11 provider available check
- os400: upgrade ILE/RPG bindings with latest definitions.
- pingpong: on disconnect, check for unflushed pingpong state
- projects/build-openssl.bat: remove
- pytest test_07_70, weaken early data check
- pytest: adapt for runs with openssl-1.1.1
- pytest: disable test_07_37 and test_07_36 with openssl's quic
- quic: implement CURLINFO_TLS_SSL_PTR
- RELEASE-PROCEDURE.md: update docs/VERSIONS
- runtests.pl: fix sprintf() using one too many %s
- runtests: fix `LD_PRELOAD` detection for cmake-built curl binaries
- runtests: support memory-limits per test
- rustls: apply memory function overrides, fixing an ECH buffer free
- rustls: don't try printing the not provided file
- schannel: allow partial chains for manual peer verification
- schannel: drop Windows 2000 compatibility logic
- scorecard: flame graphs and documentation
- SCP/SFTP: avoid busy loop after EAGAIN
- scripts: fix to quote the copyright email address
- socks: fix query when filter context is null
- system.h: remove some macros
- test1117: reduce write delays
- test1175: fix to run, and fix documentation issues detected
- test1222: fix for out-of-tree and no-libcurl-manual builds
- test1499, 1599: use `%LOGDIR`
- test1499: verify two chunked responses on reused connection
- test1596: let test pass after year 2036
- test1706: pass include directory to `managen` for out-of-tree builds
- tests/client: drop autotools logic no longer necessary
- tests/client: use `curl_mfprintf()`
- tests/dnsd: read config from file
- tests/http/clients: drop hack and use `curl_setup.h` again
- tests/http/clients: move to tests/client
- tests/http/requirements: remove multipart
- tests/libtest: call `curlx_now_init()` for unit 1399, 2600 (Windows)
- tests/libtest: drop `TEST_HANG_TIMEOUT` redefinition hack
- tests/libtest: drop a checksrc exception
- tests/libtest: use `curltime` from curlx
- tests/server/util.c: include netinet/in6.h
- tests/server: de-dupe/merge three `sockdaemon()` clones into one
- tests/server: drop `memdebug.h`
- tests/server: make all global vars/funcs static
- tests/server: move memory init to `memptr.c`
- tests/servers.pm: add more ways to figure out current user
- tests: always make bundles, adapt build and tests
- tests: bundle http clients, de-dupe, enable for MSVC
- tests: constify, make consts static
- tests: drop `BUNDLE_SRC` variable
- tests: drop mk-bundle exceptions
- tests: drop unused or redundant includes
- tests: drop useless "nodist_SOURCES" assignments
- tests: fail torture if !valgrind&threaded resolver
- tests: fix 1301, 1308 to fail on error
- tests: fix `BUNDLE` variable references in `Makefile.am`
- tests: make all names < 75 characters long
- tests: make individual test sources compile cleanly
- tests: make sshserver less verbose
- tests: move `curlcheck.h` to libtest as `unitcheck.h`
- tests: move GSS-API dynamic stub into debug-mode libcurl
- tests: torture: don't duplicate valgrind command
- tests: use %b64[] to base64 data
- tests: use %b64[] to base64 data in 2056, 2057
- tftpd: use `CURLMIN()` macro
- tidy-up: replace `<memdebug.h>` with `"memdebug.h"` (src, units)
- tls: remove Curl_ssl false_start
- tool1621: drop unused internal libcurl headers
- tool_getparam: fix --ftp-pasv
- tool_operate: fix return code when --retry is used but not triggered
- tool_paramhelp: fix language in comments
- top-complexity: lower max allowed complexity threshold to 90
- unit tests: extract "private" prototypes at build time
- unit1302: expand the base64 encode/decode tests
- url: fix connection lifetime checks
- url: fix NULL deref with bad password when no user is provided
- urlapi: simplify and split into sub functions
- urlapi: use uppercase hex encoding
- vauth: move auth structs to conn meta data
- vtls: change send/recv signatures of tls backends
- vtls: fix a copy-pasted early data comment typo
- vtls: log rustls negotiated KEX group name
- vtls: prefer ciphersuite to cipher in msgs
- vtls: prefer rustls-ffi ciphersuite name API
- VULN-DISCLOSURE-POLICY.md: fix typos
- VULN-DISCLOSURE-POLICY: all reports should be disclosed
- VULN-DISCLOSURE-POLICY: exclude not installed software
- VULN-DISCLOSURE-POLICY: minor language polish
- warnless: drop parts of the `read`/`write` preprocessor hack (Windows)
- warnless: replace `read()`/`write()` wrapper functions with macros (Windows)
- windows: drop redundant `curl_wcsdup_callback` callback
- windows: fixup `fopen()` in `CURLDEBUG` builds
- windows: reduce/stop loading DLLs at runtime
- wolfssl: add support for ML_KEM hybrids
- ws: drop redundant `CURL_EXTERN` from function definitions
- xfer: manage pause bits

## Fixed in 8.14.1 - June 4 2025

8.14.1
8.14.1
8.14.1 changes only

Changes:

Bugfixes:

- asyn-thrdd: fix cleanup when RR fails due to OOM
- autotools: recognize more Linux targets when setting `-D_GNU_SOURCE`
- BUG-BOUNTY.md. mention the medium bounty amount in 2025
- cmake: fix missed version number for multi-pkg-config detections
- cmdline-docs: mention HTTP resumed uploads to be shaky
- curl: make -N handled correctly
- curl: upload from '.' fix
- dllmain: exclude from Cygwin builds
- docs/tests: remove mention of hyper
- docs: fix typos
- ftp: fix teardown of DATA connection in done
- http: fail early when rewind of input failed when following redirects
- license: update some copyright links to curl.se
- memanalyze.pl: fix getaddrinfo/freeaddrinfo checks
- misc: fix spelling
- misc: we write *an* IPv6 address
- multi: fix add_handle resizing
- spelling: 'a' vs 'an'
- spelling: call it null-terminate consistently
- test1510: fix expectation
- tests: await portfile to be complete
- tests: fix checks for https-mtls proto
- tests: improve server start reliability
- tests: move test docs into /docs
- tests: re-enable 1510, document heimdal memleak
- tests: test mtls also w/ clientAuth EKU only
- tests: test mtls with --insecure
- tls BIOs: handle BIO_CTRL_EOF correctly
- tool_getparam: make --no-anyauth not be accepted
- tool_getparam: refactored, simplified
- tool_getparam: remove two nextarg NULL checks
- VULN-DISCLOSURE-POLICY.md: the distros list wants <= 7 days embargo
- wolfssl: fix sending of early data
- ws: handle blocked sends better
- ws: tests and fixes

## Fixed in 8.14.0 - May 28 2025

8.14.0
8.14.0
8.14.0 changes only

Changes:

- mqtt: send ping at upkeep interval
- schannel: handle pkcs12 client certificates containing CA certificates
- TLS: add CURLOPT_SSL_SIGNATURE_ALGORITHMS and --sigalgs
- vquic: ngtcp2 + openssl support
- wcurl: import v2025.04.20 script + docs
- websocket: add option to disable auto-pong reply

Bugfixes:

- _SEEALSO.md: remove spaces around command and man page section
- asyn-thrdd: fix detach from running thread
- asyn-thrdd: explain how this is okay with a comment
- asyn resolver code improvements
- async-threaded resolver: use ref counter
- async: DoH improvements
- autotools: detect `wolfSSL_set_quic_use_legacy_code` like cmake does
- autotools: install shell completion files on cross build
- aws-sigv4: allow a blank string
- build: check required rustls-ffi version
- build: enable gcc-12/13+, clang-10+ picky warnings
- build: enable gcc-15 picky warnings
- certs: drop unused `default_bits` from `.prm` files
- cf-https-connect: use the passed in dns struct pointer
- cf-socket: fix FTP accept connect
- cfilters: remove assert
- cmake/FindNGTCP2: simplify multi-pkg-config detection
- cmake: append picky warnings to `CMAKE_REQUIRED_FLAGS` as string
- cmake: avoid 'target is imported but not globally visible' when consuming libcurl with old cmake
- cmake: do not install `mk-ca-bundle` script and man page
- cmake: enable `-Wall` for MSVC when `PICKY_COMPILER=ON`
- cmake: extend integration tests
- cmake: fix `fish` install directory detection via `pkg-config`
- cmake: fix nghttp3 static linking with `USE_OPENSSL_QUIC=ON`
- cmake: fix option() and mark_as_advanced() mixed order
- cmake: fix shell completion install when only one flavor is enabled
- cmake: honor individual picky option overrides found in `CMAKE_C_FLAGS`
- cmake: install shell completions for cross-builds
- cmake: link `crypt32` for OpenSSL feature detection
- cmake: merge `CURL_WERROR` logic into `PickyWarnings.cmake`
- cmake: prefer `COMPILE_OPTIONS` over `CMAKE_C_FLAGS` for custom C options
- cmake: quotes, whitespace, use `VERSION_GREATER_EQUAL`
- cmake: revert `CURL_LTO` behavior for multi-config generators
- cmake: set `BUILDING_LIBCURL` directly for unit test targets
- cmake: stop deleting `-W<n>` from `CMAKE_C_FLAGS` (MSVC)
- cmake: tidy up and document feature detections in dependencies
- cmake: use `CMAKE_COMPILE_WARNING_AS_ERROR` if available
- cmake: use `INCLUDE_DIRECTORIES` prop to specify local header dirs
- cmake: use `LIB_NAME` in `curl-config.cmake.in`
- cmake: use absolute paths for completion targets
- cmake: use the `LINK_OPTIONS` property with CMake 3.13+
- configure: catch asking for double resolver without https-rr
- configure: fix --disable-rt
- configure: restore link checks
- configure: suppress command not found for brew
- conncache: make Curl_cpool_init return void
- connect: shutdown timer fix
- content_encoding: Transfer-Encoding parser improvements
- CONTRIBUTE: add project guidelines for AI use
- contrithanks.sh: drop set -e
- cpool/cshutdown: force close connections under pressure
- curl: fix memory leak when -h is used in config file
- curl: only warn once for --manual in manual-disabled build
- curl_get_line: handle lines ending on the buffer boundary
- curl_krb5: only use functions if FTP is still enabled
- curl_multibyte: fixup low-level calls, include in unity builds
- curl_osslq: remove a leftover debug fprintf() call
- curl_version_info.md: clarify ssl_version for MultiSSL
- CURLMOPT_TIMERFUNCTION.md: correct the example
- CURLOPT_ERRORBUFFER.md: buffer is read only after curl takes ownership
- CURLOPT_FOLLOWLOCATION.md: switch to GET => no body
- CURLOPT_READFUNCTION.md: mention the seek callback
- CURLOPT_XFERINFOFUNCTION.md: fix the callback return type in example
- curlx: move the docs to docs/internals/
- DEPRECATE.md: drop support for VS2008
- DEPRECATE.md: drop Windows CE support
- dist: drop duplicate entry from `CMAKE_DIST`
- dns_entry: move from conn to data->state
- Dockerfile: update debian:bookworm-slim Docker digest to 90522ee
- docs/INSTALL.md: drop reference to removed configure option
- docs/libcurl: fix type and prototype problems in examples
- docs/libcurl: make examples build with picky compiler options
- docs/libcurl: mention sensitive data/headers
- docs: add missing return statement in examples
- docs: fix incorrect shell substitution in docker run example command
- docs: fix typo in retry.md
- docs: update distros links
- doh: httpsrr fix
- doh: make sure CURLOPT_PROTOCOLS is set a with a "long" arg
- doh: reduce the DNS request buffer size
- easy_reset: fix dohfor_mid member
- ECH: reference the OpenSSL ECH feature branch
- etag-save.md: mention how using both options is a good idea
- eventfd: fix feature guards
- formdata: cleanups
- ftp: fix bug in failed init
- ftp: fix race in upload handling
- ftplistparser: add two overflow preventions
- ftplistparser: split up into more functions
- generate.bat: exclude curlinfo.c from legacy VS projects
- genserv.pl: fail with a message if `openssl` is missing or failing
- headers: enforce a max number of response header to accept
- headers: set an error message on illegal response headers
- hostip: fix build without threaded-resolver and without DoH
- hostip: show the correct name on proxy resolve error
- http2: fix stream window size after unpausing
- HTTP3.md: fix incorrect variable placeholders
- http: fix a build error when all auths are disabled
- http: fix HTTP/2 handling of TE request header using "trailers"
- http: in alt-svc negotiation only allow supported HTTP versions
- http_aws_sigv4: add additional verbose log statements
- http_aws_sigv4: improve sigv4 URL encoding and canonicalization
- http_chunks: narrow variable scope for 'trlen'
- http_negotiate: fix non-SSL build with GSSAPI
- https-connect: fix httpsrr target check
- HTTPSRR.md: clarify somewhat
- if2ip: build the function also if FTP is present
- imap: remove redundant condition
- INSTALL-CMAKE.md: fix typo
- INSTALL.md: update the minimal libcurl size example
- KNOWN_BUGS: fix link in sivg4 issue 16.3
- lib/src/docs/test: improve curl_easy_setopt() calls
- lib1560: use hex notation, drop non-ASCII exception
- lib3026: drop DLL pre-load perf mitigation for old mingw
- lib: add const to clientwriter tables
- lib: drop curlx_getpid, use fake pid in SMB
- lib: include files using known path
- lib: make Curl_easyopts const
- lib: unify conversions to/from hex
- libcurl-tutorial.md: fix read callback explanation
- libssh: add NULL check for Curl_meta_get()
- libssh: fix memory leak
- libssh: remove a condition that always equals false
- libtest/first: stop defining MEMDEBUG_NODEFINES
- libtests: define CURL_DISABLE_DEPRECATION first
- make: clean tests better
- mbedtls: TLS 1.3 is max when mbedtls has 1.3 support
- metahash: add asserts to help analyzers
- mk-ca-bundle.pl: follow redirects
- mk-ca-bundle: switch URLs to GitHub versions
- mkhelp: fix to not generate a line-ending space in some cases
- mqtt: use conn/easy meta hash
- multi: do transfer book keeping using mid
- multi: init_do(): check result
- netrc: avoid NULL deref on weird input
- netrc: avoid strdup NULL
- netrc: deal with null token better
- ngtcp2: clarify ignoring of result
- openssl-quic: avoid potential `-Wnull-dereference`, add assert
- openssl-quic: fix printf mask
- openssl-quic: fix shutdown when stream not open
- openssl: enable builds for *both* engines and providers
- openssl: set the cipher string before doing private cert
- parsedate: provide Curl_wkday also for GnuTLS builds
- processhelp.pm: always call `taskkill` with `-f` (force)
- processhelp.pm: avoid potential endless loop, log more (Windows)
- progress: avoid integer overflow when gathering total transfer size
- pytest tls: extend coverage
- pytest-xdist: pytest in parallel
- pytest: add pinnedpubkey test cases
- pytest: give parameterised tests better ids for read- and parsability
- pytest: make test_07_22 more lenient to exit codes
- quic: no local idle connection timeout, ngtcp2 keep-alive
- rand: update comment on Curl_rand_bytes weak random
- RELEASE-PROCEDURE.md: release candidate git tagging explained
- rtsp: remove redundant condition
- runtests: add retry option to reduce flakiness
- runtests: fix indentation
- runtests: recognize lowercase `windows` in `curl -V`
- runtests: remove server verification after start
- runtests: split `SSH_PWD` into `SCP_PWD` and `SFTP_PWD`, and more
- rustls: make max size of cert and key reasonable
- sasl: give help when unable to select AUTH
- scripts: completion.pl: sort the completion file for all shells
- scripts: drop unused import, formatting
- scripts: fix --opts-dir help in completion.pl
- scripts: fix perl indentation, whitespace, semicolons
- sectransp: fix building for macOS Sierra and older
- setopt: provide info for CURLE_BAD_FUNCTION_ARGUMENT
- smb: avoid integer overflow on weird input date
- socket: use accept4 when available
- socketpair: support pipe2 where available
- spacecheck.pl: check for non-ASCII chars, fix fallouts
- spacecheck.pl: verify `tests/data/test*` for non-ASCII chars
- src: drop strcase.[ch] from tool builds
- src: include memdebug.h consistently with angle brackets <>
- src: rename curlx_safefree to tool_safefree
- test1173.pl: whitelist some option-looking names that aren't options
- test1658: add unit test for the HTTPS RR decoder
- test: make unittest 1308 into a libtest
- tests/ech_tests.sh: sync shebang with rest of bash scripts
- tests/FILEFORMAT.md: clarify %hex[] formatting
- tests/FILEFORMAT.md: document the aws feature
- tests/README.md: document --test-duphandle
- tests/README.md: list the openssl tool among the prerequisites
- tests/server/dnsd: basic DNS server for test suite
- tests/server: check for `stream != NULL` in mqttd
- tests/server: fix typo in comment
- tests/server: stop using libcurl string comparisons
- tests/server: stop using libcurl's printf functions
- tests/serverhelp: remove last remnants of http-pipe server
- tests/tunit: make a separate directory for tool-based unit tests
- tests: add aws feature to the related tests
- tests: Add https-mtls server to force client auth
- tests: fix some test tag mismatches
- tests: mark ipfs tests to require ipfs
- tests: move a boolean variable out of the path section
- tests: prefer `--insecure` over `-k`
- tests: provide all non-ascii data hex encoded
- tests: remove some unused test case sections
- tests: require IPv6 for 1265, 1324, 2086
- tests: separate tunit tests from unit tests more
- tests: stop using libcurl's strdup
- tests: unify test case keywords
- tests: use a more portable null device path
- TODO: remove "nicer lacking perl message"
- tool_cb_write.c: handle EINTR on flush
- tool_getparam: clear argument only when needed
- tool_operate: make retrycheck() a separate function
- tool_operate: when retrying, only truncate regular files
- tool_paramhlp: avoid integer overflow in secs2ms()
- tool_parsecfg: make get_line handle lines ending on the buffer boundary
- typecheck-gcc.h: fix the typechecks
- urlapi: redirecting to "" is considered fine
- urlapi: remove unneeded guards around PUNY2IDN
- urldata: remove the unused struct field 'hide_progress'
- VERSIONS: list all past releases
- vquic: consistent name for the stream struct across backends
- vquic: init for every call to recvmsg
- vtls: avoid NULL deref on bad PEM input
- vtls: fix build with ssl but without http
- VULN-DISCLOSURE-POLICY: use of weak algos
- winbuild: add the deprecation warning to the README
- winbuild: curl_get_line is not used for tool builds
- windows: fix builds targeting WinXP, test it in CI
- wolfssl: fix to enable ALPN when available
- ws: fix the header replace check
- ws: store protocol context as connection meta data

## Fixed in 8.13.0 - April 2 2025

8.13.0
8.13.0
8.13.0 changes only

Changes:

- curl: add write-out variable 'tls_earlydata'
- curl: make --url support a file with URLs
- gnutls: set priority via --ciphers
- IMAP: add CURLOPT_UPLOAD_FLAGS and --upload-flags
- lib: add CURLFOLLOW_OBEYCODE and CURLFOLLOW_FIRSTONLY
- OpenSSL/quictls: add support for TLSv1.3 early data
- rustls: add support for CERTINFO
- rustls: add support for SSLKEYLOGFILE
- rustls: support ECH w/ DoH lookup for config
- rustls: support native platform verifier
- var: add a '64dec' function that can base64 decode a string
- wolfssl: tls early data support

Bugfixes:

- addrinfo: add curl macro to avoid redefining foreign symbols
- asyn-thread: avoid the separate 'struct resdata' alloc
- asyn-thread: avoid the separate curl_mutex_t alloc
- asyn-thread: do not allocate thread_data separately
- asyn-thread: remove 'status' from struct Curl_async
- autotools: fix `dllmain.c` in unity builds
- autotools: fix `libtest` bundle to depend on `FIRSTFILES`
- autotools: use `CURLDEBUG` to exclude TrackMemory code from unity
- aws_sigv4: cannot be used for proxy
- aws_sigv4: merge repeated headers in canonical request
- aws_sigv4: use strparse more for parsing
- base64: drop `BUILDING_CURL` macro, always include in tests/server
- build: add Windows CE / CeGCC support, with CI jobs
- build: cmake multi-pkg-config detection improvements (brotli, ldap, mbedtls)
- build: do not apply curl debug macros to `tests/server` by default
- build: drop unused `getpart` tool
- build: enable -Wjump-misses-init for GCC 4.5+
- build: enable `-Wcast-qual`, fix or silence compiler warnings
- build: fix compiler warnings in feature detections
- build: replace Curl_ prefix with curlx_ for functions used in servers
- build: set `-O3` and tune WinCE in CI, fix `getpart`, `vtls_scache` fallouts
- build: set `HAVE_STDINT_H` if `stdint.h` is available
- build: set `HAVE_WRITABLE_ARGV` for Apple cross-builds
- build: silence bogus `-Wconversion` warnings with gcc 5.1-5.4
- build: silence mingw32ce C99 format warnings, simplify CI
- build: tidy-ups around `inet_pton`
- c-ares httpsrr: fix ifdef
- c-ares: error out for unsupported versions, drop unused macros
- ca-native.md: sync with CURLSSLOPT_NATIVE_CA
- cf-socket: deduplicate Windows Vista detection
- cf-socket: remove empty switch
- client writer: handle pause before decoding
- cmake: `CURL_LIBDIRS` improvements (upstreamed from vcpkg)
- cmake: `SHARE_LIB_OBJECT=ON` requires CMake 3.12 or newer
- cmake: add custom command scripts as dependencies where missing
- cmake: add pre-fill for Unix, enable in GHA/macos, verify pre-fills
- cmake: add shell completion support
- cmake: allow `CURL_STATIC_CRT` with shared libcurl and no curl exe
- cmake: allow `CURL_STATIC_CRT` with UCRT VS2015+ builds
- cmake: allow empty `IMPORT_LIB_SUFFIX`, add suffix collision detection
- cmake: avoid `-Wnonnull` warning in `HAVE_FSETXATTR_5` detection
- cmake: disable HTTPS-proxy as a feature if proxy is disabled
- cmake: drop `CURL_DISABLE_TESTS` option
- cmake: drop `HAVE_C_FLAG_Wno_long_double` logic for ancient Apple gcc
- cmake: drop `HAVE_IN_ADDR_T` from pre-fill too
- cmake: drop two stray TLS feature checks for wolfSSL
- cmake: exclude `-MP` for `clang-cl` again
- cmake: fix `HAVE_ATOMIC`/`HAVE_STDATOMIC` pre-fill for clang-cl
- cmake: fix clang-tidy builds to verify tests, fix fallouts
- cmake: fix detection pre-fills for iOS
- cmake: fix ECH detection in custom-patched OpenSSL
- cmake: fix typo in ECH config error msg
- cmake: hide empty `MINGW64_VERSION` output for mingw32ce
- cmake: improve httpd detection for pytest
- cmake: mention 'insecure' in the debug build warning
- cmake: misc tidy-ups
- cmake: pre-fill known type sizes for Windows OSes
- cmake: replace CMAKE_COMPILER_IS_GNUCC with CMAKE_C_COMPILER_ID
- cmake: replace exec_program() with execute_process()
- cmake: restrict static CRT builds to static curl exe, test in CI
- cmake: sync cutoff version with autotools for picky option `-ftree-vrp`
- cmake: sync OpenSSL(-fork) feature checks with `./configure`
- cmake: unity mode optimization for non-`CURLDEBUG` `testdeps` targets
- CODE_STYLE: readability and banned functions
- config-win32: set `HAVE_STDINT_H` where available
- configure: call the blocking resolver "blocking", not "default"
- configure: fix ECH detection with MultiSSL
- configure: silence compiler warnings in feature checks, drop duplicates
- configure: tidy up shell completion rules
- configure: use `curl_cv_apple` variable
- conn: eliminate `conn->now`
- conn: fix connection reuse when SSL is optional
- conncache: eliminate `conn->destination_len` as premature optimization
- contributors.sh: lowercase 'github' for consistency
- contrithanks.sh: update docs/THANKS in place
- cookie: do prefix matching case-sensitively
- cookie: minor parser simplification
- cookie: simplify invalid_octets()
- core: stop redefining `E*` macros on Windows, map `EACCES`, related fixes
- curl.h: change some enums to defines with L suffix
- curl.h: convert CURLUSESSL* names to defines
- curl.h: stop defining non-curl `__has_declspec_attribute`
- curl.h: switch `CURL_HTTP_VERSION*` enums to long constants
- curl/system.h: drop leftover comment about 32-bit curl_off_t
- curl: add my_setopt_long() and _offt()
- curl_msh3: remove verify bypass from DEBUGBUILDs
- curl_setup: drop `ERANGE` (for WinCE), no longer used
- curl_setup_once: drop `E*` macro redefines unused (with winsock2)
- curl_setup_once: stop redefining `ENAMETOOLONG` to winsock2 error code
- curl_trc: fix build with CURL_DISABLE_VERBOSE_STRINGS
- curl_ws_recv.md: expand a little on the fragments the API delivers
- CURLMOPT_SOCKETFUNCTION.md: add advice for socket callback invocation
- CURLOPT_HTTPHEADER.md: add comments to the example
- CURLOPT_HTTPHEADER.md: rephrases
- curltime: use libcurl time functions in src and tests/server
- DISABLED: add 313 for sectransp (move from GHA/macos)
- docs/cmdline-opts: use imperative form
- docs: adapt to removed --with-random
- docs: add FD_ZERO to curl_multi_fdset example
- docs: bump `rustls` to 0.14.1
- docs: correct argument names & URL redirection
- docs: minor edits to please the new spellchecker regime
- docs: rework RUSTLS install instructions
- docs: unify HTTP version style in --help output
- docs: vulnerabilities in debug code are not eligible for a bounty
- doh: improve HTTPS RR svcparams parsing
- doh: remove wrong but unreachable exit path from doh_decode_rdata_name
- dynbuf: assert init on free
- easy: drop `break` after `return`
- easy: fix warning about possible comma misuse
- eventfd: allow use on all CPUs
- examples: prefer `return` over `exit()` (cont.)
- ftp/sftp: strdup data info memory
- ftp: fix comment
- gnutls: fix connection state check on handshake
- gnutls: fix use of pkcs11 URLs for keys/certs
- gtls: fix uninitialized variable
- hash: use single linked list for entries
- hostip: don't use alarm() for DoH resolves
- hostip: make CURLOPT_RESOLVE support replacing IPv6 addresses
- http2: add on_invalid_frame callback for error detection
- http2: detect session being closed on ingress handling
- http2: enhance error messages on Curl_dyn* upon receiving headers
- http2: fix stream assignment for pushes
- http2: reset stream on response header error
- HTTP3.md: only speak about minimal versions
- http: convert parsers to strparse
- http: fix NTLM info message typo
- http: fix the auth check
- http: make the RTSP version check stricter
- http: negotiation and room for alt-svc/https rr to navigate
- http: remove an HTTP method size restriction
- http: version negotiation
- http_chunks: replace a strofft call with curl_str_hex
- https-rr: implementation improvements
- httpsrr: fix port detection
- httpsrr: fix the HTTPS-RR threaded-resolver build combo
- INFRASTRUCTURE.md: add IRC and Matrix details
- INSTALL-CMAKE.md: CMake usage updates
- INSTALL-CMAKE.md: mention `ZLIB_USE_STATIC_LIBS`
- lib1156: pass longs to `curl_easy_setopt()`
- lib1560: test set path containing LR or CR
- lib2302: fix crash due to stack overflow on MSVC and clang Windows
- lib696: fix building on Windows in non-bundle mode
- lib: better optimized casecompare() and ncasecompare()
- lib: clear up CURLRES_ASYNCH vs USE_CURL_ASYNC use
- lib: fix two curlx_strtoofft invokes
- lib: rename curlx_strtoofft to Curl_str_numblanks()
- lib: replace while(ISBLANK()) loops with Curl_str_passblanks()
- lib: simplify more white space loops
- lib: strtoofft.h header cleanup
- lib: use Curl_str_* instead of strtok_r()
- lib: use Curl_str_number() for parsing decimal numbers
- libssh2: fix freeing of resources in disconnect
- libssh2: fix memory leak in `SSH_SFTP_REALPATH` state
- libssh2: fix to ignore `known_hosts` if SHA256 host public key is set
- libssh2: print user with verbose flag
- libssh2: show crypto backend in the verbose connect log
- libssh: fix freeing of resources in disconnect
- libssh: fix scp large file upload for 32-bit size_t systems
- libtest/first.c: remove the Test: stderr output for unity builds
- libtest/libprereq.c: set CURLOPT_FOLLOWLOCATION with a long
- managen: accept more markdown-quote-markers
- managen: correct the warning for un-escaped '<' and '>'
- mbedtls: re-enable an error check
- memdebug.h: avoid `-Wredundant-decls` with an extra guard
- memdebug: drop dynamic allocation from `curl_dbg_log()`
- mprintf: switch three number parsers to use strparse
- mqtt: convert sendleftovers to dynbuf
- msvc: drop support for VS2005 and older
- multi: call protocol handler done() if PROTOCONNECT or later
- multi: event based rework
- multi: kill off remaining internal handles in curl_multi_cleanup
- multi: start the loop over when handles are removed
- multi_ev: fixes regarding connection shutdowns
- ngtcp2: do not iterate over multi handles
- ntlm: merge ntlm.h into ntlm.c
- openssl-quic: do not iterate over multi handles
- openssl: check return value of X509_get0_pubkey
- openssl: drop support for old OpenSSL/LibreSSL versions
- openssl: fix crash on missing cert password
- openssl: fix pkcs11 URI checking for key files.
- openssl: remove bad `goto`s into other scope
- prox/preproxy.md: document argument within <brackets>
- pytest: test negotiate with http proxy
- quiche: do not iterate over multi handles
- RELEASE-PROCEDURE.md: explain release candidates
- request: clear sendbuf_hds_len when resetting request bufq
- resolve: fix building without Unix sockets and `CURLDEBUG`
- runtests: accept `CURL_DIRSUFFIX` without ending slash
- runtests: add feature-based filtering
- runtests: check and report if `diff` tool is missing
- runtests: drop logic calling the `handle` tool (Windows)
- runtests: drop recognizing 'winssl' as Schannel
- runtests: drop ref to unused external function
- runtests: fix bundled test invocation with `-g` option
- runtests: fix SSH server not starting in cases, re-ignore failing vcpkg CI jobs
- runtests: fix test key format for libssh2 WinCNG (and others)
- runtests: generate certs dynamically, bump to EC-256, tidy up
- runtests: recognize AWS-LC as OpenSSL
- runtests: rewrite `genserv.sh` in Perl
- runtests: support multi-target cmake, drop workarounds from CI
- runtests: support running tests under wine or qemu (cont.)
- runtests: support running tests under wine or qemu
- runtests: use `setfacl` on Cygwin/MSYS, if present
- rustls: add ECH support w/ string ECH config
- rustls: cap maximum allowed CRL file size to 8MB
- rustls: support ECH GREASE
- rustls: use client cert and key if available
- schannel: deduplicate Windows Vista detection
- schannel: enable ALPN support under WINE 6.0+
- schannel: enable ALPN with MinGW, fix ALPN for UWP builds
- schannel: guard ALPN init code to ALPN builds
- scripts/managen: fix option 'single'
- scripts/managen: fix parsing of markdown code sections
- scripts: update completion.pl to parse options from docs
- sectransp: add support for HTTP/2 in gcc builds
- sendf: client reader line conversion: do not change data->state.infilesize
- setopt: illegal CURLOPT_SOCKS5_AUTH should return error
- setopt: remove unnecessary void pointer typecasts
- setopt: setting PROXYUSERPWD after PROXYUSERNAME/PASSWORD is fine
- shutdowns: split shutdown handling from connection pool
- socks: remove bad assert from do_SOCKS5()
- src: avoid strdup on platforms not doing UTF-8 conversions
- src: cleanup ISBLANK vs ISSPACE
- src: remove Curl_ prefix from tool-specific function
- src: remove final uses of Curl_ symbol prefixes in tool code
- src: replace strto[u][ld] with curlx_str_ parsers
- ssh: consider sftp quote commands case sensitive
- sshserver.pl: adjust `AuthorizedKeysFile2` cutoff version
- sshserver.pl: use Perl `chmod`
- sshserver: fix excluding obsolete client config lines
- ssl session cache: add exportable flag
- SSLCERTS: list support for SSL_CERT_FILE and SSL_CERT_DIR
- strparse: make Curl_str_number() return error for no digits
- strparse: switch the API to work on 'const char *'
- strparse: switch to curl_off_t as base data type
- test1022: add support for rc releases
- test1167: catch #defines with extra whitespace
- test313: disable CRL test for Schannel due to lack of support and flakiness
- test313: disable via `<features>` for backends without CRL support
- test489: set output dir
- test612: SCP `rm` the uploaded remote file (not the local source), unignore in CI
- test613: make it pass on Windows, fix postprocess, unignore in CI
- test615: fix for Cygwin, unignore in CI
- tests/certs: cleanup
- tests/server: drop unused `base64.pl`
- tests/server: fix to check against winsock2 error codes on Windows
- tests/server: give global `path` variable a more descriptive name
- tests/server: make the signal handler signal-safe
- tests/server: replace `errno` with `SOCKERRNO` in sockfilt, socksd, sws
- tests/server: replace `strerror` with `sstrerror` in socksd
- tests/server: support bundle binary
- tests/server: sync `wait_ms()` with the libcurl implementation
- tests/server: use `curlx_str_numblanks()` to avoid `errno`
- tests/servers.pm: remove unused variable 'portrange'
- tests: build non-debug unit tests with autotools, run them
- tests: fix comment in lib533
- tests: fix enum/int confusion, fix autotools `CFLAGS` for `servers`
- tests: make sure 'commands.log' is generated in the correct logdir
- tests: mark tests 1631, 1632 flaky
- tests: reformat error messages to avoid tripping MSBuild
- tests: remove base64 encoded sections
- tests: Remove unused variables
- tests: replace remaining non-ASCII bytes with hex markup
- tftpd: prefix TFTP protocol error `E*` constants with `TFTP_`
- tidy-up: align MSYS2/Cygwin codepaths, follow Cygwin `MAX_PID` bump
- tidy-up: delete, comment or scope C macros reported unused
- tidy-up: drop unused `CURL_INADDR_NONE` macro and `in_addr_t` type
- tidy-up: use `CURL_ARRAYSIZE()`
- timediff: fix comment for curlx_mstotv()
- timediff: remove unnecessary double typecast
- tool_dirhie: create directory hierarchy without strtok
- tool_getparam: clear sensitive arguments better
- tool_getparam: do parse_upload_flags without the alloc/free
- tool_getparam: parse --trace-config without strdup()/free()
- tool_getparam: parse_header() without strtok
- tool_operate: change "1 retries" to "1 retry"
- tool_operate: fail SSH transfers without server auth
- tool_operate: fix pluralization of seconds
- tool_operate: remove unnecessary (long) typecasts
- tool_paramhlp: do --proto parsing without strtok
- tool_parsecfg: make my_get_line skip comments and newlines
- tool_setopt: reduce use of "code hiding" macros
- url: call protocol handler's disconnect in Curl_conn_free
- urlapi: fix redirect from file:// with query, and simplify
- urlapi: remove percent encoded dot sequences from the URL path
- urlapi: simplify junkscan
- urldata: remove 'hostname' from struct Curl_async
- variable.md: clarify 'trim' example
- vquic: obey IOV_MAX
- vtls: fix compiler warnings seen with gcc 7.3.0 and mbedTLS
- winbuild: reduce command-line length by dropping whitespace
- windows: do not use winsock2 `inet_ntop()`/`inet_pton()`
- windows: drop code and curl manifest targeting W2K and older
- windows: fix issues detected by clang-tidy, and some more
- wolfssh: fix freeing of resources in disconnect
- wolfssh: retrieve the error using wolfSSH_get_error
- wolfssl: fix CA certificate multiple location import
- wolfssl: fix unused variable warning
- wolfssl: warn if CA native import option is ignored
- wolfssl: when using PQ KEM, use ML-KEM, not Kyber
- ws: corrected curlws_cont to reflect its documented purpose
- ws: fix and extend CURLWS_CONT handling
- zlib: bump minimum to 1.2.5.2 (was: 1.2.0.4)

## Fixed in 8.12.1 - February 13 2025

8.12.1
8.12.1
8.12.1 changes only

Bugfixes:

- all: remove FIXME and TODO comments
- asyn-thread: fix build with `CURL_DISABLE_SOCKETPAIR`
- asyn-thread: fix HTTPS RR crash
- asyn-thread: fix the returned bitmask from Curl_resolver_getsock
- asyn-thread: survive a c-ares channel set to NULL
- build: add tool_hugehelp.c into IBMi build
- checksrc.pl: warn on FIXME/TODO comments
- cmake/Find: set `<Modulename>_FOUND` for compatibility when found via `pkg-config`
- cmake: add integration tests, run them in CI
- cmake: always reference OpenSSL and ZLIB via imported targets
- cmake: avoid unnecessary `-L` for implicit link dirs
- cmake: drop `LDAP_DEPRECATED=1` macro, to sync with autotools
- cmake: fix `HAVE_GETHOSTBYNAME_R_*` detections with `CURL_WERROR=ON`
- cmake: fix to detect `HAVE_OPENSSL_SRP` in MSVC UWP builds
- cmake: fix/add missing feature detections for Windows/MS-DOS
- cmake: initialize variables where missing
- cmake: lib order fixes for picky linkers (e.g. binutils `ld`)
- cmake: normalize before matching paths with syspaths
- cmake: respect `GNUTLS_CFLAGS` when detected via `pkg-config`
- cmake: respect `GNUTLS_LIBRARY_DIRS` in `libcurl.pc` and `curl-config`
- cmake: save a line with `CMAKE_C_IMPLICIT_LINK_DIRECTORIES` exclusion
- cmake: tidy up string append and list prepend syntax
- configure/cmake: check for realpath
- configure/cmake: set asyn-rr a feature only if httpsrr is enabled
- content_encoding: #error on too old zlib
- curl_global_sslset.md: Add SSL backend names
- CURLOPT_SSH_KNOWNHOSTS.md: strongly recommend using this
- CURLSHOPT_SHARE.md: adjust for the new SSL session cache
- docs: better explain multi-part byte range behavior
- docs: use valid example domain names
- generate.bat: remove curl_get_line.c from the curlx file list
- header.md: mention `Authorization:` and `Cookie:` special treatment
- imap: TLS upgrade fix
- INTERNALS: fix c-ares, as we actually support 1.6.0 or later
- ldap: drop support for legacy Novell LDAP SDK
- lib: include necessary headers for `inet_ntop`/`inet_pton`
- lib: silence LibreSSL collision warning on non-MSVC Windows
- libssh2: comparison is always true because rc <= -1
- libssh2: raise lowest supported version to 1.2.8
- libssh: drop support for libssh older than 0.9.0
- libssh: silence `-Wconversion` with a cast (Windows 32-bit)
- netrc: return code cleanup, fix missing file error
- openssl-quic: ignore ciphers for h3
- openssl: fix out of scope variables in goto
- pop3: TLS upgrade fix
- runtests: fix the disabling of the memory tracking
- runtests: quote commands to support paths with spaces
- scache: add magic checks
- smb: silence `-Warray-bounds` with gcc 13+
- smtp: TLS upgrade fix
- SPONSORS.md: clarify that we don't promise goods or services
- test1516: avoid failure due to spaces in path
- test2080: simplify, avoid the null byte
- tests: fix test 558, 1330 for MSVC, allow TrackMemory with MSVC in cmake
- tidy-up: make per-file `ARRAYSIZE` macros global as `CURL_ARRAYSIZE`
- tool_cfgable: sort struct fields by size, use bitfields for booleans
- tool_getparam: add "TLS required" flag for each such option
- tool_progress: fix percent output of large parallel transfers
- tool_ssls: switch to tool-specific get_line function
- verbose.md: mention how carriage-return might occur in headers
- vquic: make the "disable GSO" use infof, not failf
- vtls: fix multissl-init
- vtsl: eliminate 'data->state.ssl_scache'
- wakeup_write: make sure the eventfd write sends eight bytes
- wolfssl: silence compiler warning (MSVC 2019), simplify existing

## Fixed in 8.12.0 - February 5 2025

8.12.0
8.12.0
8.12.0 changes only

Changes:

- curl: add byte range support to --variable reading from file
- curl: make --etag-save acknowledge --create-dirs
- getinfo: fix CURLINFO_QUEUE_TIME_T and add 'time_queue' var
- getinfo: provide info which auth was used for HTTP and proxy
- hyper: drop support
- openssl: add support to use keys and certificates from PKCS#11 provider
- QUIC: 0RTT for gnutls via CURLSSLOPT_EARLYDATA
- vtls: feature ssls-export for SSL session im-/export

Bugfixes:

- altsvc: avoid integer overflow in expire calculation
- altsvc: return error on dot-only name
- android: add CI jobs, buildinfo, cmake docs, disable `CURL_USE_PKGCONFIG` by default
- asyn-ares: acknowledge CURLOPT_DNS_SERVERS set to NULL
- asyn-ares: fix memory leak
- asyn-ares: initial HTTPS resolve support
- asyn-thread: use c-ares to resolve HTTPS RR
- asyn-thread: avoid closing eventfd twice
- autotools: add support for mingw UWP builds
- autotools: silence gcc warnings in libtool code
- binmode: convert to macro and use it from tests
- build: delete `-Wsign-conversion` related FIXMEs
- build: drop `-Winline` picky warning
- build: drop `tool_hugehelp.c.cvs`, tidy up macros, drop `buildconf.bat`
- build: drop unused feature macros, update exception list
- build: fix `-Wtrampolines` picky warning for gcc 4.x versions
- build: fix compiling with GCC 4.x versions
- build: fix the tidy targets for autotools
- build: fix unsigned `time_t` detection for cmake, MS-DOS, AmigaOS
- build: replace configure check with PP condition (Android <21)
- build: stop detecting `sched_yield()` on Windows
- c-ares: fix/tidy-up macro initializations, avoid a deprecated function
- cd2nroff: do not insist on quoted <> within backticks
- cd2nroff: support "none" as a TLS backend
- cf-https-connect: look into httpsrr alpns when available
- cf-socket: error if address can't be copied
- cfilters: kill connection filter events attach+detach
- checksrc.bat: remove explicit SNPRINTF bypass
- checksrc: ban use of sscanf()
- checksrc: check for return with parens around a value/name
- checksrc: exclude generated bundle files to avoid race condition
- checksrc: fix the return() checker
- checksrc: introduce 'banfunc' to ban specific functions
- cmake/Find: add `iphlpapi` for c-ares, omit syslibs if dep not found
- cmake/FindLDAP: avoid empty 'Requires' item when omitting `pkg-config` module
- cmake/FindLDAP: avoid framework locations for libs too (Apple)
- cmake/FindLibpsl: protect against `pkg-config` "half-detection"
- cmake/FindLibssh: sync header comment with other modules
- cmake/FindMbedTLS: drop lib duplicates early
- cmake: add `librtmp` Find module
- cmake: add LDAP Find module
- cmake: add native `pkg-config` detection for remaining Find modules
- cmake: allow `CURL_LTO` regardless of `CURL_BUILD_TYPE`, enable in CI
- cmake: clang-cl improvements
- cmake: delete accidental debug message
- cmake: deprecate winbuild, add migration guide from legacy build methods
- cmake: detect mingw-w64 version, pre-fill `HAVE_STRTOK_R`
- cmake: do not store `MINGW64_VERSION` in cache
- cmake: drop `CURL_USE_PKGCONFIG` from `curl-config.cmake.in`
- cmake: drop `fseeko()` pre-fill and check for Windows
- cmake: drop duplicate Windows cache value
- cmake: drop redundant FOUND checks (libgsasl, libssh, libuv)
- cmake: drop redundant opening/closing `.*` from `MATCH` expressions
- cmake: drop unused `HAVE_SYS_XATTR_H` detection
- cmake: drop VS2010 "Dialog Hell" workaround added in 2013
- cmake: extend zlib's `AUTO` option to brotli, zstd and enable if found
- cmake: fix `net/in.h` detection for MS-DOS
- cmake: improve `curl_dumpvars()` and move to `Utilities.cmake`
- cmake: make libpsl required by default
- cmake: make system libraries `dl`, `m`, `pthread` customizable
- cmake: move `pkg-config` names to Find modules
- cmake: move GSS init before feature detections
- cmake: move mingw UWP workaround from GHA to `CMakeLists.txt`
- cmake: namespace functions and macros
- cmake: optimize out 4 picky warning option detections with gcc
- cmake: pick a better IPv6 feature flag when assembling the feature list
- cmake: pre-fill `HAVE_STDATOMIC_H`, `HAVE_ATOMIC` for mingw-w64
- cmake: pre-fill `HAVE_STDINT_H` on Windows
- cmake: prefer dash-style MSVC options
- cmake: publish/check supported protocols/features via `CURLConfig.cmake`
- cmake: replace `unset(VAR)` with `set(VAR "")` for init
- cmake: sync OpenSSL QUIC fork detection with autotools
- cmake: use `CMAKE_REQUIRED_LINK_DIRECTORIES`
- cmake: use `STREQUAL` to detect Linux
- cmake: warn for OpenSSL versions missing TLS 1.3 support
- cmdline-opts/version.md: describe multissl, mention SSLS-EXPORT
- completion.pl: add completion for paths after @ for fish
- config-mac: drop `MACOS_SSL_SUPPORT` macro
- config: drop unused code and variables
- configure: do not inline 'dnl' comments
- configure: drop unused detections and macros
- configure: streamline Windows large file feature check
- configure: UWP and Android follow-up fixes
- conncache: count shutdowns against host and max limits
- conncache: result_cb comment removed from function docs
- content_encoding: drop support for zlib before 1.2.0.4
- content_encoding: namespace GZIP flag constants
- content_encoding: put the decomp buffers into the writer structs
- content_encoding: support use of custom libzstd memory functions
- cookie: cap expire times to 400 days
- cookie: fix crash in netscape cookie parsing
- cookie: parse only the exact expire date
- curl-functions.m4: fix indentation in `CURL_SIZEOF()`
- curl: return error if etag options are used with multiple URLs
- curl_multi_fdset: include the shutdown connections in the set
- curl_multi_waitfds.md: tidy up the example
- curl_multibyte: support Windows paths longer than MAX_PATH
- curl_setup: fix missing `ADDRESS_FAMILY` type in rare build cases
- curl_sha512_256: rename symbols to the curl namespace
- curl_url_set.md: adjust the added-in to 7.62.0
- curl_ws_recv.md: fix typo
- CURLOPT_CONNECT_ONLY.md: an easy handle with this option set cannot be reused
- CURLOPT_PROXY.md: clarify the credential support in proxy URLs
- CURLOPT_RESOLVE.md: fix wording
- CURLOPT_SEEKFUNCTION.md: used for FTP, HTTP and SFTP (only)
- docs/BUGS.md: remove leading space from a link
- docs/cmdline-opts/_ENVIRONMENT.md: minor language fix
- docs/cmdline-opts/location.md: fix typos for location flag
- docs/HTTP-COOKIES.md: link to more information
- docs/HTTPSRR.md: initial HTTPS RR documentation
- docs/libcurl/opts: clarify the return values
- docs/libcurl: return value overhall
- docs/TLS-SESSIONS: fix typo, the->they
- docs: document the behavior of -- in the curl command line
- docs: use lowercase curl and libcurl
- doh: cleanups and extended HTTPS RR code
- doh: send HTTPS RR requests for all HTTP(S) transfers
- easy: allow connect-only handle reuse with easy_perform
- easy: make curl_easy_perform() return error if connection still there
- easy_lock: use Sleep(1) for thread yield on old Windows
- ECH: update APIs to those agreed with OpenSSL maintainers
- examples/block-ip: drop redundant `memory.h` include
- examples/block-ip: show how to block IP addresses
- examples/complicated: fix warnings, bump deprecated callback, tidy up
- examples/synctime.c: remove references to dead URLs and functionality
- examples: make them compile with compatibility functions disabled (Windows)
- examples: use return according to code style
- file: drop `OPEN_NEEDS_ARG3` option
- file: fix Android compiler warning
- gitignore: add generated unity sources for lib and src
- GnuTLS: fix 'time_appconnect' for early data
- hash: add asserts in hash_element_dtor()
- HTTP/2: strip TE request header
- http2: fix data_pending check
- http2: fix value stored to 'result' is never read
- http: fix build with `CURL_DISABLE_COOKIES`
- http: ignore invalid Retry-After times
- http_aws_sigv4: Fix invalid compare function handling zero-length pairs
- https-connect: start next immediately on failure
- INFRASTRUCTURE.md: project infra
- INSTALL-CMAKE.md: fix punctuation
- INSTALL.md: add CMake examples for macOS and iOS
- INSTALL.md: document VS2008 and mingw-w64
- INTERNALS.md: sync wolfSSL version requirement with source code
- lib517: extend the getdate test with quotes and leading "junk"
- lib: clarify 'conn->httpversion'
- lib: redirect handling by protocol handler
- lib: remove `__EMX__` guards
- lib: replace `inline` redefine with `CURL_INLINE` macro
- lib: suppress deprecation warnings in apple builds
- lib: TLS session ticket caching reworked
- libcurl/opts: do not save files in dirs where attackers have access
- Makefile.dist: delete
- Makefile.mk: drop in favor of autotools and cmake (MS-DOS, AmigaOS3)
- mbedtls: fix handling of blocked sends
- mbedtls: PSA can be used independently of TLS 1.3 (avoid runtime errors)
- mime: explicitly rewind subparts at attachment time.
- mprintf: fix integer handling in float precision
- mprintf: terminate snprintf output on windows
- msvc: add missing push/pop for warning pragmas
- msvc: assume `_INTEGRAL_MAX_BITS >= 64`
- msvc: drop checks for ancient versions
- msvc: fix building with `HAVE_INET_NTOP` and MSVC <=1900
- msvc: require VS2005 for large file support
- msvc: tidy up `_CRT_*_NO_DEPRECATE` definitions
- multi: fix curl_multi_waitfds reporting of fd_count
- multi: fix return code for an already-removed easy handle
- multihandle: add an ssl_scache here
- multissl: auto-enable `OPENSSL_COEXIST` for wolfSSL + OpenSSL
- multissl: make openssl + wolfssl builds work
- netrc: 'default' with no credentials is not a match
- netrc: fix password-only entries
- netrc: restore _netrc fallback logic
- ngtcp2: fix memory leak on connect failure
- ngtcp2: fix two cases of value stored never read
- openssl: define `HAVE_KEYLOG_CALLBACK` before use
- openssl: drop unused `HAVE_SSL_GET_SHUTDOWN` macro
- openssl: fix ECH logic
- osslq: use SSL_poll to determine writeability of QUIC streams
- projects/Windows: remove wolfSSL from legacy projects
- projects: fix `INSTALL-CMAKE.md` references
- pytest: remove 'repeat' parameter
- pytest: use httpd/apache2 directly, no apachectl
- RELEASE-PROCEDURE.md: mention how to publish security advisories
- runtests.pl: fix precedence issue
- scripts/mdlinkcheck: markdown link checker
- sectransp: free certificate on error
- select: avoid a NULL deref in cwfds_add_sock
- smb: fix compiler warning
- src: add `CURL_STRICMP()` macro, use `_stricmp()` on Windows
- src: drop support for `CURL_TESTDIR` debug env
- src: omit hugehelp and ca-embed from libcurltool
- ssl session cache: change cache dimensions
- strparse: string parsing helper functions
- symbols-in-versions: update version for LIBCURL_VERSION and LIBCURL_VERSION_NUM
- system.h: add 64-bit curl_off_t definitions for NonStop
- system.h: drop compilers lacking 64-bit integer type (Windows/MS-DOS)
- system.h: drop duplicate and no-op code
- system.h: fix indentation
- telnet: handle single-byte input option
- test1960: don't close the socket too early
- test483: require cookie support
- tests/http/clients: use proper sleep() call on NonStop
- tests: change the behavior of swsbounce
- tests: stop promoting perl warnings to fatal errors
- TheArtOfHttpScripting.md: rewrite double 'that'
- tidy-up: `curl_setup.h`, `curl_setup_once.h`, `config-win32ce.h`
- tidy-up: drop parenthesis around `return` expression
- tidy-up: drop parenthesis around `return` values
- tidy-up: extend `CURL_O_BINARY` to lib and tests
- TLS: check connection for SSL use, not handler
- tool_formparse.c: make curlx_uztoso a static in here
- tool_formparse: accept digits in --form type= strings
- tool_getparam: ECH param parsing refix
- tool_getparam: fail --hostpubsha256 if libssh2 is not used
- tool_getparam: fix "Ignored Return Value"
- tool_getparam: fix memory leak on error in parse_ech
- tool_getparam: fix the ECH parser
- tool_operate: make --etag-compare always accept a non-existing file
- transfer: fix CURLOPT_CURLU override logic
- urlapi: fix redirect to a new fragment or query (only)
- urldata: tweak the UserDefined struct
- variable.md: mention --expand-variable for variables to variables
- variable.md: show function use with examples
- version: fix the IDN feature for winidn and appleidn
- vquic: fix 4th function call argument is an uninitialized value
- vquic: make vquic_send_packets not return without setting psent
- vtls: fix default SSL backend as a fallback
- vtls: only remember the expiry timestamp in session cache
- vtls: remove 'detach/attach' functions from TLS handler struct
- vtls: remove unused 'check_cxn' from TLS handler struct
- vtls: replace "none"-functions with NULL pointers
- VULN-DISCLOSURE-POLICY.md: mention the not setting CVSS
- VULN-DISCLOSURE-POLICY: on legacy dependencies
- websocket: fix message send corruption
- windows: drop dupe macros, detect `CURL_OS` for WinCE ARM, indentation
- windows: drop redundant `USE_WIN32_SMALL_FILES` macro
- windows: drop two missed `buildconf.bat` references
- windows: merge `config-win32ce.h` into `config-win32.h`
- ws-docs: extend WebSocket documentation
- ws-docs: remove the outdated texts saying ws support is experimental
- ws: reject frames with unknown reserved bits set
- x509asn1: add parse recursion limit

## Fixed in 8.11.1 - December 11 2024

8.11.1
8.11.1
8.11.1 changes only

Bugfixes:

- build: fix ECH to always enable HTTPS RR
- build: fix MSVC UWP builds
- build: omit certain deps from `libcurl.pc` unless found via `pkg-config`
- build: use `_fseeki64()` on Windows, drop detections
- cmake: do not echo most inherited `LDFLAGS` to config files
- cmake: drop cmake args list from `buildinfo.txt`
- cmake: include `wolfssl/options.h` first
- cmake: remove legacy unused IMMEDIATE keyword
- cmake: restore cmake args list in `buildinfo.txt`
- cmake: set `CURL_STATICLIB` for static lib when `SHARE_LIB_OBJECT=OFF`
- cmake: sync GSS config code with other deps
- cmake: typo in comment
- cmake: work around `ios.toolchain.cmake` breaking feature-detections
- cmakelint: fix to check root `CMakeLists.txt`
- cmdline/ech.md: formatting cleanups
- configure: add FIXMEs for disabled pkg-config references
- configure: do not echo most inherited `LDFLAGS` to config files
- configure: replace `$#` shell syntax
- cookie: treat cookie name case sensitively
- curl-rustls.m4: keep existing `CPPFLAGS`/`LDFLAGS` when detected
- curl.h: mark two error codes as obsolete
- curl: --continue-at is mutually exclusive with --no-clobber
- curl: --continue-at is mutually exclusive with --range
- curl: --continue-at is mutually exclusive with --remove-on-error
- curl: --test-duphandle in debug builds runs "duphandled"
- curl: do more command line parsing in sub functions
- curl: rename struct var to fix AIX build
- curl: use realtime in trace timestamps
- curl_multi_socket_all.md: soften the deprecation warning
- CURLOPT_PREREQFUNCTION.md: add result code on failure
- digest: produce a shorter cnonce in Digest headers
- DISTROS: update Alt Linux links
- dmaketgz: use --no-cache when building docker image
- docs: bring back ALTSVC.md and HSTS.md
- docs: document default `User-Agent`
- docs: suggest --ssl-reqd instead of --ftp-ssl
- duphandle: also init netrc
- ECH: enable support for the AWS-LC backend
- hostip: don't use the resolver for FQDN localhost
- http_negotiate: allow for a one byte larger channel binding buffer
- http_proxy: move dynhds_add_custom here from http.c
- KNOWN_BUGS: setting a disabled option should return CURLE_NOT_BUILT_IN
- krb5: fix socket/sockindex confusion, MSVC compiler warnings
- lib: fixes for wolfSSL OPENSSL_COEXIST
- libssh: use libssh sftp_aio to upload file
- libssh: when using IPv6 numerical address, add brackets
- macos: disable gcc `availability` workaround as needed
- mbedtls: call psa_crypt_init() in global init
- mime: fix reader stall on small read lengths
- mk-ca-bundle: remove CKA_NSS_SERVER_DISTRUST_AFTER conditions
- mprintf: fix the integer overflow checks
- multi: add clarifying comment for wakeup_write()
- multi: fix callback for `CURLMOPT_TIMERFUNCTION` not being called again when...
- netrc: address several netrc parser flaws
- netrc: support large file, longer lines, longer tokens
- nghttp2: use custom memory functions
- OpenSSL: improvde error message on expired certificate
- openssl: remove three "Useless Assignments"
- openssl: stop using SSL_CTX_ function prefix for our functions
- os400: Fix IBMi builds
- os400: Fix IBMi EBCDIC conversion of arguments
- pytest: add test for use of CURLMOPT_MAX_HOST_CONNECTIONS
- rtsp: check EOS in the RTSP receive and return an error code
- schannel: remove TLS 1.3 ciphersuite-list support
- setopt: fix CURLOPT_HTTP_CONTENT_DECODING
- setopt: fix missing options for builds without HTTP & MQTT
- show-headers.md: clarify the headers are saved with the data
- socket: handle binding to "host!<ip>"
- socketpair: fix enabling `USE_EVENTFD`
- strtok: use namespaced `strtok_r` macro instead of redefining it
- tests: add the ending time stamp in testcurl.pl
- tests: re-enable 2086, and 472, 1299, 1613 for Windows
- TODO: consider OCSP stapling by default
- tool_formparse: remove use of sscanf()
- tool_getparam: parse --localport without using sscanf
- tool_getpass: fix UWP `-Wnull-dereference`
- tool_getpass: replace `getch()` call with `_getch()` on Windows
- tool_urlglob: parse character globbing range without sscanf
- vtls: fix compile warning when ALPN is not available

## Fixed in 8.11.0 - November 6 2024

8.11.0
8.11.0
8.11.0 changes only

Changes:

- curl: --create-dirs works for --dump-header as well
- gtls: Add P12 format support
- ipfs: add options to disable
- TLS: TLSv1.3 earlydata support for curl
- WebSockets: make support official (non-experimental)

Bugfixes:

- alt-svc: honor data->state.httpwant
- altsvc: avoid using local buffer and memcpy
- asyn-ares: remove typecast, fix expire
- autotools: add support for 'unity' builds, enable in CI
- bearssl: avoid strpcy() when generating TLS version log message
- bearssl: improved session handling, test exceptions
- bufq: unwrite fix
- build: add `ldap` to `libcurl.pc` `Requires:`
- build: add pytest targets
- build: clarify CA embed is for curl tool, mark default, improve summary
- build: detect and use `_setmode()` with Cygwin/MSYS, also use on Windows
- build: disable warning `-Wunreachable-code-break`
- build: fix clang-cl builds, add CI job
- build: fix cross-compile check for poll with bionic
- build: fix possible `-Wformat-overflow` in lib557
- build: limit arc4random detection to no-SSL configs
- build: show if CA bundle to embed was found
- build: tidy up and improve versioned-symbols options
- build: tidy up deprecation suppression, enable warnings for clang
- certs: add missing `-CAcreateserial` option for LibreSSL
- checksrc: add check for spaces around logical AND operators
- checksrc: Added checks for colon operator in ternary expressions
- checksrc: check for spaces around '?', '>' and '<'
- ci: dump `curl_config.h` to log in all jobs
- CI: run with standard mod_http2
- cmake, Makefile.mk: use -isystem for headers, silence BearSSL issues
- cmake/FindCares: fix version detection for c-ares 1.34.1
- cmake/FindNGTCP2: use library path as hint for finding crypto module
- cmake: add missed variable to comment
- cmake: add native `pkg-config` detection for mbedTLS, MSH3, Quiche, Rustls, wolfSSL
- cmake: allow building tests in unity mode
- cmake: apply `WIN32_LEAN_AND_MEAN` to all feature checks
- cmake: avoid setting `BUILD_TESTING`
- cmake: clear package version after `pkg-config` detection
- cmake: delete unused NEED_LBER_H, HAVE_LDAP_H
- cmake: detect `HAVE_NETINET_IN6_H`, `HAVE_CLOSESOCKET_CAMEL`, `HAVE_PROTO_BSDSOCKET_H`
- cmake: detect GNU GSS
- cmake: disable default OpenSSL if BearSSL, GnuTLS or Rustls is enabled
- cmake: do not propagate unused `HAVE_GSSAPI_GSSAPI_KRB5_H` to C
- cmake: document `-D` and env build options
- cmake: drop obsolete items from `TODO` and `INSTALL-CMAKE`
- cmake: drop redundant assignments
- cmake: drop redundant zlib var, rename function (internals)
- cmake: expand CURL_USE_PKGCONFIG to non-cross MINGW
- cmake: fix broken dependency chain for cmdline-opts, tidy-ups
- cmake: fix compile warnings for clang-cl
- cmake: fix missing spacing in log message
- cmake: limit `CURL_STATIC_CRT` to MSVC
- cmake: make `test-ci` target skip building dependencies
- cmake: mark as advanced some internal Find* variables
- cmake: re-add `generate-curl.1` dependency for `src` in any case
- cmake: rename LDAP dependency config variables to match Find modules
- cmake: replace `check_include_file_concat()` for LDAP and GSS detection
- cmake: replace `CURL_*_DIR` with `{PROJECT,CMAKE_CURRENT}_*_DIR`
- cmake: require quictls (or fork) when using msh3 on non-Windows
- cmake: separate target for examples, optimize CI, fix fallouts
- cmake: set version for `project()` and add CPack support
- cmake: stop adding dependency headers to global `CMAKE_REQUIRED_INCLUDES`
- cmake: sync torture test parallelism with autotools
- cmake: tidy up `CURL_DISABLE_FORM_API` initialization
- cmake: tidy up and shorten symbol hiding initialization
- cmake: tidy up line order
- cmake: tidy up picky warning initialization
- cmake: tidy-ups and rebase fixups
- cmake: tweaks around debug mode and hidden symbols
- cmake: untangle feature detection interdependencies
- cmake: use `list(APPEND)` on `CURL_INCLUDES`
- cmake: use OpenSSL for LDAP detection only if available
- cmake: use the `BSD` variable
- config: rename the OS define to CURL_OS to reduce collision risk
- configure: add GSS to `libcurl.pc` `Depends:`
- configure: catch Apple in more target triplets
- configure: drop duplicate feature checks for `poll()`, `if_nametoindex()`
- configure: drop unused bare `socket.h` detection
- configure: improve help string for some options
- conncache: find bundle again in case it is removed
- conncache: more efficient implementation of cpool_remove_bundle
- cookie: overhaul and cleanup
- curl-rustls.m4: set linker flags to allow rustls build on macos
- curl.h: remove the struct pointer for CURL/CURLSH/CURLM typedefs
- curl: add build options for safe/no CA bundle search (Windows)
- curl: detect ECH support dynamically, not at build time
- curl_addrinfo: support operating systems with only getaddrinfo(3)
- curl_multi_perform.md: fix typo
- curl_trc: fix build with verbose messages disabled
- curl_url_set.md: document HOST handling when URL is parsed
- curl_ws_recv.md: the 'meta' pointer is only returned on success
- curl_ws_recv: return recv 0 and point meta to NULL on all errors
- CURLMOPT_PIPELINING.md: clarify that CURLPIPE_NOTHING is not default
- CURLOPT_APPEND.md: goes for SFTP as well
- CURLOPT_HEADERFUNCTION.md: do not modify the passed in buffer
- DISABLED: disable test 1060 with hyper
- DISTROS: avoid use of `very`;
- Dockerfile: update Docker digest to d830561
- docs/cmdline-opts: GnuTLS supports PKCS#11 URI in --cert option
- docs: clarify FTP over HTTP proxy functionality somewhat
- docs: fix a typo in some cipher options
- ech: spelling, whitespace, say `--ech` default config
- ftp: fix 0-length last write on upload from stdin
- ftp: move listen handling to socket filter
- GHA: optimize test prereq steps
- gnutls: use session cache for QUIC
- hsts: avoid the local buffer and memcpy on lookup
- hsts: improve subdomain handling
- hsts: support "implied LWS" properly around max-age
- http2: auto reset stream on server eos
- http_aws_sigv4: avoid local buffer and strcpy
- INSTALL-CMAKE.md: mention focus on shared libraries
- INSTALL-CMAKE: fix punctuation and a typo
- INSTALL.md: fix a typo that slipped in to RISC OS
- json.md: cli-option `--json` is an alias of `--data-binary`
- lib, src, tests: added space around ternary expressions
- lib/cw-out: initialize 'flush_all' directly
- lib/src: white space edits to comply better with code style
- lib: avoid assigning 'result' temporarily
- lib: fix disabled-verbose-strings + enable-debug build warnings
- lib: fix unity builds with BearSSL, MSH3, Quiche, OmniOS
- lib: move curl_path.[ch] into vssh/
- lib: msnprintf tidy-ups
- lib: remove Curl_ prefix from static functions
- lib: remove function pointer typecasts for hmac/sha256/md5
- lib: use bool/TRUE/FALSE properly
- libcurl/opts: improve phrasing for connection cap related options
- libssh.c: handle EGAINS during proto-connect correctly
- libssh2: delete duplicate `break`
- libssh2: put the readdir buffers into struct
- libssh2: use the Curl_* memory functions to avoid memdebug
- libssh2: use the filename buffer when getting the homedir
- libtests: generate the lib1521 atomically
- mbedTLS: fix handling of TLSv1.3 sessions
- mbedtls: handle session as blobs
- mbedtls: remove failf() use from mbedtls_random
- mk-lib1521: fix the long return code check
- mprintf: do not ignore length modifiers of `%o`, `%x`, `%X`
- mprintf: treat `%o` as unsigned, add tests for `%o`, `%x`, `%X`
- mqtt: fix mqtt.md wording and add clearer explanation
- multi.c: make stronger check for paused transfer before asserting
- multi.c: warn/assert on stall only without timer
- multi: avoid reading whole struct pointer from pointer
- multi: convert Curl_follow to static multi_follow
- multi: make curl_multi_cleanup invalidate magic latter
- multi: make multi_handle_timeout use the connect timeout
- multi: split multi_runsingle into sub functions
- negotiate: conditional check around GSS & SSL specific code
- netrc: cache the netrc file in memory
- ngtcp2: do not loop on recv
- ngtcp2: set max window size to 10x of initial (128KB)
- openssl quic: populate x509 store before handshake
- openssl: convert a memcpy to dynbuf use
- openssl: extend the OpenSSL error messages
- openssl: improve retries on shutdown
- openssl: remove two strcpy() calls
- OS400: don't delete source files when building with debug
- packages/OS400/curlmain: remove the strncpy calls
- processhelp.pm: improve taskkill calls (Windows)
- pytest: fix run against multissl curl
- pytest: improve pytest_07_42a reliability
- pytest: include `buildinfo.txt` in the output
- pytest: include curl version string and python platform in log
- pytest: show curl features and protocols
- quic: use send/recvmmsg when available
- quic: use the session cache with wolfSSL as well
- request: on shutdown send, proceed normally on timeout
- runtests.md: suggest a value for -j for torture tests
- runtests: add comment for handle64 pathsep requirement
- runtests: drop unused code for old/classic-mingw support
- runtests: pass single backslashes with Windows Perl
- runtests: use deterministic sort for `TESTINFO` lines
- schannel: fix TLS cert verification by IP SAN
- schannel: ignore error on recv beyond close notify
- schannel: reclassify extra-verbose schannel_recv messages
- select: use poll() if existing, avoid poll() with no sockets
- sendf: add condition to max-filesize check
- server/mqttd: fix two memory leaks
- setopt: avoid superfluous length checks before strcmp()
- setopt: return error for bad input to CURLOPT_RTSP_REQUEST
- setopt_cptr: make overflow check only done when needed
- singleuse: make `git grep` faster, add Apple `nm` support
- smb: do not redefine `getpid` on Windows
- smb: replace use of strcpy() with snprintf()
- socks_gssapi: switch to dynbuf from buffer with strcpy
- source: avoid use of `very` in comments
- src/lib: remove redundant ternary operators
- src: guard for double declaration of `curl_ca_embed` in unity builds
- sws: fix unused static function with `TCP_NODELAY` undefined
- telnet: avoid two strcpy() by pointing to the strings instead
- test1035: convert hostname back to UTF-8 as should be
- test1515: add tracing and more debug info
- test1540: add debug logging
- test190: replace %FTPTIME2 with a fixed value
- test1915: add tracing and connect timeout
- test1915: remove wrong comment
- test2502: add libtest debug tracing
- test504: fix handling on pending connect
- testrun: explicitly set proper IP address for stunnel listen/connect
- tests/http: fix ubuntu GnuTLS CI failures
- tests/scorecard: allow remote server test
- tests/server/util.c: remove use of strncpy
- tests/valgrind.pm: fix warnings with no valgrind report to show
- tests/valgrind.supp: remove a travis suppression, add a Debian
- tests: add and use `%PERL` variable to refer to the Perl binary
- tests: add codeset-utf8 as a feature
- tests: add file: tests with existing files
- tests: allow pytests to run in out-of-tree builds
- tests: capture stdin to get the vsftpd version number
- tests: change Python code style to pass ruff checks
- tests: check http/2 and http/3 server responsiveness
- tests: delete duplicate macro check
- tests: enable additional ruff Python lint options
- tests: fix `%POSIX_PWD` on native Windows Perl
- tests: fix callback signatures to please UndefinedBehaviorSanitizer
- tests: Fix FILEFORMAT <file name=""> directive
- tests: fix keyword for test1411
- tests: fix shell quoting on native Windows Perl
- tests: fix some Python typing issues
- tests: fixup `checkcmd` `PATH` on non-unixy platforms
- tests: improve mqtt server handling
- tests: introduce %CLIENT6IP-NB
- tests: let openssl generate random cert serials
- tests: libtests and unit tests need explicit #include memdebug
- tests: make precheck for HTTP on 127.0.0.1 into a feature
- tests: Only log warnings or worse by default in smbserver
- tests: postcheck is now in verify
- tests: remove all valgrind disable instructions
- tests: remove debug requirement on 38 tests
- tests: remove the %FTPTIME3 variable
- tests: replace `%PWD` with `%FILE_PWD` for `file://`
- tests: replace `%PWD` with `%SSH_PWD` in SCP/SFTP tests
- tests: replace hard-coded `/dev/null` with variable
- tests: simplify `pathhelp.pm`, avoid using external tools
- tests: speed up builds with single-binary test bundles
- tests: testrunner fairness
- tests: testrunner reliability improvements
- tests: use '-4' where needed
- tests: use a set for several of the curl_props
- tftp: avoid two memcpy/strcpy
- tidy-up: rename CURL_WINDOWS_APP to CURL_WINDOWS_UWP
- tls: avoid abusing CURLE_SSL_ENGINE_INITFAILED
- tool: support --show-headers AND --remote-header-name
- tool_doswin: simplify; remove unused options and strncpy calls
- tool_getparam: drop unused time() call
- tool_getparam: replace two uses of strncpy(), ban strncpy
- tool_operate: make --skip-existing work for --parallel
- tool_operate: reuse the schannel backend check
- tool_xattr: create the user.creator xattr attribute
- unit1307: tidy up Apple OS detection
- unit1660: fix unreachable code warning in no-SSL builds
- url: connection reuse on h3 connections
- url: use same credentials on redirect
- urlapi: drop unused header
- urlapi: normalize the IPv6 address
- version: minor cleanups
- version: say quictls in MSH3 builds
- vquic: fix compiler warning with gcc + MUSL
- vquic: recv_mmsg, use fewer, but larger buffers
- vtls: convert Curl_pin_peer_pubkey to use dynbuf
- vtls: convert pubkey_pem_to_der to use dynbuf
- warnless: remove curlx_sktosi and curlx_sitosk
- winbuild/README: consolidate command prompt section
- winbuild/README: document how to clean a build
- winbuild: add initial wolfSSL support
- winbuild: drop `gen_resp_file.bat`
- wolfssl: convert malloc + memcpys to dynbuf for cipher string
- wolfSSL: fix handling of TLSv1.3 sessions
- wolfssl: no more use of the OpenSSL API
- wolfssl: use old version API without openssl extra

## Fixed in 8.10.1 - September 18 2024

8.10.1
8.10.1
8.10.1 changes only

Bugfixes:

- autotools: fix `--with-ca-embed` build rule
- cmake: ensure `CURL_USE_OPENSSL`/`USE_OPENSSL_QUIC` are set in sync
- cmake: fix MSH3 to appear on the feature list
- connect: store connection info when really done
- CURLMOPT_TIMERFUNCTION.md: emphasize that only a single timer should run
- FTP: partly revert eeb7c1280742f5c8fa48a4340fc1e1a1a2c7075a
- http2: when uploading data from stdin, fix eos forwarding
- http: make max-filesize check not count ignored bodies
- lib: fix AF_INET6 use outside of USE_IPV6
- libcurl-docs: CURLINFO_LOCAL_* work for QUIC as well as TCP
- multi: check that the multi handle is valid in curl_multi_assign
- QUIC: on connect, keep on trying on draining server
- request: correctly reset the eos_sent flag
- runtests: accept 'quictls' as OpenSSL compatible
- rustls: fixed minor logic bug in default cipher selection
- rustls: rustls-ffi 0.14.0 update
- rustls: support strong CSRNG data
- setopt: remove superfluous use of ternary expressions
- singleuse: drop `Curl_memrchr()` for no-HTTP builds
- test537: cap the rlimit max this test runs
- tests: tweak lock file handling and timers
- tool_cb_wrt: use "curl_response" if no filename in URL
- transfer: fix sendrecv() without interim poll
- vtls: fix `Curl_ssl_conn_config_match` doc param

## Fixed in 8.10.0 - September 11 2024

8.10.0
8.10.0
8.10.0 changes only

Changes:

- autotools: add `--enable-windows-unicode` option
- curl: --help [option] displays documentation for given cmdline option
- curl: add --skip-existing
- curl: for -O, use "default" as filename when the URL has none
- curl: make --rate accept "number of units"
- curl: make --show-headers the same as --include
- curl: support --dump-header % to direct to stderr
- curl: support embedding a CA bundle and --dump-ca-embed
- curl: support repeated use of the verbose option; -vv etc
- curl: use libuv for parallel transfers with --test-event
- getinfo: add CURLINFO_POSTTRANSFER_TIME_T
- mbedtls: add CURLOPT_TLS13_CIPHERS support
- rustls: add support for setting TLS version and ciphers
- vtls: stop offering alpn http/1.1 for http2-prior-knowledge
- wolfssl: add CURLOPT_TLS13_CIPHERS support
- wolfssl: add support for ssl cert blob / ssl key blob options

Bugfixes:

- asyn-thread: stop using GetAddrInfoExW on Windows
- autotools: fix MS-DOS builds
- autotools: fix typo in tests/data target
- aws_sigv4: fix canon order for headers with same prefix
- bearssl: fix setting tls version
- bearssl: improve shutdown handling
- BINDINGS: add zig binding
- build: add `iphlpapi` lib for libssh on Windows
- build: add `poll()` detection for cross-builds
- build: add options to disable SHA-512/256 hash algo
- build: check OS-native IDN first, then libidn2
- build: delete unused `REQUIRE_LIB_DEPS`
- build: drop unused `NROFF` reference
- build: drop unused feature-detection code for Apple `poll()`
- build: generate `buildinfo.txt` for test logs
- build: improve compiler version detection portability
- build: make `CURL_FORMAT_CURL_OFF_T[U]` work with mingw-w64 <=7.0.0
- build: silence C4232 MSVC warnings in vcpkg ngtcp2 builds
- build: use -Wno-format-overflow
- buildconf.bat: fix tool_hugehelp.c generation
- cf-socket: fix pollset for listening
- cf-socket: prevent KEEPALIVE_FACTOR being set to 1000 for Windows
- cfilters: send flush
- CHANGES: rename to CHANGES.md, no longer generated
- CI: enable parallel testing in CI builds
- ci: Update actions/upload-artifact digest to 89ef406
- cmake: `Libs.private` improvements
- cmake: add `CURL_USE_PKGCONFIG` option
- cmake: add Linux CI job, fix pytest with cmake
- cmake: add math library when using wolfssl and ngtcp2
- cmake: add missing `pkg-config` hints to Find modules
- cmake: add missing version detection to Find modules
- cmake: add rustls
- cmake: add support for versioned symbols option
- cmake: add wolfSSH support
- cmake: allow `pkg-config` in more envs
- cmake: cleanup header paths
- cmake: default `CURL_DISABLE_LDAPS` to the value of `CURL_DISABLE_LDAP`
- cmake: delete MSVC warning suppression for tests/server
- cmake: detect `nghttp2` via `pkg-config`, enable by default
- cmake: detect and show VCPKG in platform flags
- cmake: distcheck for files in CMake subdir
- cmake: drop custom `CMakeOutput.log`/`CMakeError.log` logs
- cmake: drop libssh CONFIG-style detection
- cmake: drop no-op `tests/data/CMakeLists.txt`
- cmake: drop reference to undefined variable
- cmake: drop unused `HAVE_IDNA_STRERROR`
- cmake: drop unused internal variable
- cmake: exclude tests/http/clients builds by default
- cmake: fix `GSS_VERSION` for Heimdal found via pkg-config
- cmake: fix `pkg-config`-based detection in `FindGSS.cmake`
- cmake: fix and tidy up c-ares builds, enable in more CI jobs
- cmake: fix find rustls
- cmake: fixup linking libgsasl when detected via CMake-native
- cmake: honor custom `CMAKE_UNITY_BUILD_BATCH_SIZE`
- cmake: limit `pkg-config` to UNIX and MSVC+vcpkg by default
- cmake: limit libidn2 `pkg-config` detection to `UNIX`
- cmake: migrate dependency detections to Find modules
- cmake: more small tidy-ups and fixes
- cmake: rename wolfSSL and zstd config variables to uppercase
- cmake: respect cflags/libdirs of native pkg-config detections
- cmake: show CMake platform/compiler flags
- cmake: show warning if libpsl is not found
- cmake: sync code between test/example targets
- cmake: sync up formatting in Find modules
- cmake: TLS 1.3 warning only for bearssl and sectranp
- cmake: update `curl-config.cmake.in` template var list
- cmake: update list of "advanced" variables
- cmake: use numeric comparison for `HAVE_WIN32_WINNT`
- cmdline-opts: language fix for expect100-timeout.md and max-time.md
- configure: delete unused `CURL_DEFINE_UNQUOTED` function
- configure: delete unused `HAVE_OPENSSL3` macro
- configure: delete unused `m4/xc-translit.m4`
- configure: detect AppleIDN
- configure: fail if PSL is not disabled but not found
- configure: fix WinIDN builds targeting old Windows
- configure: remove USE_EXPLICIT_LIB_DEPS
- configure: replace nonportable grep -o with awk
- connect: always prefer ipv6 in IP eyeballing
- connect: limit update IP info
- cookie.md: try to articulate the two different uses this option has
- curl: allow 500MB data URL encode strings
- curl: find curlrc in XDG_CONFIG_HOME without leading dot
- curl: fix --proxy-pinnedpubkey
- curl: fix the -w urle.* variables
- curl: make the progress bar detect terminal width changes
- curl: warn on unsupported SSL options
- Curl_rand_bytes to control env override
- curl_sha512_256: fix symbol collisions with nettle library
- CURLMOPT_SOCKETFUNCTION.md: expand on the easy argument
- CURLOPT_XFERINFOFUNCTION: clarify the callback return codes
- dist: add missing `docs/examples/CMakeLists.txt`
- dist: add missing `FindNettle.cmake`
- dist: add missing `lib/optiontable.pl`
- dist: add missing `test_*.py` scripts
- dist: drop buildconf
- dist: fix reproducible build from release tarball
- dmaketgz: only run 'make distclean' if Makefile exists
- docs/SSLCERTS: rewrite
- docs: add description of effect of --location-trusted on cookie
- docs: document the (weak) random value situation in rustls builds
- docs: fix some examples in man pages
- docs: improve cipher options documentation
- docs: mention "@-" in more places
- docs: remove ALTSVC.md, HSTS.md, HTTP2.md and PARALLEL-TRANSFERS.md
- docs: update CIPHERS.md
- doh-url.md: point out DOH server IP pinning
- doh: remove redundant checks
- easy: fix curl_easy_upkeep for shared connection caches
- escape: allow curl_easy_escape to generate 3*input length output
- FEATURES.md: fix typo
- ftp: always offer line end conversions
- ftp: flush pingpong before response
- getinfo: return zero for unsupported options (when disabled)
- GHA/windows: enable MultiSSL in an MSVC job
- GHA: scan git repository and detect unvetted binary files
- gnutls/wolfssl: improve error message when certificate fails
- gnutls: send all data
- gtls: fix OCSP stapling management
- haproxy: send though next filter
- hash: provide asserts to verify API use
- http/2: simplify eos/blocked handling
- http2+h3 filters: fix ctx init
- http2: fix GOAWAY message sent to server
- http2: improve rate limiting of downloads
- http2: improved upload eos handling
- http3.md: mention how the fallback can be h1 or h2
- hyper: call Curl_req_set_upload_done()
- idn: more strictly check AppleIDN errors
- idn: support non-UTF-8 input under AppleIDN
- INSTALL.md: MultiSSL and QUIC are mutually exclusive
- KNOWN_BUGS: "special characters" in URL works with aws-sigv4
- krb5: add Linux/macOS CI tests, fix cmake GSS detection
- krb5: fix `-Wcast-align`
- lib: add eos flag to send methods
- lib: avoid macro collisions between wolfSSL and GnuTLS headers
- lib: convert some debugf()s into traces
- lib: delete stray undefs for `vsnprintf`, `vsprintf`
- lib: fix AIX build issues
- lib: fix building with wolfSSL without DES support
- lib: make SSPI global symbols use Curl_ prefix
- lib: prefer `CURL_SHA256_DIGEST_LENGTH` over the unprefixed name
- lib: remove the final strncpy() calls
- lib: remove use of RANDOM_FILE
- libcurl.def: move from / into lib
- libcurl.pc: add `Cflags.private`
- libcurl.pc: add reference to `libgsasl`
- libcurl/docs: expand on redirect following and secrets to other hosts
- llist: remove direct struct accesses, use only functions
- Makefile.dist: fix `ca-firefox` target
- Makefile.mk: fixup enabling libidn2
- Makefile: remove 'scripts' duplicate from DIST_SUBDIRS
- maketgz: accept option to include latest commit hash
- maketgz: fix RELEASE-TOOLS.md for daily tarballs
- maketgz: move from / into scripts
- managen: fix superfluous leading blank line in quoted sections
- managen: in man output, remove the leading space from examples
- managen: wordwrap long example lines in ASCII output
- manpages: ensure a maximum width for the text version
- max-filesize.md: mention zero disables the limit
- mbedtls: add more informative logging
- mbedtls: fix setting tls version
- mbedtls: no longer use MBEDTLS_SSL_VERIFY_OPTIONAL
- mime: avoid infinite loop in client reader
- mk-ca-bundle.pl: include a link to the caextract webpage
- multi: make the "general" list of easy handles a Curl_llist
- multi: on socket callback error, remove socket hash entry nonetheless
- ngtcp2/osslq: remove NULL pointer dereferences
- ngtcp2: use NGHTTP3 prefix instead of NGTCP2 for errors in h3 callbacks
- openssl quic: fix memory leak
- openssl: certinfo errors now fail correctly
- openssl: fix the data race when sharing an SSL session between threads
- openssl: improve shutdown handling
- pingpong: drain the input buffer when reading responses
- POP3: fix multi-line responses
- pop3: use the protocol handler ->write_resp
- printf: fix mingw-w64 format checks
- progress: ratelimit/progress tweaks
- pytests: add tests for HEAD requests in all HTTP versions
- rand: only provide weak random when needed
- runtests: if DISABLED cannot be read, error out
- runtests: log ignored but passed tests
- runtests: remove "has_textaware"
- rustls: fix setting tls version
- rustls: make all tests pass
- schannel: avoid malloc for CAinfo_blob_digest
- scorecard: tweak request measurements
- sectransp: fix setting tls version
- SECURITY: mention OpenSSF best practices gold badge
- setopt: allow CURLOPT_INTERFACE to be set to NULL
- setopt: let CURLOPT_ECH set to NULL reset to default
- setopt: make CURLOPT_TFTP_BLKSIZE accept bad values
- sha256: fix symbol collision between nettle (GnuTLS) and OpenSSL
- share: don't reinitialize conncache
- sigpipe: init the struct so that first apply ignores
- smb: convert superfluous assign into assert
- smtp: add tracing feature
- splay: use access functions, add asserts, use Curl_timediff
- spnego_gssapi: implement TLS channel bindings for openssl
- src: delete `curlx_m*printf()` aliases
- src: fix potential macro confusion in cmake unity builds
- src: namespace symbols clashing with lib
- src: replace copy of printf mappings with an include
- ssh: deduplicate SSH backend includes (and fix libssh cmake unity build)
- system_win32: fix typo
- test httpd: tweak cipher list
- test1521: verify setting options to NULL better
- test1707: output diff more for debugging differences in CI outputs
- test556: improve robustness
- test579: improve robustness
- test587: improve robustness
- test649: improve robustness
- test677: improve robustness
- tests/runner: only allow [!A-Za-z0-9_-] in %if feature names
- tests: constrain http pytest to tests/http directory
- tests: don't mangle output if hostname or type unknown
- tests: ignore QUIT from FTP protocol comparisons
- tests: provide docs as curldown, not nroff
- tidy-up: misc build, tests, `lib/macos.c`
- tidy-up: OS names
- tool_operhlp: fix "potentially uninitialized local variable 'pc' used"
- tool_paramhlp: bump maximum post data size in memory to 16GB
- transfer: Curl_sendrecv() and event related improvements
- transfer: remove comments, add asserts
- transfer: skip EOS read when download done
- url: dns_entry related improvements
- url: fix connection reuse for HTTP/2 upgrades
- urlapi: verify URL *decoded* hostname when set
- urldata: introduce `data->mid`, a unique identifier inside a multi
- urldata: remove 'scratch' from the UrlState struct
- urldata: remove crlf_conversions counter
- urldata: remove proxy_connect_closed bit
- verify-release: shell script that verifies a release tarball
- version: fix shadowing a `libssh.h` symbol
- vtls: add SSLSUPP_CIPHER_LIST
- vtls: fix MSVC 'cast truncates constant value' warning
- vtls: fix static function name collisions between TLS backends
- vtls: init ssl peer only once
- websocket: introduce blocking sends
- wolfssl: avoid taking cached x509 store ref if sslctx already using it
- wolfssl: fix CURLOPT_SSLVERSION
- wolfssl: fix setting tls version
- wolfssl: improve shutdown handling
- ws: flags to opcodes should ignore CURLWS_CONT flag
- x509asn1: raise size limit for x509 certification information

## Fixed in 8.9.1 - July 31 2024

8.9.1
8.9.1
8.9.1 changes only

Bugfixes:

- cmake: detect `libssh` via `pkg-config`
- cmake: detect `nettle` when building with GnuTLS
- cmake: drop `if(PKG_CONFIG_FOUND)` guard for `pkg_check_modules()`
- configure: limit `__builtin_available` test to Darwin
- connect: fix connection shutdown for event based processing
- contrithanks.sh: use -F with -v to match lines as strings
- curl: more defensive socket code for --ip-tos
- CURLOPT_SSL_CTX_FUNCTION.md: mention CA caching
- CURLSHOPT_SHARE.md: mention sessions/cookies as not thread-safe
- example/multi-uv: remove the use of globals
- ftpserver.pl: make POP3 LIST serve content from the test file
- GHA/windows: increase timeout for vcpkg build step
- lib: survive some NULL input args
- macos: fix Apple SDK bug workaround for non-macOS targets
- misc: cleanup after removing years from copyright
- os400: build cli manual.
- os400: workaround an IBM ASCII runtime library bug
- RELEASE-PROCEDURE.md: remove the initial build step
- runtests: fold timing details with GHA, sync `-r` tflags
- tests: provide FTP directory contents in the test file
- tidy-up: URL updates
- TODO: thread-safe sharing
- transfer: speed limiting fix for 32-bit systems
- vtls: avoid forward declaration in MultiSSL builds
- wolfSSL: allow wolfSSL's implementation of kyber to be used
- wolfssl: avoid calling get_cached_x509_store if store is uncachable
- wolfssl: CA store share fix
- x509asn1: unittests and fixes for gtime2str

## Fixed in 8.9.0 - July 24 2024

8.9.0
8.9.0
8.9.0 changes only

Changes:

- curl: add --ip-tos (IP Type of Service / Traffic Class)
- curl: add --mptcp
- curl: add --vlan-priority
- curl: add -w '%{num_retries}'
- gnutls: support CA caching
- mbedtls: support CURLOPT_CERTINFO
- noproxy: patterns need to be comma separated
- socket: support binding to interface *AND* IP
- tcpkeepalive: add CURLOPT_TCP_KEEPCNT and --keepalive-cnt
- urlapi: add CURLU_NO_GUESS_SCHEME
- wolfssl: support CA caching

Bugfixes:

- (lib)curl.rc: set debug flag also for `CURLDEBUG` and `UNITTESTS`
- asyn-thread: avoid using GetAddrInfoExW with impersonation
- aws-sigv4: URL encode the canonical path
- BINDINGS: update java link to one that exists
- build: add Debug, TrackMemory, ECH to feature list
- build: add more supported attributes to the IAR compiler
- build: fix llvm 16 or older + Xcode 15 or newer, and gcc
- build: fix llvm 17 and older + macOS SDK 14.4 and newer
- build: sync warning options between autotools, cmake & compilers
- build: tidy up `__builtin_available` feature checks (Apple)
- build: untangle `CURLDEBUG` and `DEBUGBUILD` macros
- build: use `#error` instead of invalid syntax
- cd2nroff: convert two warnings to errors
- cd2nroff: use an empty "##" to signal end of .IP sequence
- cf-socket: improve SO_SNDBUF update for Winsock
- cf-socket: optimize curlx_nonblock() and check its return error
- cf-socket: remove obsolete recvbuf
- cf-socket: remove two "useless" assignments
- cfilters: make Curl_conn_connect always assign 'done'
- cmake: add CURL_USE_GSASL option with detection + CI test
- cmake: allow `ENABLE_CURLDEBUG=OFF` with `ENABLE_DEBUG=ON`
- cmake: allow SOVERSION override with `CURL_LIBCURL_SOVERSION`
- cmake: alpha-sort feature list
- cmake: always build unit tests with the `testdeps` target
- cmake: bring `curl-config.cmake` closer to `FindCURL`
- cmake: create `configurehelp.pm` like autotools does
- cmake: delete unused `HAVE_LIBSSH2`, `HAVE_LIBSOCKET` macros
- cmake: detect `libidn2` also via `pkg-config`
- cmake: enable SOVERSION for Cygwin and `CMAKE_DLL_NAME_WITH_SOVERSION`
- cmake: fix `-Wredundant-decls` in unity/mingw-w64 builds
- cmake: fix brotli lib order
- cmake: fix building `unit1600` due to missing `ssl/openssl.h`
- cmake: fix building in unity mode
- cmake: fix building with both md4 and md5 in unity mode
- cmake: fix builds with detected libidn2 lib but undetected header
- cmake: fix feature and protocol lists for SecureTransport
- cmake: fix quotes when appending multiple options (SecureTransport)
- cmake: fix test 1013 with websockets enabled and no TLS
- cmake: improve wolfSSL detection
- cmake: show protocols, then features
- cmake: stop setting SOVERSION for the static lib target
- cmake: sync CA bundle/path detection with autotools
- cmake: sync protocol/feature list with `curl -V` output
- cmake: use `APPLE` instead of `CMAKE_SYSTEM_NAME` string
- cmake: whitespace, formatting/tidy-up in comments
- cmdline-docs: "added in" cleanups
- cmdline-docs: fix `--proxy-ca-native` example + tidy-ups
- cmdline-opts/_PROTOCOLS.md: mention WS(S)
- cmdline-opts/ech.md: shorten the help text
- cmdline-opts/fail.md: expand and clarify
- cmdline-opts/interface.md: expand the documentation
- cmdline-opts: category cleanup
- cmdline-opts: expand the parallel explanations
- cmdline-opts: shorten six help texts
- cmdline: expand proxy option explanations
- code: language cleanup in comments
- configure: CA bundle/path detection fixes
- configure: fix `SystemConfiguration` detection
- configure: fix pkg-config library name 'libnghttp3'
- configure: fix pkg-config names (zstd, ngtcp2*)
- configure: limit `SystemConfiguration` test to non-c-ares, IPv6 builds
- configure: remove 'deeper' checks for `AC_CHECK_FUNCS`
- configure: require a QUIC library if nghttp3 is used
- configure: sort feature list, lowercase protocols, use backticks
- configure: use `$EGREP` in place of `grep -E`
- configure: use AC_MSG_WARN for TLS/experimental warning texts
- connect-to.md: expand with examples
- connection: shutdown TLS (for FTP) better
- cookie-jar.md: see also --junk-session-cookies
- curl-config: revert to backticks to support old target envs
- curl: allow etag and content-disposition for 3xx reply
- curl: bsearch the --write-out variable name
- curl: check for --disable case *sensitively*
- curl: list categories in --help
- curl: make warnings and other messages aware of terminal width
- curl: output "flying saucers" with leading carriage return
- curl_easy_escape: elaborate a little on encoding a URL
- curl_mprintf.md: add missing comma
- curl_multi_poll.md: expand the example with an custom file descriptor
- curl_str[n]equal.md: tidy up text to make them stand-alone
- curl_url_set.md: libcurl only parses :// URLs
- curl_url_set: elaborate on scheme guessing
- curldown: make 'added-in:' a mandatory header field
- CURLOPT_CONNECTTIMEOUT*: clarify, document the millisecond version
- CURLOPT_ECH.md: remove repeated 'if'
- CURLOPT_NETRC.md: clarify what it does on Windows
- CURLOPT_RESOLVE.md: mention hostname can be wildcard ('*')
- CURLOPT_SSL_VERIFYHOST.md: refresh
- CURLOPT_TLSAUTH_PASSWORD/USERNAME.md: language fixups
- DISTROS: add a link to the list archive
- DISTROS: add AlmaLinux package source link
- DISTROS: add MSYS2 (native) links
- docs/cmdline-opts: fix mail-auth example TLD typo
- docs/cmdline-opts: remove two superfluous "Added in" mentions
- docs/libcurl: polish the single-line descriptions
- docs/Makefile.am: make curl-config.1 install
- docs: reference non deprecated libcurl options
- docs: start markdown headers with capital letter where applicable
- doh-insecure.md: expand
- doh: fix cleanup
- doh: fix leak and zero-length HTTPS RR crash
- dump-header.md: mention minus for stdout
- examples/threaded-ssl: remove locking callback code
- examples: add missing binaries to .gitignore
- examples: delete unused includes
- examples: fix compiling with MSVC
- examples: suppress deprecation warnings locally
- FEATURES.md: refresh
- file: separate fake headers and body with a stand-alone CRLF
- ftp: remove redundant null pointer check in loop condition
- get.d: clarify the explanation
- GHA/windows: add MSVC wolfSSL job with test
- GHA/windows: ignore FTP test results for old-mingw-w64
- GHA: add MSVC UWP job, expand jobs with more options
- GHA: detect and warn for more English contractions
- GHA: disable MQTT and WebSocket tests in Windows jobs
- GHA: disable TFTP tests in Windows jobs
- GHA: enable tests 1139, 1177, 1477 on Windows
- GHA: improve vcpkg cache, add BoringSSL ECH and LibreSSL MSVC jobs
- GHA: unify http3 workflows into one
- GHA: use vcpkg to install packages for MSVC jobs
- GIT-INFO.md: remove version requirements
- gnutls: improve TLS shutdown
- gnutls: pass in SNI name, not hostname when checking cert
- help: add flags to output and ssh categories
- hostip: skip error check for infallible function call
- http/3: add shutdown support
- http/3: resume upload on ack if we have more data to send
- http: remove "struct HTTP"
- http: write last header line late
- idn: fix ß with AppleIDN
- idn: make macidn fail before trying conversion if name too long
- idn: tweak buffer use when converting with macidn
- lib/v*: tidy up types and casts
- lib: add a few DEBUGASSERT(data) to aid code analyzers
- lib: add failure reason on bind errors
- lib: fix gcc warning in certain debug builds
- lib: fix thread entry point to return `DWORD` on WinCE
- lib: graceful connection shutdown
- lib: prefer `var = time(NULL)` over `time(&var)`
- lib: tidy up types and casts
- lib: xfer_setup and non-blocking shutdown
- libcurl-docs: make option lists alpha-sorted
- libcurl-easy.md: now *more* than 300 options
- libcurl.pc: add `Requires.private`, `Requires` for static linking
- libcurl.pc: add more `Requires.private`/`Requires` dependencies
- libssh: remove CURLOPT_SSL_VERIFYHOST check
- macos: add workaround for gcc, non-c-ares, IPv6, compile error
- macos: undo `availability` macro enabled by Homebrew gcc
- managen: "added in" fixes
- managen: cleanups to generate nicer-looking output
- managen: error on trailing blank lines in input files
- managen: fix removing backticks from subtitles
- managen: insert final .fi for files ending with a quote
- managen: introduce "Multi: per-URL"
- managen: only output .RE for man page output
- managen: output tabs for each 8 leading spaces
- managen: warn on excessively long help texts
- MANUAL.md: wrap two example URLs that overrun styling
- mbedtls: check version before getting tls version
- mbedtls: check version for cipher id
- mbedtls: correct the error message for cert blob parsing failure
- mbedtls: send close-notify on close
- mbedtls: v3.6.0 workarounds
- md4: fix compilation with OpenSSL 1.x with md4 disabled
- misc: fix typos
- mk-ca-bundle.pl: delay 'curl -V' execution until it is needed
- multi: add multi->proto_hash, a key-value store for protocol data
- multi: do a final progress update on connect failure
- multi: fix multi_wait() timeout handling
- multi: fix pollset during RESOLVING phase
- multi: multi_getsock(), check correct socket
- ngtcp2+quictls: fix cert-status use
- noproxy: test bad ipv6 net size first
- openssl/gnutls: rectify the TLS version checks for QUIC
- openssl: fix %-specifier in infof() call
- openssl: fix hostname handling when using ECH
- openssl: stop duplicate ssl key logging for legacy OpenSSL
- os400: make it compilable again
- pytest: add ftp upload tests
- pytest: include testenv/vsftpd.py in dist tarball
- quic: enable UDP GRO
- quic: openssl quic, cmake and doc version update to 3.3.0
- quic: require at least OpenSSL 3.3 for QUIC
- quic: update to quiche 0.22.0
- quiche: fix operand of ‘?:’ changes signedness
- request.md: language fix
- request: change the struct field bodywrites to a bool, only for hyper
- reuse: switch to REUSE 3.2 and REUSE.toml
- runtests: show name and keywords for failed tests in summary
- runtests: sort test IDs in summary lines
- runtests: support %DATEfor YYYY-MM-DD of right now
- runtests: support %VERNUM
- runtests: support crlf="yes" for the <stderr> section
- sectransp: fix `HAVE_BUILTIN_AVAILABLE` checks to not emit warnings
- sectransp: fix clang compiler warnings, stop silencing them
- sectransp: remove large cipher table
- sectransp: use common code for cipher suite lookup
- sendf: fix CRLF conversion of input
- smtp: for starttls, do full upgrade
- socket: change TCP keepalive from ms to seconds on DragonFly BSD
- socket: use SOCK_NONBLOCK to eliminate extra system call
- socketpair: add `eventfd` and use `SOCK_NONBLOCK` for `socketpair()`
- src/Makefile.am: remove SUBDIRS assignment
- system_win32: add missing curl.h include
- tcpkeepalive: support TCP keep-alive parameters on Solaris <11.4
- test1119: adapt for `.md` input
- test1139: scan .md files instead of .3 ones
- test1175: scan libcurl-errors.md, not the generated .3 version
- test1486: verify that write-out.md and tool_writeout.c are in sync
- test2600: disable on win32
- test: add test1484, for HEAD with content
- test: add test1546, chunked not last transfer encoding
- tests/scripts: call it 'manpage' (single word)
- tests: add pytest for --ciphers and --tls13-ciphers options
- tests: delete `CharConv` remains
- tests: delete redundant `!MSDOS` guard
- tests: extend user/password parsing test1620
- tests: fix sshd IdentityFile path for MinGW/Cygwin
- tests: fix sshd UserKnownHostsFile path for MinGW/Cygwin
- tests: include current directory when running test Perl commands
- tests: log "Throwing away" messages before throwing away
- tests: run with "--trace-config all" to provide even more info
- tests: sync feature names with `curl -V`
- tests: test_17_ssl_use.py clarify mbedTLS TLSv1.3 support
- tests: use exec when spawning nghttpx
- tidy-up: use consistent casing for Windows directories
- TODO: remove some old, clarify, add something
- tool_cb_hdr: return error for failed header writes
- tool_operate: avoid explicitly setting verifypeer to 1
- tool_operate: simplify return code handling from url_proto()
- tool_writeout: get certinfo only when needing it
- trace-ascii.md: mention "%" for stderr
- transfer: avoid polling socket every transfer loop
- transfer: conn close on paused upload
- transfer: do not use EXPIRE_NOW while blocked
- transfer: remove curl_upload_refill_watermark, no longer used
- transfer: set CSELECT_IN if there is data pending
- unit2604: use 'unitfail' instead of 'error' variable
- url: allow DoH transfers to override max connection limit
- urlapi: remove unused definition of HOST_BAD
- variable.md: make example use expand
- verify-synopsis.pl: work with .md files
- vms: fixed language in comment
- vtls: deprioritize Secure Transport
- vtls: replace addsessionid with set_sessionid
- winbuild: fix PE version info debug flag
- winbuild: MS-DOS batch tidy-ups
- winbuild: remove outdated WIN32 defines
- windows: fix UWP builds, add GHA job
- winsock: move SO_SNDBUF update into cf-socket
- wolfssl: assume key_file equal to clientcert if no key_file
- wolfssl: use larger error buffer when formatting errors
- x509asn1: add some common ECDSA OIDs
- x509asn1: ASN1tostr() should fail when 'constructed' is set
- x509asn1: fallback to dotted OID representation
- x509asn1: make Curl_extract_certinfo store error message
- x509asn1: prevent NULL dereference
- x509asn1: remove superfluous free()
- x509asn1: remove two static variables

## Fixed in 8.8.0 - May 22 2024

8.8.0
8.8.0
8.8.0 changes only

Changes:

- curl_version_info: provide librtmp version
- file: add support for directory listings
- idn: add native AppleIDN (icucore) support for macOS/iOS
- lib: add curl_multi_waitfds
- mbedTLS: implement CURLOPT_SSL_CIPHER_LIST option
- NTLM_WB: drop support
- TLS: add support for ECH (Encrypted Client Hello)
- urlapi: add CURLU_GET_EMPTY for empty queries and fragments

Bugfixes:

- appveyor: drop unnecessary `--clean-first` cmake option
- appveyor: guard against crash-build with VS2008
- appveyor: make gcc 6 mingw64 job build-only
- asyn-thread: fix curl_global_cleanup crash in Windows
- asyn-thread: fix Curl_thread_create result check
- autotools: delete unused functions
- autotools: fix `HAVE_IOCTLSOCKET_FIONBIO` test for gcc 14
- autotools: only probe for SGI MIPS compilers on IRIX
- bearssl: fix compiler warnings
- bearssl: use common code for cipher suite lookup
- bufq: remove duplicate word in comment
- BUG-BOUNTY.md: clarify the third party situation
- build: prefer `USE_IPV6` macro internally (was: `ENABLE_IPV6`)
- build: remove MacOSX-Framework script
- cd2nroff/manage: use UTC when SOURCE_DATE_EPOCH is set
- cf-https-connect: use timeouts as unsigned ints
- cf-socket: don't try getting local IP without socket
- cf-socket: remove references to l_ip, l_port
- ci: add curl-for-win builds: Linux MUSL, macOS, Windows
- cmake: add `BUILD_EXAMPLES` option to build examples
- cmake: add librtmp/rtmpdump option and detection
- cmake: check fseeko after detecting HAVE_FILE_OFFSET_BITS
- cmake: do not pass linker flags to the static library tool
- cmake: enable `-pedantic-errors` for clang when `CURL_WERROR=ON`
- cmake: FindNGHTTP2 add static lib name to find_library call
- cmake: fix `CURL_WERROR=ON` for old CMake and use it in GHA/linux-old
- cmake: fix `HAVE_IOCTLSOCKET_FIONBIO` test with gcc 14
- cmake: fixup `DEPENDS` filename
- cmake: forward `USE_LIBRTMP` option to C
- cmake: generate misc man pages and install `mk-ca-bundle.pl`
- cmake: initialize `BUILD_TESTING` before first use
- cmake: speed up libcurl doc building again
- cmake: tidy-up to use `WORKING_DIRECTORY`
- cmake: use namespaced custom target names
- cmdline-docs: fix make install with configure --disable-docs
- configure: error on missing perl if docs or manual is enabled
- configure: make --disable-docs imply --disable-manual
- content_encoding: brotli and others, pass through 0-length writes
- content_encoding: ignore duplicate chunked encoding
- content_encoding: reject transfer-encoding after chunked
- contrithanks: honor `CURLWWW` variable
- curl-confopts.m4: define CARES_NO_DEPRECATED when c-ares is used
- curl.h: change CURL_SSLVERSION_* from enum to defines
- curl: make --help adapt to the terminal width
- curl: use curl_getenv instead of the curlx_ version
- Curl_creader_read: init two variables to avoid using them uninited
- curl_easy_pause.md: use correct defines in example
- curl_getdate.md: document two-digit year handling
- curl_global_trace.md: shorten the description
- curl_multibyte: remove access() function wrapper for Windows
- curl_path: make Curl_get_pathname use dynbuf
- curl_setup.h: add support for IAR compiler
- curl_setup.h: detect 'inline' support
- curl_sha512_256: do not use workaround for NetBSD when not needed
- curl_sha512_256: fix detection of OpenSSL 1.1.1 or later
- curl_url_get.md: clarify queries and fragments and CURLU_GET_EMPTY
- CURLINFO_REQUEST_SIZE: fixed, add tests for transfer infos reported
- CURLOPT_WRITEFUNCTION.md: fix the callback proto in the example
- cw-out: improved error handling
- DEPRECATE.md: TLS libraries without 1.3 support
- digest: replace strcpy for empty string with simple assignment
- dist: `set -eu`, fix shellcheck, make reproducible and smaller tarballs
- dist: add files missing from release tarball
- dist: add reproducible directory entries to tarballs
- dist: do not require Perl in `maketgz`
- dist: remove the curl-config.1 from the tarball
- dist: verify tarball reproducibility in CI
- DISTROS: add patch and issues link for curl-for-win
- DISTROS: Cygwin updates
- dllmain: Call OpenSSL thread cleanup for Windows and Cygwin
- doc: pytest `--repeat` -> `--count`
- docs/cmdline-opts: invoke managen using a relative path
- docs/cmdline-opts: mention STARTTLS for --ssl and --ssl-reqd
- docs: add CURLOPT_NOPROGRESS to CURLOPT_XFERINFOFUNCTION example
- docs: clarify CURLOPT_MAXFILESIZE and CURLOPT_MAXFILESIZE_LARGE
- docs: fix some CURLINFO examples
- doh: fix typo in comment
- doh: remove unused function prototype
- dynbuf: fix returncode on memory error
- examples: fix/silence `-Wsign-conversion`
- EXPERIMENTAL: add graduation requirements for each feature
- file: remove useless assignment
- ftp: add tracing support
- ftp: fix build for CURL_DISABLE_VERBOSE_STRINGS
- ftp: fix socket leak on rare error
- GHA: add NetBSD, OpenBSD, FreeBSD/arm64 and OmniOS jobs
- GHA: add shellcheck job and fix warnings, shell tidy-ups
- GHA: add valgrind to a wolfSSL build
- GHA: on macOS remove $HOME/.curlrc
- GHA: pin dependencies
- gnutls: lazy init the trust settings
- h3/ngtcp2: improve error handling
- hash: change 'slots' to size_t from int
- hash: delete unused debug function
- hsts: explicitly skip blank lines
- hsts: remove single-use single-line function
- http tests: in CI skip test_02_23* for quiche
- http2 + ngtcp2: pass CURLcode errors from callbacks
- http2, http3: decouple stream state from easy handle
- http2: emit RST when client write fails
- http3: quiche+ngtcp2 improvements
- http: acknowledge a returned error code
- http: HEAD response body tolerance
- http: reject HTTP major version switch mid connection
- http: remove redundant check
- http: with chunked POST forced, disable length check on read callback
- http_aws_sigv4: remove useless assignment
- idn: make Curl_idnconvert_hostname() use Curl_idn_decode()
- if2ip: make the buf_size arg a size_t
- INSTALL-CMAKE.md: explain `cmake -G <generator-name>`
- krb5: use dynbuf
- ldap: fix unused variables (seen on OmniOS)
- lib/cf-h1-proxy: silence compiler warnings (gcc 14)
- lib: add trace support for client reads and writes
- lib: bump hash sizes to `size_t`
- lib: clear the easy handle's saved errno before transfer
- lib: fix compiler warnings (gcc)
- lib: make protocol handlers store scheme name lowercase
- lib: merge `ENABLE_QUIC` C macro into `USE_HTTP3`
- lib: remove two instances of "only only" messages
- lib: silence `-Wsign-conversion` in base64, strcase, mprintf
- lib: silence warnings on comma misuse
- lib: use `#error` instead of invalid syntax in `curl_setup_once.h`
- lib: use multi instead of multi_easy for the active multi
- libcurl-opts: mention pipelining less
- libssh2: delete redundant feature guard
- libssh2: replace `access()` with `stat()`
- libssh2: set length to 0 if strdup failed
- m4: fix rustls pkg-config codepath
- MAIL-ETIQUETTE: convert to markdown
- makefile: remove the sorting from the vc-ide action
- maketgz: put docs/RELEASE-TOOL.md into the tarball
- managen: fix the option sort order
- mbedtls: call mbedtls_ssl_setup() after RNG callback is set
- mbedtls: cut off trailing newlines from debug logs
- mbedtls: fix building with v3 in CMake Unity mode
- mbedtls: support TLS 1.3
- mime: avoid using access()
- misc: fix typos
- misc: fix typos, quoting and spelling
- mprintf: check fputc error rather than matching returned character
- mqtt: when Curl_xfer_recv returns error, don't use nread
- multi: avoid memory-leak risk
- multi: introduce SETUP state for better timeouts
- multi: multi_wait improvements
- multi: remove the unused Curl_preconnect function
- multi: remove useless assignment
- multi: timeout handles even without connection
- openldap: create ldap URLs correctly for IPv6 addresses
- openssl: do not set SSL_MODE_RELEASE_BUFFERS
- openssl: revert keylog_callback support for LibreSSL
- OS400: fix shellcheck warnings in scripts
- projects: drop MSVC project files for recent versions
- pytest: add DELETE tests, check server version
- pytest: fixes for recent python, add FTP tests
- quic: fixup duplicate static function name (for cmake unity)
- quiche: expire all active transfers on connection close
- quiche: trust its timeout handling
- RELEASE-PROCEDURE: mention an initial working build
- request: make Curl_req_init return void
- request: paused upload on completed download, assess connection
- reuse: add copyright + license info to individual docs/*.md files
- ROADMAP: remove completed entries, mention websocket
- rustls: fix handshake done handling
- rustls: fix partial send handling
- rustls: remove incorrect SSLSUPP_TLS13_CIPHERSUITES flag
- rustsls: fix error code on receive
- sendf: fix two typos in comments
- sendf: useless assignment in cr_lc_read()
- setopt: acknowledge errors proper for CURLOPT_COOKIEJAR
- setopt: make the setstropt_userpwd args compulsory
- setopt: remove check for 'option' that is always true
- setopt: warn on Curl_set*opt() uses not using the return value
- smtp: result of Curl_bufq_cread was not used
- socket: remove redundant call to getsockname
- socketpair: fix compilation when USE_UNIX_SOCKETS is not defined
- src: tidy up types, add necessary casts
- telnet: check return code from fileno()
- tests/http: fix compiler warning
- tests: add -q as first option when invoking curl for tests
- tests: check caddy server version to match test expectations
- tests: enable test 1117 for hyper
- tests: fix feature case in test1481
- tests: fix test 1167 to skip digit-only symbols
- tests: make the unit test result type `CURLcode`
- tests: Mark tftpd timer function as noreturn
- tests: tidy up types in server code
- tls: fix SecureTransport + BearSSL cmake unity builds
- tls: remove EXAMPLEs from deprecated options
- tls: use shared init code for TCP+QUIC
- tool: move tool_ftruncate64 to tool_util.c
- tool_cb_rea: limit rate unpause for -T . uploads
- tool_cfgable: free {proxy_}cipher13_list on exit
- tool_getparam: output warning for leading unicode quote character
- tool_getparam: remove two redundant conditions
- tool_operate: don't truncate the etag save file by default
- tool_operate: init vars unconditionally in post_per_transfer
- tool_paramhlp: remove duplicate assign
- tool_xattr: "guess" URL scheme if none is provided
- tool_xattr: in debug builds, act normally if CURL_FAKE_XATTR is not set
- transfer: remove useless assignment
- url: do not URL decode proxy credentials
- url: fix use of an uninitialized variable
- url: make parse_login_details use memdup0
- url: remove duplicate call to Curl_conncache_remove_conn when pruning
- urlapi: allow setting port number zero
- urlapi: fix relative redirects to fragment-only
- urldata: remove fields not used depending on used features
- vauth: make two functions void that always returned OK
- version: use msnprintf instead of strncpy
- vquic-tls: use correct cert name check API for wolfSSL
- vquic: use CURL_FORMAT_CURL_OFF_T for 64-bit printf output
- vtls: TLS session storage overhaul
- wakeup_create: use FD_CLOEXEC/SOCK_CLOEXEC
- warnless: delete orphan declarations
- websocket: avoid memory leak in error path
- winbuild: add ENABLE_WEBSOCKETS option
- winbuild: use $(RC) correctly
- wolfssl: plug memory leak in wolfssl_connect_step2()
- x509asn1: return error on missing OID

## Fixed in 8.7.1 - March 27 2024

8.7.1
8.7.1
8.7.1 changes only

Bugfixes:

- Fixed empty tool_hugehelp.c file

## Fixed in 8.7.0 - March 27 2024

8.7.0
8.7.0 changes only

Changes:

- configure: add --disable-docs flag
- CURLINFO_USED_PROXY: return bool whether the proxy was used
- digest: support SHA-512/256
- DoH: add trace configuration
- write-out: add '%{proxy_used}'

Bugfixes:

- ALTSVC.md: correct a typo
- asyn-ares: fix data race warning
- asyn-thread: use wakeup_close to close the read descriptor
- badwords: use hostname, not hostname
- BINDINGS: add mcurl, the python binding
- bufq: writing into a softlimit queue cannot be partial
- c-hyper: add header collection writer in hyper builds
- cd2nroff: gen: make `\>` in input to render as plain '>' in output
- cd2nroff: remove backticks from titles
- checksrc.pl: fix handling .checksrc with CRLF
- cmake: add USE_OPENSSL_QUIC support
- cmake: add warning for using TLS libraries without 1.3 support
- cmake: enable `ENABLE_CURL_MANUAL` by default
- cmake: fix `CURL_WINDOWS_SSPI=ON` with Schannel disabled
- cmake: fix function description in comment
- cmake: fix install for older CMake versions
- cmake: fix libcurl.pc and curl-config library specifications
- cmdline-docs/Makefile: avoid using a fixed temp filename
- cmdline-docs: quote and angle bracket cleanup
- cmdline-opts/_EXITCODES: sync with libcurl-errors
- cmdline-opts/_VARIABLES.md: improve the description
- cmdline-opts/_VERSION: provide %VERSION correctly
- cmdline-opts: shorter help texts
- configure: add pkg-config support to rustls detection
- configure: add warning for using TLS libraries without 1.3 support
- configure: build & install shell completions when enabled
- configure: do not link with nghttp3 unless necessary
- configure: Don't build shell completions when disabled
- configure: Don't make shell completions without perl
- configure: find libpsl with pkg-config
- connect.c: fix typo
- CONTRIBUTE: update the section on documentation format
- cookie.md: provide an example sending a fixed cookie
- cookie: if psl fails, reject the cookie
- curl: exit on config file parser errors
- curl: make --libcurl output better CURLOPT_*SSLVERSION
- curl: when allocating variables, add the name into the struct
- curl_setup.h: add curl_uint64_t internal type
- curldown: fix email address in Copyright
- CURLMOPT_MAX*: mention what happens if changed mid-transfer
- CURLOPT_INTERFACE.md: remove spurious amp, add see-also
- CURLOPT_POSTQUOTE.md: fix typo
- CURLOPT_SSL_CTX_FUNCTION.md: no promises of lifetime after return
- CURLOPT_WRITEFUNCTION.md: typo fix
- digest: add check for hashing error
- dist: make sure the http tests are in the tarball
- DISTROS: add document with distro pointers
- docs/libcurl: add TLS backend info for all TLS options
- docs/libcurl: generate PROTOCOLS from meta-data
- docs: add missing slashes to SChannel client certificate documentation
- docs: add necessary setup for nghttp3
- docs: ascii version of man page without nroff
- docs: dist curl*.1 and install without perl
- docs: make curldown do angle brackets like markdown
- docs: make each libcurl man specify protocol(s)
- docs: make sure curl.1 is included in dist tarballs
- docs: update minimal binary size in INSTALL.md
- docs: use present tense
- examples: use present tense in comments
- file: use xfer buf for file:// transfers
- fopen: fix narrowing conversion warning on 32-bit Android
- form-string.md: correct the example
- ftp: do lineend conversions in client writer
- ftp: fix socket wait activity in ftp_domore_getsock
- ftp: tracing improvements
- ftp: treat a 226 arriving before data as a signal to read data
- gen.pl: make the "manpageification" faster
- gen: make `\>` in input to render as plain '>' in output
- getparam: make --ftp-ssl work again
- GHA/linux: add sysctl trick to work-around GitHub runner issue
- GIT-INFO: convert to markdown
- GOVERNANCE: document the core team
- header.md: remove backslash, make nicer markdown
- HTTP/2: write response directly
- http2, http3: return CURLE_PARTIAL_FILE when bytes were received
- http2: fix push discard
- http2: memory errors in the push callbacks are fatal
- http2: minor tweaks to optimize two struct sizes
- http2: push headers better cleanup
- http2: remove the third (unused) argument from http2_data_done()
- HTTP3.md: adjust the OpenSSL QUIC install instructions
- http: better error message for HTTP/1.x response without status line
- http: improve response header handling, save cpu cycles
- http: move headers collecting to writer
- http: remove stale comment about rewindbeforesend
- http: separate response parsing from response action
- http_chunks: fix the accounting of consumed bytes
- http_chunks: remove unused 'endptr' variable
- https-proxy: use IP address and cert with ip in alt names
- hyper: implement unpausing via client reader
- ipv6.md: mention IPv4 mapped addresses
- KNOWN_BUGS: POP3 issue when reading small chunks
- lib1598: fix `CURLOPT_POSTFIELDSIZE` usage
- lib582: remove code causing warning that is never run
- lib: add `void *ctx` to reader/writer instances
- lib: convert Curl_get_line to use dynbuf
- lib: Curl_read/Curl_write clarifications
- lib: enhance client reader resume + rewind
- lib: initialize output pointers to NULL before calling strto[ff,l,ul]
- lib: keep conn IP information together
- lib: move 'done' parameter to SingleRequests
- lib: remove curl_mimepart object when CURL_DISABLE_MIME
- libcurl-docs: cleanups
- libcurl-security.md: Active FTP passes on the local IP address
- libssh/libssh2: return error on too big range
- MANUAL.md: fix typo
- mbedtls: fix building when MBEDTLS_X509_REMOVE_INFO flag is defined
- mbedtls: fix pytest for newer versions
- mbedtls: properly cleanup the thread-shared entropy
- mbedtls: use mbedtls_ssl_conf_{min|max}_tls_version
- md4: include strdup.h for the memdup proto
- mime: add client reader
- misc: fix typos in docs and lib
- mkhelp: simplify the generated hugehelp program
- mprintf: fix format prefix I32/I64 for windows compilers
- multi: add xfer_buf to multi handle
- multi: fix multi_sock handling of select_bits
- multi: make add_handle free any multi_easy
- ngtcp2: no recvbuf for stream
- ntml_wb: fix buffer type typo
- OpenSSL QUIC: adapt to v3.3.x
- openssl-quic: check on Windows that socket conv to int is possible
- openssl-quic: fix BIO leak and Windows warning
- openssl-quic: fix unity build, casing, indentation
- OS400: avoid using awk in the build scripts
- paramhlp: fix CRLF-stripping files with "-d @file"
- proxy1.0.md: fix example
- pytest: adapt to API change
- request: clarify message when request has been sent off
- rustls: make curl compile with 0.12.0
- schannel: fix hang on unexpected server close
- scripts: fix cijobs.pl for Azure and GHA
- sendf: ignore response body to HEAD
- setopt: fix check for CURLOPT_PROXY_TLSAUTH_TYPE value
- setopt: fix disabling all protocols
- sha512_256: add support for GnuTLS and OpenSSL
- smtp: fix STARTTLS
- SPONSORS: describe the basics
- strtoofft: fix the overflow check
- test 1541: verify getinfo values on first header callback
- test1165: improve pattern matching
- tests: support setting/using blank content env variables
- TIMER_STARTTRANSFER: set the same for everyone
- TLS: start shutdown only when peer did not already close
- TODO: update 13.11 with more information
- tool_cb_hdr: only parse etag + content-disposition for 2xx
- tool_getparam: accept a blank -w ""
- tool_getparam: handle non-existing (out of range) short-options
- tool_operate: change precedence of server Retry-After time
- tool_operate: do not set CURLOPT_QUICK_EXIT in debug builds
- trace-config.md: remove the mutexed options list
- transfer.c: break receive loop in speed limited transfers
- transfer: improve Windows SO_SNDBUF update limit
- urldata: move authneg bit from conn to Curl_easy
- version: allow building with ancient libpsl
- vquic-tls: fix the error code returned for bad CA file
- vtls: fix tls proxy peer verification
- vtls: revert "receive max buffer" + add test case
- VULN-DISCLOSURE-POLICY.md: update detail about CVE requests
- websocket: fix curl_ws_recv()
- wolfSSL: do not call the stub function wolfSSL_BIO_set_init()
- write-out.md: clarify error handling details

## Fixed in 8.6.0 - January 31 2024

8.6.0
8.6.0
8.6.0 changes only

Changes:

- add CURLE_TOO_LARGE
- add CURLINFO_QUEUE_TIME_T
- add CURLOPT_SERVER_RESPONSE_TIMEOUT_MS: add
- asyn-thread: use GetAddrInfoExW on >= Windows 8
- configure: make libpsl detection failure cause error
- docs/cmdline: change to .md for cmdline docs
- docs: introduce "curldown" for libcurl man page format
- runtests: support -gl. Like -g but for lldb.

Bugfixes:

- altsvc: free 'as' when returning error
- appveyor: replace PowerShell with bash + parallel autotools
- appveyor: switch to out-of-tree builds
- asyn-ares: with modern c-ares, use its default timeout
- build: delete unused `HAVE_{GSSHEIMDAL,GSSMIT,HEIMDAL}`
- build: delete/replace clang warning pragmas
- build: enable missing OpenSSF-recommended warnings, with fixes
- build: fix `-Wconversion`/`-Wsign-conversion` warnings
- build: fix Windows ADDRESS_FAMILY detection
- build: more `-Wformat` fixes
- build: remove redundant `CURL_PULL_*` settings
- cf-h1-proxy: no CURLOPT_USERAGENT in CONNECT with hyper
- cf-socket: show errno in tcpkeepalive error messages
- CI/distcheck: run full tests
- cmake: add option to disable building docs
- cmake: fix generation for system name iOS
- cmake: fix typo
- cmake: freshen up docs/INSTALL.cmake
- cmake: prefill/cache `HAVE_STRUCT_SOCKADDR_STORAGE`
- cmake: rework options to enable curl and libcurl docs
- cmake: when USE_MANUAL=YES, build the curl.1 man page
- cmdline-opts/write-out.d: remove spurious double quotes
- cmdline-opts: update availability for the *-ca-native options
- cmdline/gen: fix the sorting of the man page options
- configure: add libngtcp2_crypto_boringssl detection
- configure: fix no default int compile error in ipv6 detection
- configure: when enabling QUIC, check that TLS supports QUIC
- connect: remove margin from eyeballer alloc
- content_encoding: change return code to typedef'ed enum
- cookie.d: document use of empty string to enable cookie engine
- cookie: avoid fopen with empty filename
- curl.h: CURLOPT_DNS_SERVERS is only available with c-ares
- curl: show ipfs and ipns as supported "protocols"
- curl_easy_getinfo.3: remove the wrong time value count
- curl_multi_fdset.3: remove mention of null pointer support
- CURLINFO_REFERER.3: clarify that it is the *request* header
- CURLOPT_AUTOREFERER.3: mention CURLINFO_REFERER
- CURLOPT_POSTFIELDS.3: fix incorrect C string escape in example
- CURLOPT_SSH_*_KEYFILE: clarify
- dist: add tests/errorcodes.pl to the tarball
- docs: clean up Protocols: for cmdline options
- docs: describe and highlight super cookies
- docs: do not start lines/sentences with So, But nor And
- docs: install curl.1 with cmake
- docs: mention env vars not used by schannel
- doh: remove unused local variable
- examples: add four new examples
- file+ftp: use stack buffers instead of data->state.buffer
- ftp: handle the PORT parsing without allocation
- ftp: use dynbuf to store entrypath
- ftp: use memdup0 to store the OS from a SYST 215 response
- ftpserver.pl: send 213 SIZE response without spurious newline
- gen.pl: support ## for doing .IP in table-like lists
- gen: do italics/bold for a range of letters, not only single word
- GHA: add a job scanning for "bad words" in markdown
- GHA: bump ngtcp2, gnutls, mod_h2, quiche
- gnutls: fix build with --disable-verbose
- haproxy-clientip.d: document the arg
- headers: make sure the trailing newline is not stored
- headers: remove assert from Curl_headers_push
- hostip: return error immediately when Curl_ip2addr() fails
- hsts: remove assert for zero length domain
- http2: improved on_stream_close/data_done handling
- http3/quiche: fix result code on a stream reset
- http3: initial support for OpenSSL 3.2 QUIC stack
- http: adjust_pollset fix
- http: check for "Host:" case insensitively
- http: fix off-by-one error in request method length check
- http: only act on 101 responses when they are HTTP/1.1
- http: remove comment reference to a removed solution
- http: use stack scratch buffer
- http_proxy: a blank CURLOPT_USERAGENT should not be used in CONNECT
- krb5: add prototype to silence clang warnings on mvsnprintf()
- lib: add debug log outputs for CURLE_BAD_FUNCTION_ARGUMENT
- lib: error out on multissl + http3
- lib: fix variable undeclared error caused by `infof` changes
- lib: reduce use of strncpy
- lib: rename Curl_strndup to Curl_memdup0 to avoid misunderstanding
- lib: replace readwrite with write_resp
- lib: strndup/memdup instead of malloc, memcpy and null-terminate
- libssh2: use `libssh2_session_callback_set2()` with v1.11.1
- libssh: improve the deprecation warning dismissal
- libssh: suppress warnings without version check
- Makefile.am: fix the MSVC project generation
- Makefile.mk: drop Windows support
- mbedtls: fix `-Wnull-dereference` and `-Wredundant-decls`
- mbedtls: free the entropy when threaded
- mime: use memdup0 instead of malloc + memcpy
- mksymbolsmanpage.pl: provide references to where the symbol is used
- mprintf: overhaul and bugfixes
- mqtt: use stack scratch buffer for recv+publish
- multi: remove total timer reset in file_do() while fetching file://
- ngtcp2: put h3 at the front of alpn
- ntlm_wb: do not use data->state.buffer any longer
- openldap: fix an LDAP crash
- openldap: fix STARTTLS
- openssl: re-match LibreSSL deinit with init
- openssl: when verifystatus fails, remove session id from cache
- OS400: sync ILE/RPG binding
- pingpong: stop using the download buffer
- pop3: replace calloc + memcpy with memdup0
- pytest: scorecard tracking CPU and RSS
- quiche: return CURLE_HTTP3 on send to invalid stream
- readwrite_data: loop less
- Revert "urldata: move async resolver state from easy handle to connectdata"
- rtsp: deal with borked server responses
- runtests: for mode="text" on <stdout>, fix newlines on both parts
- sasl: make login option string override http auth
- schannel: fix `-Warith-conversion` gcc 13 warning
- sectransp: do verify_cert without memdup for blobs
- sectransp_ make TLSCipherNameForNumber() available in non-verbose config
- sendf: fix compiler warning with CURL_DISABLE_HEADERS_API
- setopt: clear mimepost when formp is freed
- setopt: use memdup0 when cloning COPYPOSTFIELDS
- socks: fix generic output string to say SOCKS instead of SOCKS4
- socks: use own buffer instead of data->state.buffer
- ssh: fix namespace of two local macros
- ssh: use stack scratch buffer for seeks
- strerror: repair get_winsock_error()
- system.h: sync mingw `CURL_TYPEOF_CURL_SOCKLEN_T` with other compilers
- system_win32: fix a function pointer assignment warning
- telnet: use dynbuf instead of malloc for escape buffer
- telnet: use stack scratch buffer for do
- tests/server: delete workaround for old-mingw
- tests: avoid int/size_t conversion size/sign warnings
- tests: respect $TMPDIR when creating unix domain sockets
- tool: make parser reject blank arguments if not supported
- tool: prepend output_dir in header callback
- tool_getparam: bsearch cmdline options
- tool_getparam: do not try to expand without an argument
- tool_getparam: stop supporting `@filename` style for --cookie
- tool_listhelp: regenerate after recent .d updates
- tool_operate: make --remove-on-error only remove "real" files
- tool_operate: stop setting the file comment on Amiga
- transfer: adjust_pollset improvements
- transfer: fix upload rate limiting, add test cases
- transfer: make the select_bits_paused condition check both directions
- transfer: remove warning: Value stored to 'blen' is never read
- url: don't set default CA paths for Secure Transport backend
- url: for disabled protocols, mention if found in redirect
- urlapi: remove assert
- verify-examples.pl: fail verification on unescaped backslash
- version: show only the libpsl version, not its dependencies
- vquic: extract TLS setup into own source
- vtls: fix missing multissl version info
- vtls: receive max buffer
- vtls: remove the Curl_cft_ssl_proxy object if CURL_DISABLE_PROXY
- websockets: check for negative payload lengths
- websockets: refactor decode chain
- windows: delete redundant headers
- windows: simplify detecting and using system headers
- wolfssl: load certificate *chain* for PEM client certs
- x509asn1: remove code for WANT_VERIFYHOST
- x509asn1: switch from malloc to dynbuf

## Fixed in 8.5.0 - December 6 2023

8.5.0
8.5.0
8.5.0 changes only

Changes:

- gnutls: support CURLSSLOPT_NATIVE_CA
- HTTP3: ngtcp2 builds are no longer experimental

Bugfixes:

- appveyor: make VS2008-built curl tool runnable
- asyn-thread: use pipe instead of socketpair for IPC when available
- autotools: accept linker flags via `CURL_LDFLAGS_{LIB,BIN}`
- autotools: avoid passing `LDFLAGS` twice to libcurl
- autotools: delete LCC compiler support bits
- autotools: fix/improve gcc and Apple clang version detection
- autotools: stop setting `-std=gnu89` with `--enable-warnings`
- autotools: update references to deleted `crypt-auth` option
- BINDINGS: add V binding
- build: add `src/.checksrc` to source tarball
- build: add more picky warnings and fix them
- build: always revert `#pragma GCC diagnostic` after use
- build: delete `HAVE_STDINT_H` and `HAVE_INTTYPES_H`
- build: delete support bits for obsolete Windows compilers
- build: fix 'threadsafe' feature detection for older gcc
- build: fix builds that disable protocols but not digest auth
- build: fix compiler warning with auths disabled
- build: fix libssh2 + `CURL_DISABLE_DIGEST_AUTH` + `CURL_DISABLE_AWS`
- build: picky warning updates
- build: require Windows XP or newer
- cfilter: provide call to tell connection to forget a socket
- CI: add autotools, out-of-tree, debug build to distro check job
- CI: ignore test 286 on Appveyor gcc 9 build
- cmake: add `CURL_DISABLE_BINDLOCAL` option
- cmake: add test for `DISABLE` options, add `CURL_DISABLE_HEADERS_API`
- cmake: dedupe Windows system libs
- cmake: fix `HAVE_H_ERRNO_ASSIGNABLE` detection
- cmake: fix CURL_DISABLE_GETOPTIONS
- cmake: fix multiple include of CURL package
- cmake: fix OpenSSL quic detection in quiche builds
- cmake: option to disable install & drop `curlu` target when unused
- cmake: pre-fill rest of detection values for Windows
- cmake: replace `check_library_exists_concat()`
- cmake: speed up threads setup for Windows
- cmake: speed up zstd detection
- config-win32: set `HAVE_SNPRINTF` for mingw-w64
- configure: better --disable-http
- configure: check for the fseeko declaration too
- conncache: use the closure handle when disconnecting surplus connections
- content_encoding: make Curl_all_content_encodings allocless
- cookie: lowercase the domain names before PSL checks
- curl.h: delete Symbian OS references
- curl.h: on FreeBSD include sys/param.h instead of osreldate.h
- curl.rc: switch out the copyright symbol for plain ASCII
- curl: improved IPFS and IPNS URL support
- curl_easy_duphandle.3: clarify how HSTS and alt-svc are duped
- Curl_http_body: cleanup properly when Curl_getformdata errors
- curl_setup: disallow Windows IPv6 builds missing getaddrinfo
- curl_sspi: support more revocation error names in error messages
- CURLINFO_PRETRANSFER_TIME_T.3: fix time explanation
- CURLMOPT_MAX_CONCURRENT_STREAMS: make sure the set value is within range
- CURLOPT_CAINFO_BLOB.3: explain what CURL_BLOB_COPY does
- CURLOPT_WRITEFUNCTION.3: clarify libcurl returns for CURL_WRITEFUNC_ERROR
- CURPOST_POSTFIELDS.3: add CURLOPT_COPYPOSTFIELDS in SEE ALSO
- docs/example/keepalive.c: show TCP keep-alive options
- docs/example/localport.c: show off CURLOPT_LOCALPORT
- docs/examples/interface.c: show CURLOPT_INTERFACE use
- docs/libcurl: fix three minor man page format mistakes
- docs/libcurl: SYNSOPSIS cleanup
- docs: add supported version for the json write-out
- docs: clarify that curl passes on input unfiltered
- docs: fix function typo in curl_easy_option_next.3
- docs: KNOWN_BUGS cleanup
- docs: preserve the modification date when copying the prebuilt man page
- docs: remove bold from some man page SYNOPSIS sections
- docs: use SOURCE_DATE_EPOCH for generated man pages
- doh: provide better return code for responses w/o addresses
- doh: use PIPEWAIT when HTTP/2 is attempted
- duphandle: also free 'outcurl->cookies' in error path
- duphandle: make dupset() not return with pointers to old alloced data
- duphandle: use strdup to clone *COPYPOSTFIELDS if size is not set
- easy: in duphandle, init the cookies for the new handle
- easy: remove duplicate wolfSSH init call
- easy_lock: add a pthread_mutex_t fallback
- fopen: create new file using old file's mode
- fopen: create short(er) temporary filename
- getenv: PlayStation doesn't have getenv()
- GHA: move mod_h2 version in CI to v2.0.25
- hostip: show the list of IPs when resolving is done
- hostip: silence compiler warning `-Wparentheses-equality`
- hsts: skip single-dot hostname
- HTTP/2, HTTP/3: handle detach of onoing transfers
- http2: header conversion tightening
- http2: provide an error callback and failf the message
- http2: safer invocation of populate_binsettings
- http: allow longer HTTP/2 request method names
- http: avoid Expect: 100-continue if Upgrade: is used
- http: consider resume with CURLOPT_FAILONERRROR and 416 to be fine
- http: fix `-Wunused-parameter` with no auth and no proxy
- http: fix `-Wunused-variable` compiler warning
- http: fix empty-body warning
- http_aws_sigv4: canonicalise valueless query params
- hyper: temporarily remove HTTP/2 support
- INSTALL: update list of ports and CPU archs
- IPFS: fix IPFS_PATH and file parsing
- keylog: disable if unused
- lib: add and use Curl_strndup()
- lib: apache style infof and trace macros/functions
- lib: fix gcc warning in printf call
- libcurl-errors.3: sync with current public headers
- libcurl-thread.3: simplify the TLS section
- Makefile.am: drop vc10, vc11 and vc12 projects from dist
- Makefile.mk: fix `-rtmp` option for non-Windows
- mime: store "form escape" as a single bit
- misc: fix -Walloc-size warnings
- msh3: error when built with CURL_DISABLE_SOCKETPAIR set
- multi: during ratelimit multi_getsock should return no sockets
- multi: use pipe instead of socketpair to *wakeup()
- ngtcp2: fix races in stream handling
- ntlm_wb: use pipe instead of socketpair when possible
- openldap: move the alloc of ldapconninfo to *connect()
- openldap: set the callback argument in oldap_do
- openssl: avoid BN_num_bits() NULL pointer derefs
- openssl: fix building with v3 `no-deprecated` + add CI test
- openssl: fix infof() to avoid compiler warning for %s with null
- openssl: identify the "quictls" backend correctly
- openssl: include SIG and KEM algorithms in verbose
- openssl: make CURLSSLOPT_NATIVE_CA import Windows intermediate CAs
- openssl: two multi pointer checks should probably rather be asserts
- openssl: when a session-ID is reused, skip OCSP stapling
- page-footer: clarify exit code 25
- projects: add VC14.20 project files
- pytest: use lower count in repeat tests
- quic: make eyeballers connect retries stop at weird replies
- quic: manage connection idle timeouts
- quiche: use quiche_conn_peer_transport_params()
- rand: fix build error with autotools + LibreSSL
- resolve.d: drop a multi use-sentence
- RTSP: improved RTP parser
- sasl: fix `-Wunused-function` compiler warning
- schannel: add CA cache support for files and memory blobs
- setopt: check CURLOPT_TFTP_BLKSIZE range on set
- setopt: remove outdated cookie comment
- setopt: remove superfluous use of ternary expressions
- socks: better buffer size checks for socks4a user and hostname
- socks: make SOCKS5 use the CURLOPT_IPRESOLVE choice
- symbols-in-versions: the CLOSEPOLICY options are deprecated
- test1683: remove commented-out check alternatives
- test3103: add missing quotes around a test tag attribute
- test613: stop showing an error on missing output file
- tests/README: SOCKS tests are not using OpenSSH, it has its own server
- tests/server: add more SOCKS5 handshake error checking
- tests: Fix Windows test helper tool search & use it for handle64
- tidy-up: casing typos, delete unused Windows version aliases
- tool: fix --capath when proxy support is disabled
- tool: support bold headers in Windows
- tool_cb_hdr: add an additional parsing check
- tool_cb_prg: make the carriage return fit for wide progress bars
- tool_cb_wrt: fix write output for old Windows versions
- tool_getparam: limit --rate to be smaller than number of ms
- tool_operate: do not mix memory models
- tool_operate: fix links in ipfs errors
- tool_parsecfg: make warning output propose double-quoting
- tool_urlglob: fix build for old gcc versions
- tool_urlglob: make multiply() bail out on negative values
- tool_writeout_json: fix JSON encoding of non-ascii bytes
- transfer: abort pause send when connection is marked for closing
- transfer: avoid calling the read callback again after EOF
- transfer: only reset the FTP wildcard engine in CLEAR state
- url: don't touch the multi handle when closing internal handles
- url: find scheme with a "perfect hash"
- url: fix `-Wzero-length-array` with no protocols
- url: fix builds with `CURL_DISABLE_HTTP`
- url: protocol handler lookup tidy-up
- url: proxy ssl connection reuse fix
- urlapi: avoid null deref if setting blank host to URL encode
- urlapi: skip appending NULL pointer query
- urlapi: when URL encoding the fragment, pass in the right length
- urldata: make maxconnects a 32-bit value
- urldata: move async resolver state from easy handle to connectdata
- urldata: move cookielist from UserDefined to UrlState
- urldata: move hstslist from 'set' to 'state'
- urldata: move the 'internal' boolean to the state struct
- vssh: remove the #ifdef for Curl_ssh_init, use empty macro
- vtls: cleanup SSL config management
- vtls: consistently use typedef names for OpenSSL structs
- vtls: late clone of connection ssl config
- vtls: use ALPN "http/1.1" for HTTP/1.x, including HTTP/1.0
- VULN-DISCLOSURE-POLICY: escape sequences are not a security flaw
- windows: use built-in `_WIN32` macro to detect Windows
- wolfssh: remove redundant static prototypes
- wolfssl: add default case for wolfssl_connect_step1 switch
- wolfssl: require WOLFSSL_SYS_CA_CERTS for loading system CA

## Fixed in 8.4.0 - October 11 2023

8.4.0
8.4.0
8.4.0 changes only

Changes:

- curl: add support for the IPFS protocols via HTTP gateway
- curl_multi_get_handles: get easy handles from a multi handle
- mingw: delete support for legacy mingw.org toolchain

Bugfixes:

- acinclude.m4: Document proper system truststore on FreeBSD
- appveyor: fix yamlint issues, indent
- appveyor: rewrite batch in PowerShell + CI improvements
- autotools: adjust `CURL_CA_PATH` value to CMake
- autotools: restore `HAVE_IOCTL_*` detections
- base64: also build for curl
- bufq: remove Curl_bufq_skip_and_shift (unused)
- build: delete checks for C89 standard headers
- build: do not publish `HAVE_BORINGSSL`, `HAVE_AWSLC` macros
- cf-socket: simulate slow/blocked receives in debug
- cmake, configure: also link with CoreServices
- cmake: add check for suseconds_t
- cmake: add feature checks for `memrchr` and `getifaddrs`
- cmake: add missing checks
- cmake: delete old `HAVE_LDAP_URL_PARSE` logic
- cmake: detect `HAVE_CLOCK_GETTIME_MONOTONIC_RAW`
- cmake: detect `HAVE_GETADDRINFO_THREADSAFE`
- cmake: detect `sys/wait.h` and `netinet/udp.h`
- cmake: detect TLS-SRP in OpenSSL/wolfSSL/GnuTLS
- cmake: disable unity mode with Windows Unicode + TrackMemory
- cmake: fix `HAVE_LDAP_SSL`, `HAVE_LDAP_URL_PARSE` on non-Windows
- cmake: fix `HAVE_WRITABLE_ARGV` detection
- cmake: fix duplicate symbols when linking tests
- cmake: fix missing `zlib.h` when compiling `libcurltool`
- cmake: fix stderr initialization in unity builds
- cmake: fix the help text to the static build option in CMakeLists.txt
- cmake: fix unity builds for more build combinations
- cmake: fix unity symbol collisions in h2 builds
- cmake: fix unity with Windows Unicode + TrackMemory
- cmake: improve OpenLDAP builds
- cmake: lib `CURL_STATICLIB` fixes (Windows)
- cmake: move global headers to specific checks
- cmake: pre-cache `HAVE_BASENAME` for mingw-w64 and MSVC
- cmake: pre-cache `HAVE_POLL_FINE` on Windows
- cmake: tidy-up `NOT_NEED_LBER_H` detection
- cmake: validate `CURL_DEFAULT_SSL_BACKEND` config value
- configure: check for the capath by default
- configure: remove unused checks
- configure: replace adhoc domain with `localhost` in tests
- configure: sort AC_CHECK_FUNCS
- connect: expire the timeout when trying next
- connect: only start the happy eyeballs timer when needed
- cookie: do not store the expire or max-age strings
- cookie: remove unnecessary struct fields
- cookie: set ->running in cookie_init even if data is NULL
- create-dirs.d: clarify it also uses --output-dirs
- curl.h: mark CURLSSLBACKEND_NSS as deprecated since 8.3.0
- curl_easy_pause.3: mention h2/h3 buffering
- curl_easy_pause.3: mention it works within callbacks
- curl_easy_pause: set "in callback" true on exit if true
- CURLOPT_DEBUGFUNCTION.3: warn about internal handles
- docs/libcurl/opts/Makefile.inc: add missing man page files
- docs: adapt SEE ALSO sections to new requirements
- docs: explain how PINNEDPUBLICKEY is independent of VERIFYPEER
- docs: replace made up domains with example.com
- docs: update curl man page references
- docs: use CURLSSLBACKEND_NONE
- doh: inherit DEBUGFUNCTION/DATA
- escape: replace Curl_isunreserved with ISUNRESERVED
- FAQ: How do I upgrade curl.exe in Windows?
- GHA/linux: run singleuse to detect single-use global functions
- GHA: add workflow to compare configure vs cmake outputs
- h2-proxy: remove left-over mistake in drain_tunnel()
- h2: testcase and fix for pausing h2 streams
- h3: add support for ngtcp2 with AWS-LC builds
- http2: refused stream handling for retry
- http: fix CURL_DISABLE_BEARER_AUTH breakage
- http: h1/h2 proxy unification
- http: remove wrong comment for http_should_fail
- http: use per-request counter to check too large headers
- http_aws_sigv4: fix sorting with empty parts
- idn: fix WinIDN null ptr deref on bad host
- idn: if idn2_check_version returns NULL, return error
- inet_ntop: add typecast to silence Coverity
- lib: disambiguate Curl_client_write flag semantics
- lib: enable hmac for digest as well
- lib: failf/infof compiler warnings
- lib: let the max filesize option stop too big transfers too
- lib: move handling of `data->req.writer_stack` into Curl_client_write()
- lib: provide and use Curl_hexencode
- lib: remove TIME_WITH_SYS_TIME
- lib: use wrapper for curl_mime_data fseek callback
- libssh2: fix error message on failed pubkey-from-file
- libssh: cap SFTP packet size sent
- Makefile.mk: always set `CURL_STATICLIB` for lib (Windows)
- MANUAL.md: change domain to example.com
- misc: better random strings
- MQTT: improve receive of ACKs
- multi: do CURLM_CALL_MULTI_PERFORM at two more places
- multi: fix small timeouts
- multi: remove Curl_multi_dump
- multi: round the timeout up to prevent early wakeups
- multi: set CURLM_CALL_MULTI_PERFORM after switch to DOING_MORE
- openssl: improve ssl shutdown handling
- openssl: use X509_ALGOR_get0 instead of reaching into X509_ALGOR
- pytest: exclude test_03_goaway in CI runs due to timing dependency
- quic: set ciphers/curves the same way regular TLS does
- quiche: fix build error with --with-ca-fallback
- RELEASE-PROCEDURE.md: updated coming release dates
- runtests: display the test status if tests appear hung
- runtests: eliminate a warning on old perl versions
- socks: return error if hostname too long for remote resolve
- src/mkhelp: make generated code pass `checksrc`
- test1056: disable on Windows
- test1474: disable test on NetBSD, OpenBSD and Solaris 10
- test1592: greatly increase the maximum test timeout
- test1903: actually verify the cookies after the test
- test1906: set a lower timeout since it's hit on Windows
- test2600: remove special case handling for USE_ALARM_TIMEOUT
- test650: fix an end tag typo
- test661: return from test early in case of curl error
- test: add missing <feature>s
- tests: close the shell used to start sshd
- tests: fix a race condition in ftp server disconnect
- tests: fix compiler warnings
- tests: Fix zombie processes left behind by FTP tests.
- tests: improve SLOWDOWN test reliability by reducing sent data
- tests: increase lib571 timeout from 3s to 30s
- tests: log the test result code after each libtest
- tests: propagate errors in libtests
- tests: set --expect100-timeout to improve test reliability
- tests: show which curl tool `runtests.pl` is using
- tests: stop overriding the lock timeout
- tftpd: always use curl's own tftp.h
- tool: use our own stderr variable
- tool_cb_wrt: fix debug assertion
- tool_getparam: accept variable expansion on filenames too
- tool_setopt: remove unused function tool_setopt_flags
- upload-file.d: describe the filename slash/backslash handling
- url: fall back to http/https proxy env-variable if ws/wss not set
- url: fix netrc info message
- warnless: remove unused functions
- wolfssh: do cleanup in Curl_ssh_cleanup
- wolfssl: allow capath with CURLOPT_CAINFO_BLOB
- wolfssl: if CURLOPT_CAINFO_BLOB is set, ignore the CA files
- wolfssl: ignore errors in CA path

## Fixed in 8.3.0 - September 13 2023

8.3.0
8.3.0
8.3.0 changes only

Changes:

- curl: make %output{} in -w specify a file to write to
- gskit: remove
- lib: --disable-bindlocal builds curl without local binding support
- nss: remove support for this TLS library
- tool: add "variable" support
- trace: make tracing available in non-debug builds
- url: change default value for CURLOPT_MAXREDIRS to 30
- urlapi: CURLU_PUNY2IDN - convert from punycode to IDN name
- wolfssl: support loading system CA certificates

Bugfixes:

- altsvc: accept and parse IPv6 addresses in response headers
- asyn-ares: reduce timeout to 2000ms
- aws-sigv4: canonicalize the query
- aws-sigv4: fix having date header twice in some cases
- aws-sigv4: handle no-value user header entries
- bearssl: don't load CA certs when peer verification is disabled
- bearssl: handshake fix, provide proper get_select_socks() implementation
- build: fix portability of mancheck and checksrc targets
- build: streamline non-UWP wincrypt detections
- c-hyper: adjust the hyper to curlcode conversion
- c-hyper: fix memory leaks in `Curl_http`
- cf-haproxy: make CURLOPT_HAPROXY_CLIENT_IP set the *source* IP
- cf-socket: log successful interface bind
- CI/cirrus: disable python install on FreeBSD
- CI: add a 32-bit i686 Linux build
- CI: add caching to many jobs
- CI: move on to ngtcp2 v0.19.1
- CI: move the Alpine build from Cirrus to GHA
- CI: ngtcp2-linux: use separate caches for tls libraries
- CI: remove Windows builds from Cirrus, without replacement
- CI: switch macOS ARM build from Cirrus to Circle CI
- CI: use master again for wolfssl
- cirrus: install everything with pkg, avoid pip
- cmake: add GnuTLS option
- cmake: add support for `CURL_DEFAULT_SSL_BACKEND`
- cmake: add support for single libcurl compilation pass
- cmake: allow `SHARE_LIB_OBJECT=ON` on all platforms
- cmake: assume `wldap32` availability on Windows
- cmake: cache more config and delete unused ones
- cmake: detect `SSL_set0_wbio` in OpenSSL
- cmake: drop `HAVE_LIBWINMM` and `HAVE_LIBWS2_32` feature checks
- cmake: fix to use variable for the curl namespace
- cmake: fixup H2 duplicate symbols for unity builds
- cmake: set SIZEOF_LONG_LONG in curl_config.h
- cmake: support building static and shared libcurl in one go
- cmdline-docs: make sure to phrase it as "added in ...."
- cmdline-docs: use present tense, not future
- cmdline-opts/docs: mention the negative option part
- cmdline-opts/page-header: clarify stronger that !opt == URL
- cmdline-opts/page-header: reorder, clean up
- configure, cmake, lib: more form api deprecation
- configure: fix `HAVE_TIME_T_UNSIGNED` check
- configure: trust pkg-config when it's used for zlib
- configure: use the pkg-config --libs-only-l flag for libssh2
- connect: stop halving the remaining timeout when less than 600 ms left
- cookie-jar.d: emphasize that this option is ONLY writing cookies
- crypto: ensure crypto initialization works
- curl_url_get/set.3: add missing semicolon in SYNOPSIS
- CURLINFO_CERTINFO.3: better explain curl_certinfo struct
- CURLINFO_TLS_SSL_PTR.3: clarify a recommendation
- CURLOPT_*TIMEOUT*: extend and clarify
- CURLOPT_SSL_VERIFYPEER.3: mention it does not load CA certs when disabled
- CURLOPT_URL.3: add two URL API calls in the see-also section
- CURLOPT_URL.3: explain curl_url_set() uses the same parser
- digest: Use hostname to generate spn instead of realm
- disable.d: explain --disable not implemented prior to 7.50.0
- docs/cmdline-opts/gen.pl: hide "added in" before 7.50.0
- docs/cmdline-opts: match the current output
- docs/cmdline-opts: spellfixes, typos and polish
- docs/cmdline: add small "warning" to verbose options
- docs/cmdline: remove repeated working for negotiate + ntlm
- docs/HYPER.md: document a workaround for a link error
- docs: add curl_global_trace to some SEE ALSO sections
- docs: link to the website versions instead of markdowns
- docs: mark --ssl-revoke-best-effort as Schannel specific
- docs: mention critical files in same directories as curl saves
- docs: removing "pausing transfers" from HYPER.md.
- docs: rewrite to present tense
- easy: remove #ifdefs to make code easier on the eye
- egd: delete feature detection and related source code
- ftp: fix temp write of ipv6 address
- gen.pl: escape all dashes (ascii minus) to avoid unicode hyphens
- gen.pl: replace all single quotes with aq
- GHA: adding quiche workflow
- headers: accept leading whitespaces on first response header
- http2: avoid too early connection reuse/multiplexing
- http2: cleanup trace messages
- http2: disable assertion blocking OSSFuzz testing
- http2: fix in h2 proxy tunnel: progress in ingress on sending
- http2: polish things around POST
- http2: upgrade tests and add fix for non-existing stream
- http3/ngtcp2: shorten handshake, trace cleanup
- http3: quiche, handshake optimization, trace cleanup
- http: close the connection after a late 417 is received
- http: do not require a username when using CURLAUTH_NEGOTIATE
- http: fix sending of large requests
- http: remove the p_pragma struct field
- http: return error when receiving too large header set
- hyper: fix a progress upload counter bug
- hyper: fix ownership problems
- hyper: remove `hyptransfer->endtask`
- imap: add a check for failing strdup()
- imap: remove the only sscanf() call in the IMAP code
- include.d: explain headers not printed with --fail before 7.75.0
- include/curl/mprintf.h: add __attribute__ for the prototypes
- krb5: fix "implicit conversion loses integer precision" warnings
- lib: add ability to disable auths individually
- lib: build fixups when built with most things disabled
- lib: fix a few *printf() flag mistakes
- lib: fix null ptr derefs and uninitialized vars (h2/h3)
- lib: move mimepost data from ->req.p.http to ->state
- libtest: use curl_free() to free libcurl allocated data
- list-only.d: mention SFTP as supported protocol
- macOS: fix target detection more
- misc: fix various typos
- multi.h: the 'revents' field of curl_waitfd is supported
- multi: more efficient pollfd count for poll
- multi: remove 'processing: <url>' debug message
- ngtcp2: fix handling of large requests
- openssl: auto-detect `SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED`
- openssl: clear error queue after SSL_shutdown
- openssl: make aws-lc version support OCSP
- openssl: Support async cert verify callback
- openssl: switch to modern init for LibreSSL 2.7.0+
- openssl: use `SSL_CTX_set_ciphersuites` with LibreSSL 3.4.1
- openssl: use `SSL_CTX_set_keylog_callback` with LibreSSL 3.5.0
- openssl: when CURLOPT_SSL_CTX_FUNCTION is registered, init x509 store before
- os400: build test servers
- os400: do not check translatable options at build time
- os400: implement CLI tool
- page-footer: QLOGDIR works with ngtcp2 and quiche
- page-header: move up a URL paragraph from GLOBBING to URL
- pytest: fix check for slow_network skips to only apply when intended
- quic: don't set SNI if hostname is an IP address
- quiche: adjust quiche `QUIC_IDLE_TIMEOUT` to 60s
- quiche: enable quiche to handle timeout events
- resolve: use PF_INET6 family lookups when CURL_IPRESOLVE_V6 is set
- revert "schannel: reverse the order of certinfo insertions"
- schannel: fix ordering of cert chain info
- schannel: fix user-set legacy algorithms in Windows 10 & 11
- schannel: verify hostname independent of verify cert
- sectransp: fix compiler warnings
- sectransp: prevent CFRelease() of NULL
- secureserver.pl: fix stunnel path quoting
- secureserver.pl: fix stunnel version parsing
- SECURITY-PROCESS.md: not a sec issue: Tricking user to run a cmdline
- system.h: add CURL_OFF_T definitions on HP-UX with HP aCC
- test1304: build and skip without netrc support
- test1554: check translatable string options in OS400 wrapper
- test1608: make it build and get skipped without shuffle DNS support
- test687/688: two more basic --xattr tests
- tests/tftpd+mqttd: make variables static to silence picky warnings
- tests: add 'large-time' as a testable feature
- tests: add support for nested %if conditions
- tests: don't call HTTP errors OK in test cases
- tests: ensure `libcurl.def` contains all exports
- tests: fix h3 server check and parallel instances
- tests: TLS session sharing test
- tests: update cookie expiry dates to far in the future
- time-cond.d: mention what happens on a missing file
- tool: avoid including leading spaces in the Location hyperlink
- tool: change some fopen failures from warnings to errors
- tool: make the length argument an int for printf()-.* flags
- tool_cb_wrt: fix invalid unicode for windows console
- tool_filetime: make -z work with file dates before 1970
- tool_operate: allow both SSL_CERT_FILE and SSL_CERT_DIR
- tool_operate: make aws-sigv4 not require TLS to be used
- tool_paramhlp: improve str2num(): avoid unnecessary call to strlen()
- tool_urlglob: use the correct format specifier for curl_off_t in msnprintf
- transfer: also stop the sending on closed connection
- transfer: don't set TIMER_STARTTRANSFER on first send
- unit2600: fix build warning if built without verbose messages
- url: remove infof() output for "still name resolving"
- urlapi: fix heap buffer overflow
- urlapi: make sure zoneid is also duplicated in curl_url_dup
- urlapi: return CURLUE_BAD_HOSTNAME if puny2idn encoding fails
- urlapi: setting a blank URL ("") is not an ok URL
- vquic: show stringified messages for errno
- vtls: clarify "ALPN: offers" message
- winbuild: improve check for static zlib
- wolfSSL: avoid the OpenSSL compat API when not needed
- workflows/macos.yml: disable zstd and alt-svc in the http-only build
- write-out.d: clarify %{time_starttransfer}
- ws: fix spelling mistakes in examples and tests

## Fixed in 8.2.1 - July 26 2023

8.2.1
8.2.1
8.2.1 changes only

Bugfixes:

- amigaos: fix sys/mbuf.h m_len macro clash
- amissl: add missing signal.h include
- amissl: fix AmiSSL v5 detection
- cfilters: rename close/connect functions to avoid clashes
- ciphers.d: put URL in first column
- cmake: add `libcurlu`/`libcurltool` for unit tests
- cmake: update ngtcp2 detection
- configure: check for nghttp2_session_get_stream_local_window_size
- CONTRIBUTE: drop mention of copyright year ranges
- CONTRIBUTE: fix syntax in commit message description
- curl_multi_wait.3: fix arg quoting to doc macro .BR
- docs: mark two TLS options for TLS, not SSL
- docs: provide more see also for cipher options
- hostip: return IPv6 first for localhost resolves
- http2: fix regression on upload EOF handling
- http: VLH, large header test and fixes
- libcurl-errors.3: add CURLUE_OK
- os400: correct EXPECTED_STRING_LASTZEROTERMINATED
- quiche: fix lookup of transfer at multi
- quiche: fix segfault and other things
- rustls: update rustls-ffi 0.10.0
- socks: print ipv6 address within brackets
- src/mkhelp: strip off escape sequences
- tool: fix tool_seek_cb build when SIZEOF_CURL_OFF_T > SIZEOF_OFF_T
- transfer: do not clear the credentials on redirect to absolute URL
- unittest: remove unneeded *_LDADD
- websocket: rename arguments/variables to match docs

## Fixed in 8.2.0 - July 19 2023

8.2.0
8.2.0
8.2.0 changes only

Changes:

- curl: add --ca-native and --proxy-ca-native
- curl: add --trace-ids
- CURLOPT_MAIL_RCPT_ALLOWFAILS: replace CURLOPT_MAIL_RCPT_ALLLOWFAILS
- haproxy: add --haproxy-clientip flag to set client IPs
- lib: add CURLINFO_CONN_ID and CURLINFO_XFER_ID

Bugfixes:

- bufq: make write/pass methods more robust
- build: drop unused/redundant `HAVE_WINLDAP_H`
- cf-socket: don't bypass fclosesocket callback if cancelled before connect
- cf-socket: move ctx declaration under HAVE_GETPEERNAME
- cf-socket: skip getpeername()/getsockname for TFTP
- checksrc: modernise perl file open
- checksrc: quote the filename to work with "funny" letters
- CI: brew fix for openssl in default path
- CI: don't install impacket if tests are not run
- CI: enable parallel make in more builds
- circleci: install impacket & wolfssl 5.6.0
- cmake: add support for "unity" builds
- cmake: make use of snprintf
- cmake: stop CMake from quietly ignoring missing Brotli
- configure: add check for ldap_init_fd
- configure: fix run-compiler for old /bin/sh
- configure: the --without forms of the options are also gone
- connect-timeout.d: mention that the DNS lookup is included
- curl.h: include <sys/select.h> for vxworks
- curl: count uploaded data to stop at the originally given size
- curl: return error when asked to use an unsupported HTTP version
- curl_easy_nextheader.3: add missing open parenthesis examples
- curl_log: evaluate log statement only when transfer is verbose
- curl_mprintf.3: minor fix of the example
- curl_pushheader_byname/bynum.3: document in their own man pages
- curl_url_set: enforce the max string length check for all parts
- CURLOPT_AWS_SIGV4.3: remove unused variable from example
- CURLOPT_INFILESIZE.3: mention -1 triggers chunked
- CURLOPT_MIMEPOST.3: clarify what setting to NULL means
- CURLOPT_SSH_PRIVATE_KEYFILE.3: expand on the file search
- docs/libcurl/libcurl.3: cleanups and improvements
- docs: add more .IP after .RE to fix indentation of generate paragraphs
- docs: fix missing parameter names in examples
- docs: update CURLOPT_UPLOAD.3
- docs: update HTTP3.md for newer ngtcp2 and nghttp3
- docs: use a space after RFC when spelling out RFC numbers
- example/connect-to: show CURLOPT_CONNECT_TO
- example/crawler: also set CURLOPT_AUTOREFERER
- example/crawler: make it use a few more options
- example/default-scheme: set the default scheme for schemeless URLs
- example/hsts-preload: show one way to HSTS preload
- example/http2-download: set CURLOPT_BUFFERSIZE
- example/ipv6: feature CURLOPT_ADDRESS_SCOPE in use
- example/maxconnects: set maxconnect example
- example/opensslthreadlock: remove
- examples/ftpuploadresume.c: add use of CURLOPT_ACCEPTTIMEOUT_MS
- examples/http-options: show how to send "OPTIONS *"
- examples/https.c: use CURLOPT_CA_CACHE_TIMEOUT
- examples/multi-debugcallback.c: avoid the bool typedef
- examples/smtp-mime: use CURLOPT_MAIL_RCPT_ALLOWFAILS
- examples/unixsocket.c: example using CURLOPT_UNIX_SOCKET_PATH
- examples/websocket.c: websocket example using CONNECT_ONLY
- examples: make use of CURLOPT_(REDIR_|)PROTOCOLS_STR
- fopen: fix conversion warning on 32-bit Android
- fopen: optimize
- hostip.c: Move macOS-specific calls into global init call
- HTTP/2: upload handling fixes
- http2: better support for --limit-rate
- http2: error stream resets with code CURLE_HTTP2_STREAM
- http2: fix crash in handling stream weights
- http2: fix variable type
- http2: h2 and h2-PROXY connection alive check fixes
- http2: raise header limitations above and beyond
- http2: send HEADER & DATA together if possible
- http2: treat initial SETTINGS as a WINDOW_UPDATE
- HTTP3.md: update openssl version
- http3/ngtcp2: upload EAGAIN handling
- http: rectify the outgoing Cookie: header field size check
- hyper: fix EOF handling on input
- hyper: unslow
- imap-append.c: update to make it more likely to work
- imap: Provide method to disable SASL if it is advertised
- krb5: add typecast to please Coverity
- libcurl-url.3: also mention CURLUPART_ZONEID
- libcurl-ws.3. WebSocket API overview
- libssh2: provide error message when setting host key type fails
- libssh2: use custom memory functions
- ngtcp2: assigning timeout, but value is overwritten before used
- ngtcp2: build with 0.17.0 and nghttp3 0.13.0
- ngtcp2: use ever increasing timestamp in io
- quiche: avoid NULL deref in debug logging
- quiche: fix defects found in latest coverity report
- quote.d: fix indentation of generated paragraphs
- runtests: abort test run after failure without -a
- runtests: better handle ^C during slow tests
- runtests: consistently write the test check summary block
- runtests: create multiple test runners when requested
- runtests: include missing valgrind package
- runtests: make test file directories in log/N
- runtests: rename server command file
- runtests: use more consistent failure lines
- runtests: work around a perl without SIGUSR1
- runtests; give each server a unique log lock file
- scripts: Fix GHA matrix job detection in cijobs.pl
- sectransp: fix EOF handling
- system.h: remove __IBMC__/__IBMCPP__ guards and apply to all z/OS compiles
- test2600: fix the description
- test427: verify sending more cookies than fit in a 8190 bytes line
- tests/http: Add mod_h2 directive `H2ProxyRequests`
- tests/servers.pm: pick unused port number with a server socket
- tests/servers: generate temp names in /tmp for unix domain sockets
- tests: fix error messages & handling around sockets
- tests: improve reliability of TFTP tests
- testutil: allow multiple %-operators on the same line
- timeval: use CLOCK_MONOTONIC_RAW if available
- tls13-ciphers.d: include Schannel
- tool: remove exclamation marks from error/warning messages
- tool: remove newlines from all helpf/notef/warnf/errorf calls
- tool_easysrc.h: correct `easysrc_perform` for `CURL_DISABLE_LIBCURL_OPTION`
- tool_getparam: fix comment
- tool_operate: allow cookie lines up to 8200 bytes
- tool_parsecfg: accept line lengths up to 10M
- tool_urlglob: use curl_off_t instead of longs
- tool_writeout_json: fix encoding of control characters
- transfer: clear credentials when redirecting to absolute URL
- urlapi: have *set(PATH) prepend a slash if one is missing
- urlapi: scheme must start with alpha
- vtls: avoid memory leak if sha256 call fails
- websocket-cb: example doing WebSocket download using callback
- wolfssl: detect when TLS 1.2 support is not built into wolfssl
- wolfssl: support setting CA certificates as blob
- ws: make the curl_ws_meta() return pointer a const

## Fixed in 8.1.2 - May 30 2023

8.1.2
8.1.2
8.1.2 changes only

Bugfixes:

- configure: quote the assignments for run-compiler
- configure: without pkg-config and no custom path, use -lnghttp2
- curl: cache the --trace-time value for a second
- http2: fix EOF handling on uploads with auth negotiation
- http3: send EOF indicator early as possible
- lib1560: verify more scheme guessing
- lib: remove unused functions, make single-use static
- libcurl.m4: remove trailing 'dnl' that causes this to break autoconf
- libssh: when keyboard-interactive auth fails, try password
- misc: fix spelling mistakes
- page-header: mention curl version and how to figure out current release
- page-header: minor wording polish in the URL segment
- scripts/singleuse.pl: add more API calls
- urlapi: remove superfluous hostname check

## Fixed in 8.1.1 - May 23 2023

8.1.1
8.1.1
8.1.1 changes only

Bugfixes:

- cf-socket: completely remove the disabled USE_RECV_BEFORE_SEND_WORKAROUND
- checksrc: disallow spaces before labels
- cmake: avoid `list(PREPEND)` for compatibility
- cmake: repair cross compiling
- configure: fix --help alignment
- configure: generate a script to run the compiler
- curl_easy_getinfo: clarify on return data types
- docs: document that curl_url_cleanup(NULL) is a safe no-op
- hostip: move easy_lock.h include above curl_memory.h
- http2: double http request parser max line length
- http2: increase stream window size to 10 MB
- http2: upload improvements
- lib: fix conversion warnings with gcc on macOS
- lib: rename struct 'http_req' to 'httpreq'
- ngtcp2: fix compiler warning about possible null-deref
- ngtcp2: proper handling of uint64_t when adjusting send buffer
- os400: update chkstrings.c
- runtests: handle interrupted reads from IPC pipes
- runtests: use the correct fd after select
- sectransp.c: make the code c89 compatible
- select: avoid returning an error on EINTR from select() or poll()
- test425: fix the log directory for the upload
- url: provide better error message when URLs fail to parse
- urlapi: allow numerical parts in the hostname
- vquic.c: make recvfrom_packets static, avoid compiler warning

## Fixed in 8.1.0 - May 17 2023

8.1.0
8.1.0
8.1.0 changes only

Changes:

- curl: add --proxy-http2
- CURLPROXY_HTTPS2: for HTTPS proxy that may speak HTTP/2
- hostip: refuse to resolve the .onion TLD
- tool_writeout: add URL component variables

Bugfixes:

- amiga: Fix CA certificate paths for AmiSSL and MorphOS
- autotools: sync up clang picky warnings with cmake
- aws-sigv4.d: fix region identifier in example
- bufq: simplify since expression is always true
- cf-h1-proxy: skip an extra NULL assign
- cf-h2-proxy: fix processing ingress to stop too early
- cf-socket: add socket recv buffering for most tcp cases
- cf-socket: Disable socket receive buffer by default
- cf-socket: remove dead code discovered by PVS
- cf-socket: turn off IPV6_V6ONLY on Windows if it is supported
- checksrc: check for spaces before the colon of switch labels
- checksrc: find bad indentation in conditions without open brace
- checksrc: fix SPACEBEFOREPAREN for conditions starting with "*"
- ci: `-Wno-vla` no longer necessary
- CI: fix brew retries on GHA
- CI: Set minimal permissions on workflow ngtcp2-quictls.yml
- CI: skip Azure for commits which change only GHA
- CI: use another glob syntax for matching files on Appveyor
- cmake: bring in the network library on Haiku
- cmake: do not add zlib headers for openssl
- CMake: make config version 8 compatible with 7
- cmake: picky-linker fixes for openssl, ZLIB, H3 and more
- cmake: set SONAME for SunOS too
- cmake: speed up and extend picky clang/gcc options
- CMakeLists.txt: fix typo for Haiku detection
- compressed.d: clarify the words on "not notifying headers"
- config-dos.h: fix SIZEOF_CURL_OFF_T for MS-DOS/DJGPP
- configure: don't set HAVE_WRITABLE_ARGV on Windows
- configure: fix detection of apxs (for httpd)
- configure: make quiche require quiche_conn_send_ack_eliciting
- connect: fix https connection setup to treat ssl_mode correctly
- content_encoding: only do transfer-encoding compression if asked to
- cookie: address PVS nits
- cookie: clarify that init with data set to NULL reads no file
- curl: do NOT append filename to path for upload when there's a query
- curl_easy_getinfo.3: typo fix (duplicated "from the")
- curl_easy_unescape.3: rename the argument
- curl_path: bring back support for SFTP path ending in /~
- curl_url_set.3: mention that users can set content rather freely
- CURLOPT_IPRESOLVE.3: this for hostnames, not IP addresses
- data.d: emphasize no conversion
- digest: clear target buffer
- doc: curl_mime_init() strong easy binding was relaxed in 7.87.0
- docs/cmdline-opts: document the dotless config path
- docs/examples/protofeats.c: outputs all protocols and features
- docs/libcurl/curl_*escape.3: rename "url" argument to "input"/"string"
- docs/SECURITY-ADVISORY.md: how to write a curl security advisory
- docs: bump the minimum perl version to 5.6
- docs: clarify that more backends have HTTPS proxy support
- dynbuf: never allocate larger than "toobig"
- easy_cleanup: require a "good" handle to act
- ftp: fix 'portsock' variable was assigned the same value
- ftp: remove dead code
- ftplistparser: move out private data from public struct
- ftplistparser: replace realloc with dynbuf
- gen.pl: error on duplicated See-Also fields
- getpart: better handle case of file not found
- GHA-linux: add an address-sanitizer build
- GHA: add a memory-sanitizer job
- GHA: run all linux test jobs with valgrind
- GHA: suppress git clone output
- GIT-INFO: add --with-openssl
- gskit: various compile errors in OS400
- h2/h3: replace `state.drain` counter with `state.dselect_bits`
- hash: fix assigning same value
- headers: clear (possibly) lingering pointer in init
- hostcheck: fix hostname wildcard checking
- hostip: add locks around use of global buffer for alarm()
- hostip: enforce a maximum DNS cache size independent of timeout value
- HTTP-COOKIES.md: mention the #HttpOnly_ prefix
- http2: always EXPIRE_RUN_NOW unpaused http/2 transfers
- http2: do flow window accounting for cancelled streams
- http2: enlarge the connection window
- http2: flow control and buffer improvements
- http2: move HTTP/2 stream vars into local context
- http2: pass `stream` to http2_handle_stream_close to avoid NULL checks
- http2: remove unused Curl_http2_strerror function declaration
- HTTP3/quiche: terminate h1 response header when no body is sent
- http3: check stream_ctx more thoroughly in all backends
- HTTP3: document the ngtcp2/nghttp3 versions to use for building curl
- http3: expire unpaused transfers in all HTTP/3 backends
- http3: improvements across backends
- http: free the URL before storing a new copy
- http: skip a double NULL assign
- ipv4.d/ipv6.d: they are "mutex", not "boolean"
- KNOWN_BUGS: remove fixed or outdated issues, move non-bugs
- lib/cmake: add HAVE_WRITABLE_ARGV check
- lib/sha256.c: typo fix in comment (duplicated "is available")
- lib1560: verify that more bad hostnames are rejected
- lib: add `bufq` and `dynhds`
- lib: remove CURLX_NO_MEMORY_CALLBACKS
- lib: unify the upload/method handling
- lib: use correct printf flags for sockets and timediffs
- libssh2: fix crash in keyboard callback
- libssh2: free fingerprint better
- libssh: tell it to use SFTP non-blocking
- manpages: simplify the .TH sections
- MANUAL.md: add dict example for looking up a single definition
- md(4|5): don't use deprecated iOS functions
- md4: only build when used
- mime: skip NULL assigns after Curl_safefree()
- multi: add handle asserts in DEBUG builds
- multi: add multi-ignore logic to multi_socket_action
- multi: free up more data earleier in DONE
- multi: remove a few superfluous assigns
- multi: remove PENDING + MSGSENT handles from the main linked list
- ngtcp2: adapted to 0.15.0
- ngtcp2: adjust config and code checks for ngtcp2 without nghttp3
- noproxy: pointer to local array 'hostip' is stored outside scope
- ntlm: clear lm and nt response buffers before use
- openssl: interop with AWS-LC
- OS400: fix and complete ILE/RPG binding
- OS400: implement EBCDIC support for recent features
- OS400: improve vararg emulation
- OS400: provide ILE/RPG usage examples
- pingpong: fix compiler warning "assigning an enum to unsigned char"
- pytest: improvements for suitable curl and error output
- quiche: disable pacing while pacing is not actually performed
- quiche: Enable IDLE egress handling
- RELEASE-PROCEDURE: update to new schedule
- rtsp: convert mallocs to dynbuf for RTP buffering
- rtsp: skip malformed RTSP interleaved frame data
- rtsp: skip NULL assigns after Curl_safefree()
- runtests: die if curl version can be found
- runtests: don't start servers if -l is given
- runtests: fix -c option when run with valgrind
- runtests: fix quoting in Appveyor and Azure test integration
- runtests: lots of refactoring
- runtests: refactor into more packages
- runtests: show error message if file can't be written
- runtests: spawn a new process for the test runner
- rustls: fix error in recv handling
- schannel: add clarifying comment
- server/getpart: clear target buffer before load
- smb: remove double assign
- smbserver: remove temporary files before exit
- socketpair: verify with a random value
- ssh: Add support for libssh2 read timeout
- telnet: simplify the implementation of str_is_nonascii()
- test1169: fix so it works properly everywhere
- test1592: add flaky keyword
- test1960: point to the correct path for the precheck tool
- test303: kill server after test
- tests/http: add timeout to running curl in test cases
- tests/http: fix log formatting on wrong exit code
- tests/http: fix out-of-tree builds
- tests/http: improved httpd detection
- tests/http: more tests with specific clients
- tests/http: relax connection check in test_07_02
- tests/keywords.pl: remove
- tests/libtest/lib1900.c: remove
- tests/sshserver.pl: Define AddressFamily earlier
- tests: 1078 1288 1297 use valid IPv4 addresses
- tests: document that the unittest keyword is special
- tests: increase sws timeout for more robust testing
- tests: log a too-long Unix socket path in sws and socksd
- tests: make test_12_01 a bit more forgiving on connection counts
- tests: move pidfiles and portfiles under the log directory
- tests: move server config files under the pid dir
- tests: silence some Perl::Critic warnings in test suite
- tests: stop using strndup(), which isn't portable
- tests: switch to 3-argument open in test suite
- tests: turn perl modules into full packages
- tests: use %LOGDIR to refer to the log directory
- tool_cb_hdr: Fix 'Location:' formatting for early VTE terminals
- tool_operate: pass a long as CURLOPT_HEADEROPT argument
- tool_operate: refuse (--data or --form) and --continue-at combo
- transfer: refuse POSTFIELDS + RESUME_FROM combo
- transfer: skip extra assign
- url: fix null dispname for --connect-to option
- url: fix PVS nits
- url: remove call to Curl_llist_destroy in Curl_close
- urlapi: cleanups and improvements
- urlapi: detect and error on illegal IPv4 addresses
- urlapi: prevent setting invalid schemes with *url_set()
- urlapi: skip a pointless assign
- urlapi: URL encoding for the URL missed the fragment
- urldata: copy CURLOPT_AWS_SIGV4 value on handle duplication
- urldata: shrink *select_bits int => unsigned char
- vlts: use full buffer size when receiving data if possible
- vtls and h2 improvements
- Websocket: enhanced en-/decoding
- wolfssl.yml: bump to version 5.6.0
- write-out.d: Use response_code in example
- ws: handle reads before EAGAIN better

## Fixed in 8.0.1 - March 20 2023

Bugfixes:

- fix crash in curl_easy_cleanup

## Fixed in 8.0.0 - March 20 2023

8.0.0
8.0.0
8.0.0 changes only

Changes:

- build: remove support for curl_off_t < 8 bytes

Bugfixes:

- .cirrus.yml: Bump to FreeBSD 13.2
- aws_sigv4: fall back to UNSIGNED-PAYLOAD for sign_as_s3
- BINDINGS: add Fortran binding
- build: drop the use of XC_AMEND_DISTCLEAN
- build: fix stdint/inttypes detection with non-autotools
- cf-socket: fix handling of remote addr for accepted tcp sockets
- cf-socket: if socket is already connected, return CURLE_OK
- cf-socket: use port 80 when resolving name for local bind
- CI: don't run CI jobs if only another CI was changed
- CI: update ngtcp2 and nghttp2 for pytest
- cmake: delete unused HAVE__STRTOI64
- cmake: fix enabling LDAPS on Windows
- cmake: skip CA-path/bundle auto-detection in cross-builds
- connect: fix time_connect and time_appconnect timer statistics
- cookie: don't load cookies again when flushing
- cookie: parse without sscanf()
- curl.h: require gcc 12.1 for the deprecation magic
- curl: make -w's %{stderr} use the file set with --stderr
- curl_path: create the new path with dynbuf
- CURLOPT_PIPEWAIT: allow waited reuse also for subsequent connections
- CURLOPT_PROXY.3: curl+NSS does not handle HTTPS over unix domain socket
- CURLSHOPT_SHARE.3: HSTS sharing is not thread-safe
- DEPRECATE: the original legacy mingw version 1
- doc: fix compiler warning in libcurl.m4
- docs/cmdline-opts: mark all global options
- docs/SECURITY-PROCESS.md: updates
- docs: extend the URL API descriptions
- docs: note '--data-urlencode' option
- DYNBUF.md: note Curl_dyn_add* calls Curl_dyn_free on failure
- easy: remove infof() debug leftover from curl_easy_recv
- examples/http3.c: use CURL_HTTP_VERSION_3
- ftp: active mode with SSL, add the filter
- ftp: add more conditions for connection reuse
- ftp: allocate the wildcard struct on demand
- ftp: make the EPSV response parser not use sscanf
- ftp: replace sscanf for MDTM 213 response parsing
- ftp: replace sscanf for PASV parsing
- gssapi: align `gss_OID_desc` to silence ld warnings on macOS ventura
- headers: make curl_easy_header and nextheader return different buffers
- hostip: avoid sscanf and extra buffer copies
- http2: fix error handling during parallel operations
- http2: fix for http2-prior-knowledge when reusing connections
- http2: fix handling of RST and GOAWAY to recognize partial transfers
- http2: fix upload busy loop
- http: don't send 100-continue for short PUT requests
- http: fix unix domain socket use in https connects
- http: rewrite the status line parser without sscanf
- http_proxy: parse the status line without sscanf
- idn: return error if the conversion ends up with a blank host
- krb5: avoid sscanf for parsing
- lib1560: test parsing URLs with ridiculously large fields
- lib2305: deal with CURLE_AGAIN
- lib517: verify time stamps without leading zeroes plus some more
- lib: silence clang/gcc -Wvla warnings in brotli headers
- lib: skip Curl_llist_destroy calls
- libcurl-errors.3: add the CURLHcode errors from curl_easy_header.3
- libssh2: only set the memory callbacks when debugging
- libssh2: remove unused variable from libssh2's struct
- libssh: use dynbuf instead of realloc
- Makefile.mk: delete redundant `HAVE_LDAP_SSL` macro
- Makefile.mk: fix -g option in debug mode
- mqtt: on send error, return error
- multi: make multi_perform ignore/unignore signals less often
- multi: remove PENDING + MSGSENT handles from the main linked list
- ngtcp2-gnutls.yml: bump to gnutls 3.8.0
- ngtcp2: fix unwanted close of file descriptor 0
- page-footer: add explanation for three missing exit codes
- parsedate: parse strings without using sscanf()
- parsedate: replace sscanf( for time stamp parsing
- quic/schannel: fix compiler warnings
- rand: use arc4random as fallback when available
- rate.d: single URLs make no sense in --rate example
- RELEASE-PROCEDURE.md: update coming release dates
- rtsp: avoid sscanf for parsing
- runtests: use a hash table for server port numbers
- sectransp: fix compiler warning c89 mixed code/declaration
- sectransp: make read_cert() use a dynbuf when loading
- secure-transport: fix recv return code handling
- select: stop treating POLLRDBAND as an error
- setopt: move the CURLOPT_CHUNK_DATA pointer to the set struct
- socket: detect "dead" connections better, e.g. not fit for reuse
- src: silence wmain() warning for all build methods
- telnet: only accept option arguments in ascii
- telnet: parse NEW_ENVIRON without sscanf
- telnet: parse telnet options without sscanf
- telnet: parse the WS= argument without sscanf
- test1470: test socks proxy using unix sockets and connect to https
- test1960: verify CURL_SOCKOPT_ALREADY_CONNECTED
- test2600: detect when ALARM_TIMEOUT is in use and adjust
- test422: verify --next used without a prior URL
- tests/http: add pytest to GHA and improve tests
- tests: add `cookies` features
- tests: add timeout, SLOWDOWN and DELAY keywords to tests
- tests: fix gnutls-serv check
- tests: fix MSVC unreachable code warnings in unit tests
- tests: hack to build most unit tests under cmake
- tests: HTTP server fixups
- tests: keep cmake unit tests names in sync
- tests: make CPPFLAGS common to all unit tests
- tests: make first.c the same for both lib tests and unit tests
- tests: support for imaps/pop3s/smtps protocols
- tests: sync option lists in runtests.pl & its man page
- tests: test secure mail protocols with explicit SSL requests
- tests: use AM_CPPFILES to modify flags in unit tests
- tests: use dynamic ports numbers in pytest suite
- tool: dump headers even if file is write-only
- tool: improve --stderr handling
- tool_getparam: don't add a new node only for --no-remote-name
- tool_getparam: error if --next is used without a prior URL
- tool_operate: avoid fclose(NULL) on bad header dump file
- tool_operate: propagate error codes for missing URL after --next
- tool_progress: shut off progress meter for --silent in parallel
- tool_writeout_json. fix the output for duplicate header names
- transfer: limit Windows SO_SNDBUF updates to once a second
- url: fix cookielist memleak when curl_easy_reset
- url: fix logic in connection reuse to deny reuse on "unclean" connections
- url: fix the SSH connection reuse check
- url: only reuse connections with same GSS delegation
- url: remove dummy protocol handler
- urlapi: '%' is illegal in hostnames
- urlapi: avoid mutating internals in getter routine
- urlapi: parse IPv6 literals without ENABLE_IPV6
- urlapi: take const args in _dup and _get functions
- wildcard: remove files and move functions into ftplistparser.c
- winbuild: fix makefile clean
- wolfssl: add quic/ngtcp2 detection in cmake, and fix builds
- wolfSSL: resurrect the BIO `io_result`
- ws: keep the socket non-blocking
- x509asn1.c: use correct format specifier for infof() call
- x509asn1: use plain %x, not %lx, when the arg is an int

## Fixed in 7.88.1 - February 20 2023

7.88.1
7.88.1
7.88.1 changes only

Bugfixes:

- build-openssl.bat: keep OpenSSL 3 engine binaries
- cmake: fix Windows check for CryptAcquireContext
- connect: fix timeout handling to use full duration
- curl: make --silent work stand-alone
- curl_setup: Suppress OpenSSL 3 deprecation warnings
- CURLOPT_WS_OPTIONS.3: fix the availability version
- GHA: update rustls dependency to 0.9.2
- http2: buffer/pausedata and output flush fix.
- http2: set drain on stream end
- http: include stdint.h more readily
- krb5: silence cast-align warning
- lib1560: add IPv6 canonicalization tests
- os400: correct Curl_os400_sendto()
- remote-header-name.d: mention that filename* is not supported
- runtests: fix "uninitialized value $port"
- setopt: allow HTTP3 when HTTP2 is not defined
- socketpair: allow EWOULDBLOCK when reading the pair check bytes
- socks: allow using DoH to resolve hostnames
- tests-httpd: add proxy tests
- tests: make sure gnuserv-tls has SRP support before using it
- tests: make the telnet server shut down a socket gracefully
- tool_getparam: make --get a true boolean
- tool_operate: allow debug builds to set buffersize
- urlapi: do the port number extraction without using sscanf()
- urldata: remove `now` from struct SingleRequest - not needed

## Fixed in 7.88.0 - February 15 2023

7.88.0
7.88.0
7.88.0 changes only

Changes:

- curl.h: add CURL_HTTP_VERSION_3ONLY
- share: add sharing of HSTS cache among handles
- src: add --http3-only
- tool_operate: share HSTS between handles
- urlapi: add CURLU_PUNYCODE
- writeout: add %{certs} and %{num_certs}

Bugfixes:

- cf-socket: fix build when not HAVE_GETPEERNAME
- cf-socket: keep sockaddr local in the socket filters
- cfilters:Curl_conn_get_select_socks: use the first non-connected filter
- CI: add a workflow to automatically label pull requests
- CI: add pytest GHA to CI test/tests-httpd on an HTTP/3 setup
- CI: Retry failed downloads to reduce spurious failures
- CI: update wolfssl / wolfssh to 5.5.4 / 1.4.12
- cmake: bump requirement to 3.7
- cmake: check for sendmsg
- cmake: delete redundant macro definition `SECURITY_WIN32`
- cmake: fix dev warning due to mismatched arg
- cmake: fix the snprintf detection
- cmake: remove deprecated symbols check
- cmake: set SOVERSION also for macOS
- cmake: use list APPEND syntax for CMAKE_REQUIRED_DEFINITIONS
- cmdline-opts/Makefile: on error, do not leave a partial
- CODEOWNERS: remove the peeps mentioned as CI owners
- connect: fix access of pointer before NULL check
- connect: fix build when not ENABLE_IPV6
- connect: fix strategy testing for attempts, timeouts and happy-eyeball
- connections: introduce http/3 happy eyeballs
- content_encoding: do not reset stage counter for each header
- CONTRIBUTE: More formally specify the commit description
- cookies: fp is always not NULL
- copyright.pl: cease doing year verifications
- copyright: update all copyright lines and remove year ranges
- curl.1: make help, version and manual sections "custom"
- curl.h: allow up to 10M buffer size
- curl.h: mark CURLSSLBACKEND_MESALINK as deprecated
- curl/websockets.h: extend the websocket frame struct
- curl: output warning at --verbose output for debug-enabled version
- curl_free.3: fix return type of `curl_free`
- curl_global_sslset.3: clarify the openssl situation
- curl_log: for failf/infof and debug logging implementations
- curl_setup: Disable by default recv-before-send in Windows
- curl_version_info.3: fix typo
- curl_ws_send.3: clarify how to send multi-frame messages
- CURLOPT_HEADERDATA.3: warn DLL users must set write function
- CURLOPT_READFUNCTION.3: the callback 'size' arg is always 1
- CURLOPT_WRITEFUNCTION.3: fix memory leak in example
- dict: URL decode the entire path always
- docs/DEPRECATE.md: deprecate gskit
- docs: add link to GitHub Discussions
- docs: mention indirect effects of --insecure
- docs: POSTFIELDSIZE must be set to -1 with read function
- doh: ifdef IPv6 code
- easyoptions: fix header printing in generation script
- escape: hex decode with a lookup-table
- escape: use table lookup when adding %-codes to output
- examples: remove the curlgtk.c example
- fopen: remove unnecessary assignment
- ftpserver: lower the DATA connect timeout to speed up torture tests
- GHA/macos.yml: bump to gcc-12
- GHA/macos: use Xcode_14.0.1 for cmake builds
- GHA: add job on Slackware 15.0
- GHA: bump ngtcp2 workflow dependencies
- GHA: enable websockets in the torture job
- GHA: move the quiche job here from zuul
- GHA: use designated ngtcp2 and its dependencies versions
- haxproxy: send before TLS handhshake
- header.d: add a header file example
- hsts.d: explain hsts more
- hsts: handle adding the same hostname again
- HTTP/[23]: continue upload when state.drain is set
- http2: aggregate small SETTINGS/PRIO/WIN_UPDATE frames
- http2: fix compiler warning due to uninitialized variable
- http2: minor buffer and error path fixes
- http2: when using printf %.*s, the length arg must be 'int'
- HTTP3: mention what needs to be in place to remove EXPERIMENTAL label
- http: add additional condition for including stdint.h
- http: decode transfer encoding first
- http: fix "part of conditional expression is always false"
- http: remove the trace message "Mark bundle... multiuse"
- http_aws_sigv4: remove typecasts from HMAC_SHA256 macro
- http_proxy: do not assign data->req.p.http use local copy
- INSTALL: document how to use multiple TLS backends
- lib670: make test.h the first include
- lib: connect/h2/h3 refactor
- lib: fix typos
- lib: fix typos in comments which repeat a word
- libssh2: try sha2 algos for hostkey methods
- libtest: add a sleep macro for Windows
- Linux CI: update some dependencies to latest tag
- Makefile.mk: fix wolfssl and mbedtls default paths
- manpages: call the custom user pointer 'clientp' consistently
- md4: fix build with GnuTLS + OpenSSL v1
- misc: fix grammar and spelling
- misc: fix spelling
- misc: reduce struct and struct field sizes
- msh3: add support for request payload
- msh3: update to v0.5 Release
- msh3: update to v0.6
- multi: stop sending empty HTTP/3 UDP datagrams on Windows
- multihandle: turn bool struct fields into bits
- ngtcp2: add CURLOPT_SSL_CTX_FUNCTION support for openssl+wolfssl
- ngtcp2: fix the build without 'sendmsg'
- ngtcp2: replace removed define and stop using removed function
- no-clobber.d: only use long form options in man page text
- noproxy: support for space-separated names is deprecated
- nss: implement data_pending method
- openldap: fix missing sasl symbols at build in specific configs
- openssl: adapt to boringssl's error code type
- openssl: don't ignore CA paths when using Windows CA store (redux)
- openssl: don't log raw record headers
- openssl: make the BIO_METHOD a local variable in the connection filter
- openssl: only use CA_BLOB if verifying peer
- openssl: remove attached easy handles from SSL instances
- openssl: store the CA after first send (ClientHello)
- os400: fixes to make-lib.sh and initscript.sh
- packages: remove Android, update README
- release-notes.pl: check fixes/closes lines better
- Revert "x509asn1: avoid freeing unallocated pointers"
- runtest.pl: add expected fourth return value
- runtests: tear down http2/http3 servers when https server is stopped
- runtests: consider warnings fatal and error on them
- runtests: fix detection of TLS backends
- runtests: make 'mbedtls' a testable feature
- rustls: improve error messages
- scripts/delta: show percent of number of files changed since last tag
- scripts: fix Appveyor job detection in cijobs.pl
- scripts: set file mode +x on all perl and shell scripts
- sectransp: fix for incomplete read/writes
- SECURITY-PROCESS.md: document severity levels
- setopt: Address undefined behaviour by checking for null
- setopt: move the SHA256 opt within #ifdef libssh2
- setopt: use >, not >=, when checking if uarg is larger than uint-max
- smb: return error on upload without size
- socketpair: allow localhost MITM sniffers
- strdup: name it Curl_strdup
- system.h: assume OS400 is always built with ILEC compiler
- test1560: use a UTF8-using locale when run
- test2304: remove stdout verification
- tests-httpd: basic infra to run curl against an apache httpd
- tests: add 3 new HTTP/2 test cases, plus https: support for nghttpx
- tests: add tests for HTTP/2 and HTTP/3 to verify the header API
- tests: avoid use of sha1 in certificates
- tls: fixes for wolfssl + openssl combo builds
- tool_getparam: fix hiding of command line secrets
- tool_operate: fix `CURLOPT_SOCKS5_GSSAPI_NEC` type
- tool_operate: fix error codes during DOS filename sanitize
- tool_operate: fix error codes on bad URL & OOM
- tool_operate: fix headerfile writing
- tool_operate: repair --rate
- transfer: break the read loop when RECV is cleared
- typecheck: accept expressions for option/info parameters
- url: fix part of conditional expression is always true
- urlapi: avoid Curl_dyn_addf() for hex outputs
- urlapi: fix part of conditional expression is always true: qlen
- urlapi: skip path checks if path is "/"
- urlapi: skip the extra dedotdot alloc if no dot in path
- urldata: cease storing TLS auth type
- urldata: make 'ftp_create_missing_dirs' depend on FTP || SFTP
- urldata: make set.http200aliases conditional on HTTP being present
- urldata: move the cookefilelist to the 'set' struct
- urldata: remove unused struct fields, made more conditional
- vquic: stabilization and improvements
- vtls: fix hostname handling in filters
- vtls: manage current easy handle in nested cfilter calls
- vtls: use ALPN HTTP/1.0 when HTTP/1.0 is used
- winbuild: document that arm64 is supported
- windows: always use curl's basename() implementation
- wolfssl: remove deprecated post-quantum algorithms
- workflows/linux.yml: merge 3 common packages
- write-out.d: add 'since version' to %{header_json} documentation
- write-out.d: clarify Windows % symbol escaping
- ws: fix autoping handling
- ws: fix multiframe send handling
- ws: fix recv of larger frames
- ws: remove bad assert
- ws: unstick connect-only shutdown
- ws: use %Ou for outputting curl_off_t with info()
- x509asn1: fix compile errors and warnings
- zuul: stop using this CI service

## Fixed in 7.87.0 - December 21 2022

7.87.0
7.87.0
7.87.0 changes only

Changes:

- curl: add --url-query
- CURLOPT_QUICK_EXIT: don't wait for DNS thread on exit
- lib: add CURL_WRITEFUNC_ERROR to signal write callback error
- openssl: reduce CA certificate bundle reparsing by caching
- version: add a feature names array to curl_version_info_data

Bugfixes:

- altsvc: fix rejection of negative port numbers
- aws_sigv4: consult x-%s-content-sha256 for payload hash
- aws_sigv4: fix typos in aws_sigv4.c
- base64: better alloc size
- base64: encode without using snprintf
- base64: faster base64 decoding
- build: assume assert.h is always available
- build: assume errno.h is always available
- c-hyper: CONNECT responses are not server responses
- c-hyper: fix multi-request mechanism
- CI: Change FreeBSD image from 12.3 to 12.4
- CI: LGTM.com shuts down in December 2022
- ci: Remove zuul fuzzing job as it's superseded by CIFuzz
- cmake: check for cross-compile, not for toolchain
- CMake: fix build with `CURL_USE_GSSAPI`
- cmake: really enable warnings with clang
- cmake: set the soname on the shared library
- cmdline-opts/gen.pl: fix the linkifier
- cmdline-opts/page-footer: remove long option nroff formatting
- config-mac: define HAVE_SYS_IOCTL_H
- config-mac: fix typo: size_T -> size_t
- config-mac: remove HAVE_SYS_SELECT_H
- config-win32: fix SIZEOF_OFF_T for MSVC and old MinGW
- configure: require fork for NTLM-WB
- contributors.sh: actually use $CURLWWW instead of only setting it
- cookie: compare cookie prefixes case insensitively
- cookie: expire cookies at once when max-age is negative
- cookie: open cookie jar as a binary file
- curl-openssl.m4: do not add $prefix/include/openssl to CPPFLAGS
- curl-rustls.m4: on macOS, rustls also needs the Security framework
- curl.h: include <sys/select.h> on SerenityOS
- curl.h: name all public function parameters
- curl.h: reword comment to not use deprecated option
- curl: override the numeric locale and set "C" by force
- curl: timeout in the read callback
- curl_endian: remove Curl_write64_le from header
- curl_get_line: allow last line without newline char
- curl_path: do not add '/' if homedir ends with one
- curl_url_get.3: remove spurious backtick
- curl_url_set.3: document CURLU_DISALLOW_USER
- curl_url_set.3: fix typo
- CURLMOPT_SOCKETFUNCTION.3: clarify CURL_POLL_REMOVE
- CURLOPT_COOKIEFILE.3: advice => advise
- CURLOPT_DEBUGFUNCTION.3: do not assume nul-termination in example
- CURLOPT_DEBUGFUNCTION.3: emphasize that incoming data is "raw"
- CURLOPT_POST.3: Explain setting to 0 changes request type
- docs/curl_ws_send: Fixed typo in websocket docs
- docs/EARLY-RELEASE.md: how to determine an early release
- docs/examples: spell correction ('Retrieve')
- docs/INSTALL.md: expand on static builds
- docs/WEBSOCKET.md: explain the URL use
- docs: add missing parameters for --retry flag
- docs: add more "SEE ALSO" links to CA related pages
- docs: explain the noproxy CIDR notation support
- docs: extend the dump-header documentation
- docs: remove performance note in CURLOPT_SSL_VERIFYPEER
- examples/10-at-a-time: fix possible skipped final transfers
- examples: update descriptions
- ftp: support growing files with CURLOPT_IGNORE_CONTENT_LENGTH
- gen.pl: do not generate CURLHELP bitmask lines > 79 characters
- GHA: clarify workflows permissions, set least possible privilege
- GHA: NSS use clang instead of clang-9
- gnutls: use common gnutls init and verify code for ngtcp2
- headers: add endif comments
- HTTP-COOKIES.md: mention that http://localhost is a secure context
- HTTP-COOKIES.md: update the 6265bis link to draft-11
- http: do not send PROXY more than once
- http: fix the ::1 comparison for IPv6 localhost for cookies
- http: set 'this_is_a_follow' in the Location: logic
- http: use the IDN decoded name in HSTS checks
- hyper: classify headers as CONNECT and 1XX
- hyper: fix handling of hyper_task's when reusing the same address
- idn: remove Curl_win32_ascii_to_idn
- INSTALL: update operating systems and CPU archs
- KNOWN_BUGS: remove eight entries
- lib1560: add some basic IDN hostname tests
- lib: connection filters (cfilter) addition to curl:
- lib: feature deprecation warnings in gcc >= 4.3
- lib: fix some type mismatches and remove unneeded typecasts
- lib: parse numbers with fixed known base 10
- lib: remove bad set.opt_no_body assignments
- lib: rewind BEFORE request instead of AFTER previous
- lib: sync guard for Curl_getaddrinfo_ex() definition and use
- lib: use size_t or int etc instead of longs
- libcurl-errors.3: remove duplicate word
- libssh2: return error when ssh_hostkeyfunc returns error
- limit-rate.d: see also --rate
- log2changes.pl: wrap long lines at 80 columns
- Makefile.mk: address minor issues
- Makefile.mk: improve a GNU Make hack
- Makefile.mk: portable Makefile.m32
- maketgz: set the right version in lib/libcurl.plist
- mime: relax easy/mime structures binding
- misc: Fix incorrect spelling
- misc: remove duplicated include files
- misc: typo and grammar fixes
- negtelnetserver.py: have it call its close() method
- netrc.d: provide mutext info
- netware: remove leftover traces
- noproxy: also match with adjacent comma
- noproxy: guard against empty hostnames in noproxy check
- noproxy: tailmatch like in 7.85.0 and earlier
- nroff-scan.pl: detect double highlights
- ntlm: improve comment for encrypt_des
- ntlm: silence ubsan warning about copying from null target_info pointer
- openssl/mbedtls: use %d for outputting port with failf (int)
- openssl: prefix errors with '[lib]/[version]: '
- os400: use platform socklen_t in Curl_getnameinfo_a
- page-header: grammar improvement (display transfer rate)
- proxy: refactor haproxy protocol handling as connection filter
- README.md: remove badges and xmas-tree garnish
- rtsp: fix RTSP auth
- runtests: --no-debuginfod now disables DEBUGINFOD_URLS
- runtests: do CRLF replacements per section only
- scripts/checksrc.pl: detect duplicated include files
- sendf: change Curl_read_plain to wrap Curl_recv_plain
- sendf: remove unnecessary if condition
- setup: do not require __MRC__ defined for Mac OS 9 builds
- smb/telnet: do not free the protocol struct in *_done()
- socks: fix username max size is 255 (0xFF)
- spellcheck.words: remove 'github' as an accepted word
- ssl-reqd.d: clarify that this is for upgrading connections only
- strcase: use curl_str(n)equal for case insensitive matches
- styled-output.d: this option does not work on Windows
- system.h: fix socklen_t, curl_off_t, long long for Classic Mac OS
- system.h: support 64-bit curl_off_t for NonStop 32-bit
- test1421: fix typo
- test3026: reduce runtime in legacy mingw builds
- tests/sshserver.pl: re-enable ssh-rsa while using openssh 8.8+
- tests: add authorityInfoAccess to generated certs
- tests: add HTTP/3 test case, custom location for proper nghttpx
- tls: backends use connection filters for IO, enabling HTTPS-proxy
- tool: determine the correct fopen option for -D
- tool_cfgable: free the ssl_ec_curves on exit
- tool_cfgable: make socks5_gssapi_nec a boolean
- tool_formparse: avoid clobbering on function params
- tool_getparam: make --no-get work as the opposite of --get
- tool_operate: provide better errmsg for -G with bad URL
- tool_operate: when aborting, make sure there is a non-NULL error buffer
- tool_paramhlp: free the proto strings on exit
- url: move back the IDN conversion of proxy names
- urlapi: reject more bad letters from the hostname: &+()
- urldata: change port num storage to int and unsigned short
- vms: remove SIZEOF_SHORT
- vtls: fix build without proxy support
- vtls: localization of state data in filters
- WEBSOCKET.md: fix broken link
- Websocket: fixes for partial frames and buffer updates
- websockets: fix handling of partial frames
- windows: fail early with a missing windres in autotools
- windows: fix linking .rc to shared curl with autotools
- winidn: drop WANT_IDN_PROTOTYPES
- ws: if no connection is around, return error
- ws: return CURLE_NOT_BUILT_IN when websockets not built in
- x509asn1: avoid freeing unallocated pointers

## Fixed in 7.86.0 - October 26 2022

7.86.0
7.86.0
7.86.0 changes only

Changes:

- NPN: remove support for and use of
- Websockets: initial support

Bugfixes:

- altsvc: reject bad port numbers
- altsvc: use 'h3' for h3
- amiga: do not hardcode openssl/zlib into the os config
- amiga: set SIZEOF_CURL_OFF_T=8 by default
- amigaos: add missing curl header
- asyn-ares: set hint flags when calling ares_getaddrinfo
- autotools: allow --enable-symbol-hiding with windows
- autotools: allow unix sockets on Windows
- autotools: reduce brute-force when detecting recv/send arg list
- aws_sigv4: fix header computation
- bearssl: make it proper C89 compliant
- CI/GHA: cancel outdated CI runs on new PR changes
- CI/GHA: merge msh3 and openssl3 builds into linux workflow
- cirrus-ci: add macOS build with m1
- cirrus: use make LDFLAGS=-all-static instead of curl_LDFLAGS
- cli tool: do not use disabled protocols
- cmake: add missing inet_ntop check
- cmake: add the check of HAVE_SOCKETPAIR
- cmake: define BUILDING_LIBCURL in lib/CMakeLists, not config.h
- cmake: delete duplicate HAVE_GETADDRINFO test
- cmake: enable more detection on Windows
- cmake: fix original MinGW builds
- cmake: improve usability of CMake build as a sub-project
- cmake: set HAVE_GETADDRINFO_THREADSAFE on Windows
- cmake: set HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID on Windows
- cmake: sync HAVE_SIGNAL detection with autotools
- cmdline/docs: add a required 'multi' keyword for each option
- configure: correct the wording when checking grep -E
- configure: deprecate builds with small curl_off_t
- configure: fail if '--without-ssl' + explicit parameter for an ssl lib
- configure: the ngtcp2 option should default to 'no'
- connect: change verbose IPv6 address:port to [address]:port
- connect: fix builds without AF_INET6
- connect: fix Curl_updateconninfo for TRNSPRT_UNIX
- connect: fix the wrong error message on connect failures
- content_encoding: use writer struct subclasses for different encodings
- cookie: reject cookie names or content with TAB characters
- ctype: remove all use of <ctype.h>, use our own versions
- curl-compilers.m4: for gcc + want warnings, set gnu89 standard
- curl-compilers.m4: use -O2 as default optimize for clang
- curl-wolfssl.m4: error out if wolfSSL is not usable
- curl.h: fix mention of wrong error code in comment
- curl/add_file_name_to_url: use the libcurl URL parser
- curl/add_parallel_transfers: better error handling
- curl/get_url_file_name: use libcurl URL parser
- curl: warn for --ssl use, considered insecure
- curl_ctype: convert to macros-only
- curl_easy_pause.3: unpausing is as fast as possible
- curl_escape.3: fix typo
- curl_setup: disable use of FLOSS for 64-bit NonStop builds
- curl_setup: include curl.h after platform setup headers
- curl_setup: include only system.h instead of curl.h
- curl_strequal.3: fix argument typo
- curl_url_set.3: document CURLU_APPENDQUERY proper
- CURLMOPT_PIPELINING.3: dedup man page xref
- CURLOPT_ACCEPT_ENCODING.3: remove "four" as they are five
- CURLOPT_AUTOREFERER.3: highlight the privacy leak risk
- CURLOPT_COOKIEFILE: insist on "" for enable-without-file
- CURLOPT_COOKIELIST.3: fix formatting mistake
- CURLOPT_DNS_INTERFACE.3: mention it works for almost all protocols
- CURLOPT_MIMEPOST.3: add an (inline) example
- CURLOPT_POSTFIELDS.3: refer to CURLOPT_MIMEPOST
- CURLOPT_PROXY_SSLCERT_BLOB.3: this is for HTTPS proxies
- CURLOPT_WILDCARDMATCH.3: Fix backslash escaping under single quotes
- CURLSHOPT_UNLOCKFUNC.3: the callback has no 'access' argument
- DEPRECATE.md: Support for systems without 64-bit data types
- docs/examples: avoid deprecated options in examples where possible
- docs/INSTALL: update Android Instructions for newer NDKs
- docs/libcurl/symbols-in-versions: add several missing symbols
- docs: 100+ spellfixes
- docs: correct missing uppercase in Markdown files
- docs: document more server names for test files
- docs: fix deprecation versions inconsistencies
- docs: make sure libcurl opts examples pass in long arguments
- docs: remove mentions of deprecated '--without-openssl' parameter
- docs: tag curl options better in man pages
- docs: tell about disabled protocols in CURLOPT_*PROTOCOLS_STR.
- docs: update sourceforge project links
- easy: fix the #include order
- easy: fix the altsvc init for curl_easy_duphandle
- easy_lock: check for HAVE_STDATOMIC_H as well
- examples/chkspeed: improve portability
- formdata: fix warning: 'CURLformoption' is promoted to 'int'
- ftp: ignore a 550 response to MDTM
- ftp: remove redundant if
- functypes: provide the recv and send arg and return types
- getparameter: return PARAM_MANUAL_REQUESTED for -M even when disabled
- GHA: build tests in a separate step from the running of them
- GHA: run proselint on markdown files
- github: initial CODEOWNERS setup for CI configuration
- header: define public API functions as extern c
- headers: reset the requests counter at transfer start
- hostip: guard PF_INET6 use
- hostip: lazily wait to figure out if IPv6 works until needed
- http, vauth: always provide Curl_allow_auth_to_host() functionality
- http2: make nghttp2 less picky about field whitespace
- HTTP3.md: update Caddy example
- http: try parsing Retry-After: as a number first
- http_proxy: restore the protocol pointer on error
- httpput-postfields.c: shorten string for C89 compliance
- ldap: delete stray CURL_HAS_MOZILLA_LDAP reference
- lib1560: extended to verify detect/reject of unknown schemes
- lib517: fix C89 constant signedness
- lib: add missing limits.h includes
- lib: add required Win32 setup definitions in setup-win32.h
- lib: prepare the incoming of additional protocols
- lib: sanitize conditional exclusion around MIME
- lib: set more flags in config-win32.h
- lib: the number four in a sequence is the "fourth"
- libssh: if sftp_init fails, don't get the sftp error code
- Makefile.m32: deduplicate build rules
- Makefile.m32: drop CROSSPREFIX and our CC/AR defaults
- Makefile.m32: exclude libs & libpaths for shared mode exes
- Makefile.m32: fix regression with tool_hugehelp
- Makefile.m32: major rework
- Makefile.m32: reintroduce CROSSPREFIX and -W -Wall
- Makefile.m32: support more options
- manpage-syntax.pl: all libcurl option symbols should be \fI-tagged
- manpages: Fix spelling of "allows to" -> "allows one to"
- misc: ISSPACE() => ISBLANK()
- misc: use the term "null-terminate" consistently
- mprintf: reject two kinds of precision for the same argument
- mprintf: use snprintf if available
- mqtt: return error for too long topic
- mqtt: spell out CONNECT in comments
- msh3: change the static_assert to make the code C89
- netrc: compare username case sensitively
- netrc: replace fgets with Curl_get_line
- netrc: use the URL-decoded user
- ngtcp2: fix build errors due to changes in ngtcp2 library
- ngtcp2: fix C89 compliance nit
- noproxy: support proxies specified using cidr notation
- openssl: make certinfo available for QUIC
- README.md: add GHA status badges for Linux and macOS builds
- RELEASE-PROCEDURE.md: mention patch releases
- resolve: make forced IPv4 resolve only use A queries
- runtests: fix uninitialized value on ignored tests
- schannel: ban server ALPN change during recv renegotiation
- schannel: don't reset recv/send function pointers on renegotiation
- schannel: when importing PFX, disable key persistence
- scripts: use `grep -E` instead of `egrep`
- setopt: use the handler table for protocol name to number conversions
- setopt: when POST is set, reset the 'upload' field
- setup-win32: no longer define UNICODE/_UNICODE implicitly
- single_transfer: use the libcurl URL parser when appending query parts
- smb: replace CURL_WIN32 with WIN32
- strcase: add and use Curl_timestrcmp
- strerror: improve two URL API error messages
- symbol-scan.pl: also check for LIBCURL* symbols
- symbol-scan.pl: scan and verify .3 man pages
- symbols-in-versions: add missing LIBCURL* symbols
- symbols-in-versions: CURLOPT_ENCODING is deprecated since 7.21.6
- test1119: scan all public headers
- test1275: verify uppercase after period in markdown
- test972: verify the output without using external tool
- tests/certs/scripts: insert standard curl source headers
- tests/Makefile: remove run time stats from ci-test
- tests: avoid CreateThread if _beginthreadex is available
- tests: fix tag syntax errors in test files
- tests: skip mime/form tests when mime is not built-in
- tidy-up: delete parallel/unused feature flags
- tidy-up: delete unused HAVE_STRUCT_POLLFD
- TODO: provide the error body from a CONNECT response
- tool: avoid generating ambiguous escaped characters in --libcurl
- tool: remove dead code
- tool: reorganize function c_escape around a dynbuf
- tool_hugehelp: make hugehelp a blank macro when disabled
- tool_main: exit at once if out of file descriptors
- tool_operate: avoid a few #ifdefs for disabled-libcurl builds
- tool_operate: more transfer cleanup after parallel transfer fail
- tool_operate: prevent over-queuing in parallel mode
- tool_operate: reduce errorbuffer allocs
- tool_paramhelp: asserts verify maximum sizes for string loading
- tool_paramhelp: make the max argument a 'double'
- tool_progress: remove 'Qd' from the parallel progress bar
- tool_setopt: use better English in --libcurl source comments
- tool_xattr: save the original URL, not the final redirected one
- unit test 1655: make it C89-compliant
- url: a zero-length userinfo part in the URL is still a (blank) user
- url: allow non-HTTPS HSTS-matching for debug builds
- url: rename function due to name-clash in Watt-32
- url: use IDN decoded names for HSTS checks
- urlapi: detect scheme better when not guessing
- urlapi: fix parsing URL without slash with CURLU_URLENCODE
- urlapi: leaner with fewer allocs
- urlapi: reject more bad characters from the hostname field
- winbuild/MakefileBuild.vc: handle spaces in libssh(2) include paths
- winbuild: use NMake batch-rules for compilation
- windows: add .rc support to autotools builds
- windows: adjust name of two internal public functions
- windows: autotools .rc warnings fixup
- wolfSSL: fix session management bug.

## Fixed in 7.85.0 - August 31 2022

7.85.0
7.85.0
7.85.0 changes only

Changes:

- quic: add support via wolfSSL
- schannel: Add TLS 1.3 support
- setopt: add CURLOPT_PROTOCOLS_STR and CURLOPT_REDIR_PROTOCOLS_STR

Bugfixes:

- amigaos: fix threaded resolver on AmigaOS 4.x
- amissl: allow AmiSSL to be used with AmigaOS 4.x builds
- amissl: make AmiSSL v5 a minimum requirement
- asyn-ares: make a single alloc out of hostname + async data
- asyn-thread: fix socket leak on OOM
- asyn-thread: make getaddrinfo_complete return CURLcode
- base64: base64url encoding has no padding
- BUGS.md: improve language
- build: improve OS string in CMake and `config-win32.h`
- cert.d: clarify that escape character works for file paths
- cirrus.yml: replace py38-pip with py39-pip
- cirrus/freebsd-ci: bootstrap the pip installer
- cmake: add detection of threadsafe feature
- cmake: do not force Windows target versions
- cmake: fix build for mingw cross compile
- cmake: link curl to its dependencies with PRIVATE
- cmake: remove APPEND in export(TARGETS)
- cmake: set feature PSL if present
- cmake: support ngtcp2 boringssl backend
- cmdline-opts/gen.pl: improve performance
- config: remove the check for and use of SIZEOF_SHORT
- configure: -pthread not available on AmigaOS 4.x
- configure: check for the stdatomic.h header in configure
- configure: fix --disable-headers-api
- configure: fix broken m4 syntax in TLS options
- configure: fixup bsdsocket detection code for AmigaOS 4.x
- configure: if asked to use TLS, fail if no TLS lib was detected
- configure: introduce CURL_SIZEOF
- connect: add quic connection information
- connect: close the happy eyeballs loser connection when using QUIC
- connect: revert the use of IP*_RECVERR
- connect: set socktype/protocol correctly
- cookie: reject cookies with "control bytes"
- cookie: treat a blank domain in Set-Cookie: as non-existing
- cookie: use %zu to infof() for size_t values
- curl-compilers.m4: make icc use -diag* options and disable two warnings
- curl-config: quote directories with potential space
- curl-confopts: remove leftover AC_REQUIREs
- curl-functions.m4: check whether atomics can link
- curl-wolfssl.m4: add options header when building test code
- curl.h: CURLE_CONV_FAILED is obsoleted
- curl.h: include <sys/select.h> on SunOS
- curl: output warning when a cookie is dropped due to size
- curl: writeout: fix repeated header outputs
- Curl_close: call Curl_resolver_cancel to avoid memory-leak
- curl_easy_header: Add CURLH_PSEUDO to sanity check
- curl_mime_data.3: polish the wording
- curl_multi_timeout.3: clarify usage
- CURLINFO_SPEED_UPLOAD/DOWNLOAD.3: fix examples
- CURLOPT_BUFFERSIZE.3: add upload buffersize to see also
- CURLOPT_CONNECT_ONLY.3: clarify multi API use
- CURLOPT_SERVER_RESPONSE_TIMEOUT: the new name
- digest: fix memory leak, fix not quoted 'opaque'
- digest: fix missing increment of 'nc' value for auth-int
- digest: pass over leading spaces in qop values
- digest: reject broken header with session protocol but without qop
- docs/cmdline-opts/gen.pl: encode leading single and double quotes
- docs/cmdline-opts: fix example and categories for --form-escape
- docs/cmdline: mark fail and fail-with-body as mutually exclusive
- docs: add dns category to --resolve
- docs: explain curl_easy_escape/unescape curl handle is ignored
- docs: remove him/her/he/she from documentation
- doh: move doh related struct definitions to doh.h
- doh: use https protocol by default
- easy_lock.h: include sched.h if available to fix build
- easy_lock.h: use __asm__ instead of asm to fix build
- easy_lock: fix build for mingw
- easy_lock: fix build with icc
- easy_lock: fix the #ifdef conditional for ia32_pause
- easy_lock: switch to using atomic_int instead of bool
- easyoptions: fix icc warning
- escape: remove outdated comment
- examples/curlx.c: remove
- file: add handling of native AmigaOS paths
- file: fix icc enumerated type mixed with another type warning
- ftp: use a correct expire ID for timer expiry
- getinfo: return better error on NULL as first argument
- GHA: add two Intel compiler CI jobs
- GHA: move libressl CI from zuul to GitHub
- gha: move over ngtcp2-gnutls CI job from zuul
- GHA: mv CI torture test from Zuul
- h2h3: fix overriding the 'TE: Trailers' header
- hostip: resolve *.localhost to 127.0.0.1/::1
- HTTP3.md: update to msh3 v0.4.0
- http: typecast the httpreq assignment to avoid icc compiler warning
- http_aws_sigv4.c: remove two unused includes
- http_chunks: remove an assign + typecast
- hyper: customize test1274 to how hyper unfolds headers
- hyper: enable obs-folded multiline headers
- hyper: use wakers for curl pause/resume
- imap: use ISALNUM() for alphanumeric checks
- ldap: adapt to conn->port now being an 'int'
- lib/curl_path.c: add ISC to license expression
- lib3026: reduce the number of threads to 100
- libcurl-security.3: fix typo on macro "SH_"
- libssh2: make atime/mtime date overflow return error
- libssh2: provide symlink name in SFTP directory listing
- libssh: ignore deprecation warnings
- libssh: make atime/mtime date overflow return error
- Makefile.m32: add `CURL_RC` and `CURL_STRIP` variables [ci skip]
- Makefile.m32: add `NGTCP2_LIBS` option [ci skip]
- makefile.m32: add support for custom ARCH [ci skip]
- Makefile.m32: allow -nghttp3/-ngtcp2 without -ssl [ci skip]
- Makefile.m32: do not set the libcurl.rc debug flag [ci skip]
- Makefile.m32: stop trying to build libcares.a [ci skip]
- memdebug: add annotation attributes
- mprintf: fix *dyn_vprintf() when out-of-memory
- mprintf: make dprintf_formatf never return negative
- msh3: fix the QUIC disconnect function
- multi: fix the return code from Curl_pgrsDone()
- multi: have curl_multi_remove_handle close CONNECT_ONLY transfer
- multi: use a pipe instead of a socketpair on apple platforms
- multi: use larger dns hash table for multi interface
- multi_wait: fix and improve Curl_poll error handling on Windows
- multi_wait: fix skipping to populate revents for extra_fds
- netrc.d: remove spurious quote
- netrc: Use the password from lines without login
- ngtcp2: Fix build error due to change in nghttp3 prototypes
- ngtcp2: fix incompatible function pointer types
- ngtcp2: Fix missing initialization of nghttp3_nv.flags
- ngtcp2: fix stall or busy loop on STOP_SENDING with upload data
- ngtcp2: implement cb_h3_stop_sending and cb_h3_reset_stream callbacks
- openssl: add `CURL_BORINGSSL_VERSION` to identify BoringSSL
- openssl: add cert path in error message
- openssl: add details to "unable to set client certificate" error
- openssl: fix BoringSSL symbol conflicts with LDAP and Schannel
- quiche: fix build failure
- select: do not return fatal error on EINTR from poll()
- sendf: fix paused header writes since after the header API
- sendf: make Curl_debug a void function
- sendf: skip storing HTTP headers if HTTP disabled
- sendf: store the header type in an unsigned char to avoid icc warnings
- splay: avoid using -1 in unsigned variable
- test3026: add support for Windows using native Win32 threads
- test3026: require 'threadsafe'
- test44[2-4]: add '--resolve' to the keywords
- tests/server/sockfilt.c: avoid race condition without a mutex
- tests: fix http2 tests to use CRLF headers
- tests: several enumerated type cleanups
- THANKS: merged two entries for Evgeny Grin
- tidy-up: delete unused build configuration macros
- tool: reintroduce set file comment code for AmigaOS
- tool_cfgable: make 'synthetic_error' a plain bool
- tool_formparse: fix variable may be used before its value is set
- tool_getparam: make --doh-url "" switch it off
- tool_getparam: repair cleanarg
- tool_operate: better cleanup of easy handle in exit path
- tool_paramhlp: fix "enumerated type mixed with another type"
- tool_paramhlp: make check_protocol return ParameterError
- tool_progress: avoid division by zero in parallel progress meter
- tool_writeout: fix enumerated type mixed with another type
- trace: 0x7F character is non-printable
- unit1303: four tests should have TRUE for 'connecting'
- url: enumerated type mixed with another type
- url: really use the user provided in the URL when netrc entry exists
- url: reject URLs with hostnames longer than 65535 bytes
- url: treat missing usernames in netrc as empty
- urldata: change second proxytype field to unsigned char to match
- urldata: make 'negnpn' use less storage
- urldata: make state.httpreq an unsigned char
- urldata: make three *_proto struct fields smaller
- urldata: move smaller fields down in connectdata struct
- urldata: reduce size of several struct fields
- vtls: make Curl_ssl_backend() return the enum type curl_sslbackend
- windows: improve random source

## Fixed in 7.84.0 - June 27 2022

7.84.0
7.84.0
7.84.0 changes only

Changes:

- curl: add --rate to set max request rate per time unit
- curl: deprecate --random-file and --egd-file
- curl_version_info: add CURL_VERSION_THREADSAFE
- CURLINFO_CAPATH/CAINFO: get the default CA paths from libcurl
- lib: make curl_global_init() threadsafe when possible
- libssh2: add CURLOPT_SSH_HOSTKEYFUNCTION
- opts: deprecate RANDOM_FILE and EGDSOCKET
- socks: support unix sockets for socks proxy

Bugfixes:

- aws-sigv4: fix potential NULL pointer arithmetic
- bindlocal: don't use a random port if port number would wrap
- c-hyper: mark status line as status for Curl_client_write()
- ci: avoid `cmake -Hpath`
- CI: bump FreeBSD 13.0 to 13.1
- ci: update github actions
- cmake: add libpsl support
- cmake: do not add libcurl.rc to the static libcurl library
- cmake: enable curl.rc for all Windows targets
- cmake: fix detecting libidn2
- cmake: support adding a suffix to the OS value
- configure: skip libidn2 detection when winidn is used
- configure: use the SED value to invoke sed
- configure: warn about rustls being experimental
- content_encoding: return error on too many compression steps
- cookie: address secure domain overlay
- cookie: apply limits
- copyright.pl: parse and use .reuse/dep5 for skips
- copyright: make repository REUSE compliant
- curl.1: add a few see also --tls-max
- curl.1: mention exit code zero too
- curl: re-enable --no-remote-name
- curl_easy_pause.3: remove explanation of progress function
- curl_getdate.3: document that some illegal dates pass through
- Curl_parsenetrc: don't access local pwbuf outside of scope
- curl_url_set.3: clarify by default using known schemes only
- CURLOPT_ALTSVC.3: document the file format
- CURLOPT_FILETIME.3: fix the protocols this works with
- CURLOPT_HTTPHEADER.3: improve comment in example
- CURLOPT_NETRC.3: document the .netrc file format
- CURLOPT_PORT.3: We discourage using this option
- CURLOPT_RANGE.3: remove ranged upload advice
- digest: added detection of more syntax error in server headers
- digest: tolerate missing "realm"
- digest: unquote realm and nonce before processing
- DISABLED: disable 1021 for hyper again
- docs/cmdline-opts: add copyright and license identifier to each file
- docs/CONTRIBUTE.md: document the 'needs-votes' concept
- docs: clarify data replacement policy for MIME API
- doh: remove UNITTEST macro definition
- examples/crawler.c: use the curl license
- examples: remove fopen.c and rtsp.c
- FAQ: Clarify Windows double quote usage
- fopen: add Curl_fopen() for better overwriting of files
- ftp: restore protocol state after http proxy CONNECT
- ftp: when failing to do a secure GSSAPI login, fail hard
- GHA/hyper: enable debug in the build
- gssapi: improve handling of errors from gss_display_status
- gssapi: initialize gss_buffer_desc strings
- headers api: remove EXPERIMENTAL tag
- http2: always debug print stream id in decimal with %u
- http2: reject overly many push-promise headers
- http: restore header folding behavior
- hyper: use 'alt-used'
- krb5: return error properly on decode errors
- lib: make more protocol specific struct fields #ifdefed
- libcurl-security.3: add "Secrets in memory"
- libcurl-security.3: document CRLF header injection
- libssh: skip the fake-close when libssh does the right thing
- links: update dead links to the curl-wiki
- log2changes: do not indent empty lines [ci skip]
- macos9: remove partial support
- Makefile.am: fix portability issues
- Makefile.m32: delete obsolete options, improve -On [ci skip]
- Makefile.m32: delete two obsolete OpenSSL options [ci skip]
- Makefile.m32: stop forcing XP target with ipv6 enabled [ci skip]
- max-time.d: clarify max-time sets max transfer time
- mprintf: ignore clang non-literal format string
- netrc: check %USERPROFILE% as well on Windows
- netrc: support quoted strings
- ngtcp2: allow curl to send larger UDP datagrams
- ngtcp2: correct use of ngtcp2 and nghttp3 signed integer types
- ngtcp2: enable Linux GSO
- ngtcp2: extend QUIC transport parameters buffer
- ngtcp2: fix alert_read_func return value
- ngtcp2: fix typo in preprocessor condition
- ngtcp2: handle error from ngtcp2_conn_submit_crypto_data
- ngtcp2: send appropriate connection close error code
- ngtcp2: support boringssl crypto backend
- ngtcp2: use helper funcs to simplify TLS handshake integration
- ntlm: provide a fixed fake hostname
- projects: fix third-party SSL library build paths for Visual Studio
- quic: add Curl_quic_idle
- quiche: support ca-fallback
- rand: stop detecting /dev/urandom in cross-builds
- remote-name.d: mention --output-dir
- runtests.pl: add the --repeat parameter to the --help output
- runtests: fix skipping tests not done event-based
- runtests: skip starting the ssh server if username is lacking
- scripts/copyright.pl: fix the exclusion to not ignore man pages
- sectransp: check for a function defined when __BLOCKS__ is undefined
- select: return error from "lethal" poll/select errors
- server/sws: support spaces in the HTTP request path
- speed-limit/time.d: mention these affect transfers in either direction
- strcase: some optimizations
- test 2081: add a valid reply for the second request
- test 675: add missing CR so the test passes when run through Privoxy
- test414: add the '--resolve' keyword
- test681: verify --no-remote-name
- tests 266, 116 and 1540: add a small write delay
- tests/data/test1501: kill ftp server after slow LIST response
- tests/getpart: fix getpartattr to work with "data" and "data2"
- tests/server/sws.c: change the HTTP writedelay unit to milliseconds
- test{440,441,493,977}: add "HTTP proxy" keywords
- tool_getparam: fix --parallel-max maximum value constraint
- tool_operate: make sure --fail-with-body works with --retry
- transfer: fix potential NULL pointer dereference
- transfer: maintain --path-as-is after redirects
- transfer: upload performance; avoid tiny send
- url: free old conn better on reuse
- url: remove redundant #ifdefs in allocate_conn()
- url: URL encode the path when extracted, if spaces were set
- urlapi: make curl_url_set(url, CURLUPART_URL, NULL, 0) clear all parts
- urlapi: support CURLU_URLENCODE for curl_url_get()
- urldata: reduce size of a few struct fields
- urldata: remove three unused booleans from struct UserDefined
- urldata: store tcp_keepidle and tcp_keepintvl as ints
- version: allow stricmp() for sorting the feature list
- vtls: make curl_global_sslset thread-safe
- wolfssh.h: removed
- wolfssl: correct the failf() message when a handle can't be made
- wolfSSL: explicitly use compatibility layer
- x509asn1: mark msnprintf return as unchecked

## Fixed in 7.83.1 - May 11 2022

7.83.1
7.83.1
7.83.1 changes only

Bugfixes:

- altsvc: fix hostname matching for trailing dots
- cirrus: Update to FreeBSD 12.3
- cirrus: Use pip for Python packages on FreeBSD
- conn: fix typo -> 'connection' in two function names
- cookies: make bad_domain() not consider a trailing dot fine
- curl: free resource in error path
- curl: guard against size_t wraparound in no-clobber code
- CURLOPT_DOH_URL.3: mention the known bug
- CURLOPT_HSTS*FUNCTION.3: document the involved structs as well
- CURLOPT_SSH_AUTH_TYPES.3: fix the default
- data/test376: set a proper name
- GHA/mbedtls: enabled nghttp2 in the build
- gha: build msh3
- gskit: fixed bogus setsockopt calls
- gskit: remove unused function set_callback
- hsts: ignore trailing dots when comparing hosts names
- HTTP-COOKIES: add missing CURLOPT_COOKIESESSION
- http: move Curl_allow_auth_to_host()
- http_proxy/hyper: handle closed connections
- hyper: fix test 357
- Makefile: fix "make ca-firefox"
- mbedtls: bail out if rng init fails
- mbedtls: fix compile when h2-enabled
- mbedtls: fix some error messages
- misc: use "autoreconf -fi" instead buildconf
- msh3: get msh3 version from MsH3Version
- msh3: print boolean value as text representation
- msh3: psss remote_port to MsH3ConnectionOpen
- ngtcp2: add ca-fallback support for OpenSSL backend
- nss: return error if seemingly stuck in a cert loop
- openssl: define HAVE_SSL_CTX_SET_EC_CURVES for libressl
- post_per_transfer: remove the updated filename
- sectransp: bail out if SSLSetPeerDomainName fails
- tests/server: declare variable 'reqlogfile' static
- tests: fix markdown formatting in README
- test{898,974,976}: add 'HTTP proxy' keywords
- tls: check more TLS details for connection reuse
- url: check SSH config match on connection reuse
- urlapi: address (harmless) UndefinedBehavior sanitizer warning
- urlapi: reject percent-decoding hostname into separator bytes
- x509asn1: make do_pubkey handle EC public keys

## Fixed in 7.83.0 - April 27 2022

7.83.0
7.83.0
7.83.0 changes only

Changes:

- curl: add %header{name} experimental support in -w handling
- curl: add %{header_json} experimental support in -w handling
- curl: add --no-clobber
- curl: add --remove-on-error
- header api: add curl_easy_header and curl_easy_nextheader
- msh3: add support for QUIC and HTTP/3 using msh3

Bugfixes:

- appveyor: add Cygwin build
- appveyor: only add MSYS2 to PATH where required
- BearSSL: add CURLOPT_SSL_CIPHER_LIST support
- BearSSL: add CURLOPT_SSL_CTX_FUNCTION support
- BINDINGS.md: add Hollywood binding
- CI: Do not use buildconf. Instead, use: autoreconf -fi
- CI: install Python package impacket to run SMB test 1451
- configure.ac: move -pthread CFLAGS setting back where it used to be
- configure: bump the copyright year range int the generated output
- conncache: include the zone id in the "bundle" hashkey
- connecache: remove duplicate connc->closure_handle check
- connect: make Curl_getconnectinfo work with conn cache from share handle
- connect: use TCP_KEEPALIVE only if TCP_KEEPIDLE is not defined
- cookie.d: clarify when cookies are sent
- cookies: improve errorhandling for reading cookiefile
- curl/system.h: update ifdef condition for MCST-LCC compiler
- curl: error out if -T and -d are used for the same URL
- curl: error out when options need features not present in libcurl
- curl: escape '?' in generated --libcurl code
- curl: fix segmentation fault for empty output filenames.
- curl_easy_header: fix typos in documentation
- CURLINFO_PRIMARY_PORT.3: clarify which port this is
- CURLOPT*TLSAUTH.3: they only work with OpenSSL or GnuTLS
- CURLOPT_DISALLOW_USERNAME_IN_URL.3: use uppercase URL
- CURLOPT_PREQUOTE.3: only works for FTP file transfers, not dirs
- CURLOPT_PROGRESSFUNCTION.3: fix typo in example
- CURLOPT_UNRESTRICTED_AUTH.3: extended explanation
- CURLSHOPT_UNLOCKFUNC.3: fix the callback prototype
- docs/HYPER.md: updated to reflect current hyper build needs
- docs/opts: Mention Schannel client cert type is P12
- docs: Fix missing semicolon in example code
- docs: lots of minor language polish
- English: use American spelling consistently
- fail.d: tweak the description
- firefox-db2pem.sh: make the shell script safer
- ftp: fix error message for partial file upload
- gen.pl: change wording for mutexed options
- GHA: add openssl3 jobs moved over from zuul
- GHA: build hyper with nightly rustc
- GHA: move bearssl jobs over from zuul
- gha: move the event-based test over from Zuul
- gtls: fix build for disabled TLS-SRP
- http2: handle DONE called for the paused stream
- http2: RST the stream if we stop it by our own choice
- http: avoid auth/cookie on redirects same host diff port
- http: close the stream (not connection) on time condition abort
- http: reject header contents with nul bytes
- http: return error on colon-less HTTP headers
- http: streamclose "already downloaded"
- hyper: fix status_line() return code
- hyper: fix tests 580 and 581 for hyper
- hyper: no h2c support
- infof: consistent capitalization of warning messages
- ipv4/6.d: clarify that they are about using IP addresses
- json.d: fix typo (overridden -> overridden)
- keepalive-time.d: It takes many probes to detect brokenness
- lib/warnless.[ch]: only check for WIN32 and ignore _WIN32
- lib670: avoid double check result
- lib: #ifdef on USE_HTTP2 better
- lib: fix some misuse of curlx_convert_wchar_to_UTF8
- lib: remove exclamation marks
- libssh2: compare sha256 strings case sensitively
- libssh2: make the md5 comparison fail if wrong length
- libssh: fix build with old libssh versions
- libssh: fix double close
- libssh: Improve fix for missing SSH_S_ stat macros
- libssh: unstick SFTP transfers when done event-based
- macos: set .plist version in autoconf
- mbedtls: remove 'protocols' array from backend when ALPN is not used
- mbedtls: remove server_fd from backend
- mk-ca-bundle.pl: Use stricter logic to process the certificates
- mk-ca-bundle.vbs: delete this script in favor of mk-ca-bundle.pl
- mlc_config.json: add file to ignore known troublesome URLs
- mqtt: better handling of TCP disconnect mid-message
- ngtcp2: add client certificate authentication for OpenSSL
- ngtcp2: avoid busy loop in low CWND situation
- ngtcp2: deal with sub-millisecond timeout
- ngtcp2: disconnect the QUIC connection proper
- ngtcp2: enlarge H3_SEND_SIZE
- ngtcp2: fix HTTP/3 upload stall and avoid busy loop
- ngtcp2: fix memory leak
- ngtcp2: fix QUIC_IDLE_TIMEOUT
- ngtcp2: make curl 1ms faster
- ngtcp2: remove remote_addr which is not used in a meaningful way
- ngtcp2: update to work after recent ngtcp2 updates
- ngtcp2: use token when detecting :status header field
- nonblock: restore setsockopt method to curlx_nonblock
- openssl: check SSL_get_peer_cert_chain return value
- openssl: enable CURLOPT_SSL_EC_CURVES with BoringSSL
- openssl: fix CN check error code
- options: remove mistaken space before paren in prototype
- perl: removed a double semicolon at end of line
- pop3/smtp: return *WEIRD_SERVER_REPLY when not understood
- projects/README: converted to markdown
- projects: Update VC version names for VS2017, VS2022
- rtsp: don't let CSeq error override earlier errors
- runtests: add 'bearssl' as testable feature
- runtests: make 'oldlibssh' be before 0.9.4
- schannel: remove dead code that never runs
- scripts/copyright.pl: ignore the new mlc_config.json file
- scripts: move three scripts from lib/ to scripts/
- test1135: sync with recent API updates
- test1459: disable for oldlibssh
- test375: fix line endings on Windows
- test386: Fix an incorrect test markup tag
- test718: edited slightly to return better HTTP
- tests/server/util.h: align WIN32 condition with util.c
- tests: refactor server/socksd.c to support --unix-socket
- timediff.[ch]: add curlx helper functions for timeval conversions
- tls: make mbedtls and NSS check for h2, not nghttp2
- tool and tests: force flush of all buffers at end of program
- tool_cb_hdr: Turn the Location: into a terminal hyperlink
- tool_getparam: error out on missing -K file
- tool_listhelp.c: uppercase URL
- tool_operate: fix a scan-build warning
- tool_paramhlp: use feof(3) to identify EOF correctly when using fread(3)
- transfer: redirects to other protocols or ports clear auth
- unit1620: call global_init before calling Curl_open
- url: check sasl additional parameters for connection reuse.
- vtls: provide a unified APLN-disagree string for all backends
- vtls: use a backend standard message for "ALPN: offers %s"
- vtls: use a generic "ALPN, server accepted" message
- winbuild/README.md: fixup dead link
- winbuild: Add a Visual Studio example to the README
- wolfssl: fix compiler error without IPv6

## Fixed in 7.82.0 - March 5 2022

7.82.0
7.82.0
7.82.0 changes only

Changes:

- curl: add --json
- mesalink: remove support

Bugfixes:

- appveyor: update images from VS 2019 to 2022
- appveyor: use VS 2017 image for the autotools builds
- azure-pipelines: add a build on Windows with libssh
- bearssl: fix connect error on expired cert and no verify
- bearssl: fix EXC_BAD_ACCESS on incomplete CA cert
- bearssl: fix session resumption (session id)
- build: enable -Warith-conversion
- build: fix -Wenum-conversion handling
- build: fix ngtcp2 crypto library detection
- checkprefix: remove strlen calls
- checksrc: fix typo in comment
- CI: move 'distcheck' job from zuul to azure pipelines
- CI: move scan-build job from Zuul to Azure Pipelines
- CI: move the NSS job from zuul to GHA
- ci: move the OpenSSL + c-ares job from Zuul to Circle CI
- CI: move the rustls CI job to GHA from Zuul
- CI: move two jobs from Zuul to Circle CI
- CI: test building wolfssl with --enable-opensslextra
- CI: workflows/wolfssl: install impacket
- circleci: add a job using libssh
- cirlceci: also run a c-ares job on arm with debug enabled
- cmake: fix iOS CMake project generation error
- cmdline-opts/gen.pl: fix option matching to improve references
- config.d: Clarify _curlrc filename is still valid on Windows
- configure.ac: use user-specified gssapi directory when using pkg-config
- configure: change output for cross-compiled alt-svc support
- configure: fix '--enable-code-coverage' typo
- configure: remove support for "embedded ares"
- configure: requires --with-nss-deprecated to build with NSS
- configure: set CURL_LIBRARY_PATH for nghttp2
- configure: support specification of a nghttp2 library path
- configure: use correct CFLAGS for threaded resolver with xlC on AIX
- curl tool: erase some more sensitive command line arguments
- curl-functions.m4: fix LIBRARY_PATH adjustment to avoid eval
- curl-functions.m4: revert DYLD_LIBRARY_PATH tricks in CURL_RUN_IFELSE
- curl-openssl: fix SRP check for OpenSSL 3.0
- curl-openssl: remove the OpenSSL headers and library versions check
- curl.h: fix typo
- curl: remove "separators" (when using globbed URLs)
- curl_getdate.3: remove pointless .PP line
- curl_multi_socket.3: remove callback and typical usage descriptions
- curl_url_set.3: mention when CURLU_ALLOW_SPACE was added
- CURLMOPT_TIMERFUNCTION/DATA.3: fix the examples
- CURLOPT_PROGRESSFUNCTION.3: fix example struct assignment
- CURLOPT_RESOLVE.3: change example port to 443
- CURLOPT_XFERINFOFUNCTION.3: fix example struct assignment
- CURLOPT_XFERINFOFUNCTION.3: fix typo in example
- CURLSHOPT_LOCKFUNC.3: fix typo "released" -> "released"
- des: fix compile break for OpenSSL without DES
- docs/cmdline-opts: add "mutexed" options for more http versions
- docs/DEPRECATE: remove NPN support in August 2022
- docs: capitalize the name 'Netscape'
- docs: document HTTP/2 not insisting on TLS 1.2
- docs: fix mandoc -T lint formatting complaints
- docs: update IETF links to use datatracker
- examples/curlx: support building with OpenSSL 1.1.0+
- examples/multi-app.c: call curl_multi_remove_handle as well
- formdata: avoid size_t => long typecast overflows
- ftp: provide error message for control bytes in path
- gen.pl: terminate "example" sections better
- gha: add a macOS CI job with libssh
- gskit: Convert to using Curl_poll
- gskit: Fix errors from Curl_strerror refactor
- gskit: Fix initialization of Curl_ssl_gskit struct
- h2/h3: allow CURLOPT_HTTPHEADER change ":scheme"
- hostcheck: fixed to not touch used input strings
- hostcheck: reduce strlen calls on chained certificates
- hostip: avoid unused parameter error in Curl_resolv_check
- http2: move two infof calls to debug-h2-only
- http: make Curl_compareheader() take string length arguments too
- if2ip: make Curl_ipv6_scope a blank macro when IPv6-disabled
- KNOWN_BUGS: fix typo "libpsl"
- ldap: return CURLE_URL_MALFORMAT for bad URL
- lib: remove support for CURL_DOES_CONVERSIONS
- libssh2: don't typecast socket to int for libssh2_session_handshake
- libssh: fix include files and defines use for Windows builds
- Makefile.am: Generate VS 2022 projects
- maketgz: return error if 'make dist' fails
- mbedtls: enable use of mbedtls without CRL support
- mbedtls: enable use of mbedtls without filesystem functions support
- mbedtls: fix CURLOPT_SSLCERT_BLOB (again)
- mbedtls: fix ssl_init error with mbedTLS 3.1.0+
- mbedtls: remove #include <mbedtls/certs.h>
- mbedtls: return CURLcode result instead of a mbedtls error code
- md5: check md5_init_func return value
- mime: use a define instead of the magic number 24
- misc: allow curl to build with wolfssl --enable-opensslextra
- misc: remove BeOS code and references
- misc: remove the final watcom references
- misc: remove unused data when IPv6 is not supported
- mqtt: free 'sendleftovers' in disconnect
- mqtt: free any send leftover data when done
- multi: allow user callbacks to call curl_multi_assign
- multi: grammar fix in comment
- multi: remember connection_id before returning connection to pool
- multi: set in_callback for multi interface callbacks
- netware: remove support
- next.d. remove .fi/.nf as they are handled by gen.pl
- ngtcp2: adapt to changed end of headers callback proto
- ngtcp2: fix declaration of ‘result’ shadows a previous local
- ngtcp2: Reset dynbuf when it is fully drained
- nss: handshake callback during shutdown has no conn->bundle
- ntlm: remove unused feature defines
- openldap: fix compiler warning when built without SSL support
- openldap: implement SASL authentication
- openldap: pass string length arguments to client_write()
- openssl.h: avoid including OpenSSL headers here
- openssl: check if sessionid flag is enabled before retrieving session
- openssl: check SSL_get_ex_data to prevent potential NULL dereference
- openssl: check the return value of BIO_new_mem_buf()
- openssl: fix `ctx_option_t` for OpenSSL v3+
- openssl: fix build for version < 1.1.0
- openssl: return error if TLS 1.3 is requested when not supported
- os400: Add function wrapper for system command
- os400: Add link to QADRT devkit to README.OS400
- os400: Default build to target current release
- OS400: fix typos in rpg include file
- projects: add support for Visual Studio 17 (2022)
- projects: fix Visual Studio wolfSSL configurations
- projects: remove support for MSVC before VC10 (Visual Studio 2010)
- quiche: after leaving h3_recving state, poll again
- quiche: change qlog file extension to `.sqlog`
- quiche: fix upload for bigger content-length
- quiche: handle stream reset
- quiche: remove two leftover debug infof() outputs
- quiche: verify the server cert on connect
- quiche: when *recv_body() returns data, drain it before polling again
- README.md: fix links
- remote-header-name.d: clarify
- runtests.pl: disable debuginfod
- runtests.pl: properly print the test if it contains binary zeros
- runtests.pl: support the nonewline attribute for the data part
- runtests.pl: tolerate test directories without Makefile.inc
- runtests: allow client/file to specify multiple directories
- runtests: make 'rustls' a testable feature
- runtests: make 'wolfssl' a testable feature
- runtests: set 'oldlibssh' for libssh versions before 0.9.5
- rustls: add CURLOPT_CAINFO_BLOB support
- schannel: move the algIds array out of schannel.h
- scripts/cijobs.pl: output data about all correct CI jobs
- scripts/completion.pl: improve zsh completion
- scripts/copyright.pl: support many provided filenames on the cmdline
- scripts/delta: check the file delta for current branch
- sectransp: mark a 3DES cipher as weak
- setopt: do bounds-check before strdup
- setopt: fix the TLSAUTH #ifdefs for proxy-disabled builds
- sha256: Fix minimum OpenSSL version
- smb: pass socket for writing and reading data instead of FIRSTSOCKET
- ssl: reduce allocated space for ssl backend when FTP is disabled
- test3021: disable all msys2 path transformation
- test374: gif data without new line at the end
- tests/disable-scan.pl: properly detect multiple symbols per line
- tests/unit/Makefile.am: add NSS_LIBS to build with NSS fine
- tool_findfile: check ~/.config/curlrc too
- tool_getparam: DNS options that need c-ares now fail without it
- TPF: drop support
- unit1610: init SSL library before calling SHA256 functions
- url: exclude zonefrom_url when no ipv6 is available
- url: given a user in the URL, find pwd for that user in netrc
- url: keep trailing dot in hostname
- url: make Curl_disconnect return void
- urlapi: handle "redirects" smarter
- urldata: CONN_IS_PROXIED replaces bits.proxy when proxy can be disabled
- urldata: remove conn->bits.user_passwd
- version_win32: fix warning for `CURL_WINDOWS_APP`
- vtls: fix socket check conditions
- vtls: pass on the right SNI name
- vxworks: drop support
- winbuild: add parameter WITH_SSH
- wolfssl: return CURLE_AGAIN for the SSL_ERROR_NONE case
- wolfssl: when SSL_read() returns zero, check the error
- write-out.d: Fix num_headers formatting
- x509asn1: toggle off functions not needed for diff tls backends

## Fixed in 7.81.0 - January 5 2022

7.81.0
7.81.0
7.81.0 changes only

Changes:

- mime: use percent-escaping for multipart form field and filenames

Bugfixes:

- asyn-ares: ares_getaddrinfo needs no happy eyeballs timer
- azure: make the "w/o HTTP/SMTP/IMAP" build disable SSL proper
- BINDINGS: add curl client for PostgreSQL
- BINDINGS: add one from Everything curl and update a link
- checksrc: detect more kinds of NULL comparisons we avoid
- CI: build examples for additional code verification
- CI: bump job to use mbedtls 3.1.0
- cmake: don't set _USRDLL on a static Windows build
- cmake: prevent dev warning due to mismatched arg
- cmake: private identifiers use CURL_ instead of CMAKE_ prefix
- config.d: update documentation to match the path search
- configure: add -lm to configure for rustls build.
- configure: better diagnostics if hyper is built wrong
- configure: don't enable TLS when --without-* flags are used
- configure: fix runtime-lib detection on macOS
- curl.1: require "see also" for every documented option
- curl: improve error message for --head with -J
- curl_easy_cleanup.3: remove from multi handle first
- curl_easy_escape.3: call curl_easy_cleanup in example
- curl_easy_unescape.3: call curl_easy_cleanup in example
- curl_multi_init.3: fix EXAMPLE formatting
- curl_multi_perform/socket_action.3: clarify what errors mean
- curl_share_setopt.3: split out options into their own man pages
- CURLOPT_STDERR.3: does not work with libcurl as a win32 DLL
- digest: compute user:realm:pass digest w/o userhash
- docs/checksrc: Add documentation for STRERROR
- docs/cmdline-opts: do not say "protocols: all"
- docs/examples: workaround broken -Wno-pedantic-ms-format
- docs/HTTP3: describe how to setup a h3 reverse-proxy for testing
- docs/INSTALL.md: typo fix : added missing "get" verb
- docs/URL-SYNTAX.md: space is not fine in a given URL
- docs: add known bugs list to HTTP3.md
- docs: address proselint nits
- docs: consistent man page SYNOPSIS
- docs: fix dead links, remove ECH.md
- docs: fix typo in OpenSSL 3 build instructions
- docs: Update the Reducing Size section
- example/progressfunc: remove code for old libcurls
- examples/multi-single.c: remove WAITMS()
- FAQ: typo fix ➤ "your"
- ftp: disable warning 4706 in MSVC
- gen.pl: improve example output format
- github workflow: add wolfssl (removed from zuul)
- github/workflows: add mbedtls and mbedtls-clang (removed from zuul)
- gtls: check return code for gnutls_alpn_set_protocols
- hash: lazy-alloc the table in Curl_hash_add()
- http2:set_transfer_url() return early on OOM
- HTTP3: update quiche build instructions
- http: enable haproxy support for hyper backend
- http: Fix CURLOPT_HTTP200ALIASES
- http_proxy: don't close the socket (too early)
- insecure.d: detail its use for SFTP and SCP as well
- insecure.d: expand and clarify
- libcurl-multi.3: "SOCKS proxy handshakes" are not blocking
- libcurl-security.3: mention address and URL mitigations
- libssh2: fix error message for sha256 mismatch
- libtest: avoid "assignment within conditional expression"
- lift: ignore is a deprecated config option, use ignoreRules
- linkcheck.yml: add CI job that checks markdown links
- m4/curl-compilers: tell clang -Wno-pointer-bool-conversion
- Makefile.m32: rename -winssl option to -schannel and tidy up
- mbedTLS: add support for CURLOPT_CAINFO_BLOB
- mbedtls: fix CURLOPT_SSLCERT_BLOB
- mbedtls: fix private member designations for v3.1.0
- misc: remove unused doh flags when CURL_DISABLE_DOH is defined
- misc: s/e-mail/email
- multi: cleanup the socket hash when destroying it
- multi: handle errors returned from socket/timer callbacks
- multi: shut down CONNECT in Curl_detach_connnection
- netrc.d: edit the .netrc example to look nicer
- ngtcp2: verify the server cert on connect (quictls)
- ngtcp2: verify the server certificate for the gnutls case
- nss:set_cipher don't clobber the cipher list
- openldap: implement STARTTLS
- openldap: process search query response messages one by one
- openldap: several minor improvements
- openldap: simplify ldif generation code
- openssl: check the return value of BIO_new()
- openssl: define HAVE_OPENSSL_VERSION for OpenSSL 1.1.0+
- openssl: remove `RSA_METHOD_FLAG_NO_CHECK` handling if unavailable
- openssl: remove usage of deprecated `SSL_get_peer_certificate`
- openssl: use non-deprecated API to read key parameters
- page-footer: add a mention of how to report bugs to the man page
- page-footer: document more environment variables
- request.d: refer to 'method' rather than 'command'
- retry-all-errors.d: make the example complete
- runtests: make the SSH library a testable feature
- rustls: read of zero bytes might be okay
- rustls: remove comment about checking handshaking
- rustls: remove incorrect EOF check
- sha256/md5: return errors when init fails
- socks5: use appropriate ATYP for numerical IP address hostnames
- test1156: enable for hyper
- test1156: fixup the stdout check for Windows
- test1525: tweaked for hyper
- test1526: enable for hyper
- test1527: enable for hyper
- test1528: enable for hyper
- test1554: adjust for hyper
- test1556: adjust for hyper
- test302[12]: run only with the libssh2 backend
- test661: enable for hyper
- tests/CI.md: add more information on CI environments
- tests/data/test302[12]: fix MSYS2 path conversion of hostpubsha256
- tftp: mark protocol as not possible to do over CONNECT
- tool_findfile: updated search for a file in the homedir
- tool_operate: only set SSH related libcurl options for SSH URLs
- tool_operate: warn if too many output arguments were found
- url.c: fix the SIGPIPE comment for Curl_close
- url: check ssl_config when reuse proxy connection
- url: reduce ssl backend count for CURL_DISABLE_PROXY builds
- urlapi: accept port number zero
- urlapi: if possible, shorten given numerical IPv6 addresses
- urlapi: provide more detailed return codes
- urlapi: reject short file URLs
- version_win32: Check build number and platform id
- vtls/rustls: adapt to the updated rustls_version proto
- writeout: fix %{http_version} for HTTP/3
- x509asn1: return early on errors
- zuul.d: update rustls-ffi to version 0.8.2
- zuul: fix quiche build pointing to wrong Cargo

## Fixed in 7.80.0 - November 10 2021

7.80.0
7.80.0
7.80.0 changes only

Changes:

- CURLOPT_MAXLIFETIME_CONN: maximum allowed lifetime for conn reuse
- CURLOPT_PREREQFUNCTION: add new callback
- libssh2: add SHA256 fingerprint support
- urlapi: add curl_url_strerror()
- urlapi: support UNC paths in file: URLs on Windows
- wolfssl: allow setting of groups/curves

Bugfixes:

- .github: retry macos "brew install" command on failure
- aws-sigv4: make signature work when post data is binary
- BINDINGS: URL updates
- build: remove checks for WinSock 1
- c-hyper: don't abort CONNECT responses early when auth-in-progress
- c-hyper: make Curl_http propagate errors better
- c-hyper: make CURLOPT_SUPPRESS_CONNECT_HEADERS work
- c-hyper: make test 217 run
- c-hyper: use hyper_request_set_uri_parts to make h2 better
- checksrc: ignore preprocessor lines
- CI/makefiles: introduce dedicated test target
- ci: update Lift config to match requirements of curl build
- cirrus: remove FreeBSD 11.4 from the matrix
- cirrus: switch to openldap24-client
- cleanup: constify unmodified static structs
- cmake: add CURL_ENABLE_SSL option
- cmake: fix error getting LOCATION property on non-imported target
- CMake: restore support for SecureTransport on iOS
- cmake: with OpenSSL, define OPENSSL_SUPPRESS_DEPRECATED
- cmdline-opts: made the 'Added:' field mandatory
- configure.ac: replace krb5-config with pkg-config
- configure: when hyper is selected, deselect nghttp2
- connect: use sysaddr_un from sys/un.h or custom-defined for windows
- curl-confopts.m4: remove --enable/disable-hidden-symbols
- curl-openssl.m4: modify library order for openssl linking
- curl-openssl: pass argument to sed single-quoted
- curl.1: remove mentions of really old version changes
- curl: actually append "-" to --range without number only
- curl: correct grammar in generated libcurl code
- curl: print help descriptions in an aligned right column
- curl_gssapi: fix link error on macOS Monterey
- curl_multi_socket_action.3: add a "RETURN VALUE" section
- curl_ntlm_core: use OpenSSL only if DES is available
- Curl_updateconninfo: store addresses for QUIC connections too
- CURLOPT_ALTSVC_CTRL.3: mention conn reuse is preferred
- CURLOPT_HSTSWRITEFUNCTION.3: using CURLOPT_HSTS_CTRL is required
- CURLOPT_HTTPHEADER.3: add description for specific headers
- docs/HTTP3: improve build instructions
- docs/Makefile.am: repair 'make html'
- docs: fix typo in CURLOPT_TRAILERFUNCTION example
- docs: provide "RETURN VALUE" section for more func man pages
- docs: reduce use of `very`
- doh: remove experimental code for DoH with GET
- examples/htmltidy: correct wrong printf() use
- examples/imap-append: fix end-of-data check
- ftp: make the MKD retry to retry once per directory
- gen.pl: insert the current date and version in generated man page
- gen.pl: replace leading single quotes with \(aq
- http2: make getsock not wait for write if there's no remote window
- HTTP3: fix the HTTP/3 Explained book link
- http: fix Basic auth with empty name field in URL
- http: reject HTTP response codes < 100
- http: remove assert that breaks hyper
- http: set content length earlier
- http_proxy: make hyper CONNECT() return the correct error code
- http_proxy: multiple CONNECT with hyper done better
- hyper: disable test 1294 since hyper doesn't allow such crazy headers
- hyper: does not support disabling CURLOPT_HTTP_TRANSFER_DECODING
- hyper: pass the CONNECT line to the debug callback
- imap: display quota information
- INSTALL: update symbol hiding option
- lib/mk-ca-bundle.pl: skip certs passed Not Valid After date
- lib: avoid fallthrough cases in switch statements
- libcurl.rc: switch out the copyright symbol for plain ASCII
- libssh2: Get the version at runtime if possible
- limit-rate.d: this is average over several seconds
- llist: remove redundant code, branch is never executed
- Makefile.m32: fix to not require OpenSSL with -libssh2 or -rtmp options
- maketgz: redirect updatemanpages.pl output to /dev/null
- manpages: require all to use the same section header order
- manpages: adjust the asterisk in some SYNOPSIS sections
- md5: fix compilation with OpenSSL 3.0 API
- misc: fix a few issues on MidnightBSD
- misc: fix typos in docs and comments
- ngtcp2: advertise h3 as well as h3-29
- ngtcp2: compile with the latest nghttp3
- ngtcp2: specify the missing required callback functions
- ngtcp2: use latest QUIC TLS RFC9001
- NTLM: use DES_set_key_unchecked with OpenSSL
- openssl: if verifypeer is not requested, skip the CA loading
- openssl: with OpenSSL 1.1.0+ a failed RAND_status means goaway
- Revert "src/tool_filetime: disable -Wformat on mingw for this file"
- sasl: binary messages
- schannel: fix memory leak due to failed SSL connection
- scripts/delta: count command line options in the new file
- sendf: accept zero-length data in Curl_client_write()
- sha256: use high-level EVP interface for OpenSSL
- smooth-gtk-thread.c: enhance the mutex lock use
- sws: fix memory leak on exit
- test1160: edited to work with hyper
- test1173: make manpage-syntax.pl spot \n errors in examples
- test1185: verify checksrc
- test1266/1267: disabled on hyper: no HTTP/0.9 support
- test1287: make work on hyper
- test207: accept a different error code for hyper
- test262: don't attempt with hyper
- test552: updated to work with hyper
- test559: add 'HTTP' in keywords
- tests/smbserver.py: fix compatibility with impacket 0.9.23+
- tests: add Schannel-specific tests and disable unsupported ones
- tests: disable test 2043
- tests: kill some test servers afterwards to avoid locked logfiles
- tests: use python3 in test 1451
- tls: remove newline from three infof() calls
- tool_cb_prg: make resumed upload progress bar show better
- tool_listhelp: easier generated with gen.pl
- tool_main: fix typo in comment
- tool_operate: a failed etag save now only fails that transfer
- URL-SYNTAX: add IMAP UID SEARCH example
- url: check the return value of curl_url()
- url: set "k->size" -1 at start of request
- urlapi: skip a strlen(), pass in zero
- urlapi: URL decode percent-encoded hostnames
- version_win32: use actual version instead of manifested version
- vtls: Fix a memory leak if an SSL session cannot be added to the cache
- wolfssl: use for SHA256, MD4, MD5, and setting DES odd parity
- zuul: pin the quiche build to use an older cmake-rs

## Fixed in 7.79.1 - September 22 2021

7.79.1
7.79.1
7.79.1 changes only

Bugfixes:

- Curl_http2_setup: don't change connection data on repeat invokes
- curl_multi_fdset: make FD_SET() not operate on sockets out of range
- dist: provide lib/.checksrc in the tarball
- FAQ: add GOPHERS + curl works on data, not files
- hsts: CURLSTS_FAIL from hsts read callback should fail transfer
- hsts: handle unlimited expiry
- http: fix the broken >3 digit response code detection
- strerror: use sys_errlist instead of strerror on Windows
- test1184: disable
- tests/sshserver.pl: make it work with openssh-8.7p1

## Fixed in 7.79.0 - September 15 2021

7.79.0
7.79.0
7.79.0 changes only

Changes:

- bearssl: support CURLOPT_CAINFO_BLOB
- http: consider cookies over localhost to be secure
- secure transport: support CURLINFO_CERTINFO

Bugfixes:

- CVE-2021-22945: clear the leftovers pointer when sending succeeds
- CVE-2021-22946: do not ignore --ssl-reqd
- CVE-2021-22947: reject STARTTLS server response pipelining
- ares: use ares_getaddrinfo()
- asyn-ares.c: move all version number checks to the top
- auth: do not append zero-terminator to authorization id in kerberos
- auth: properly handle byte order in kerberos security message
- auth: use sasl authzid option in kerberos
- auth: we do not support a security layer after kerberos authentication
- BINDINGS.md: update links to use https where available
- build: fix compiler warnings
- c-hyper: deal with Expect: 100-continue combined with POSTFIELDS
- c-hyper: fix header value passed to debug callback
- c-hyper: handle HTTP/1.1 => HTTP/1.0 downgrade on reused connection
- c-hyper: initial step for 100-continue support
- c-hyper: initial support for "dumping" 1xx HTTP responses
- c-hyper: remove the hyper_executor_poll() loop from Curl_http
- CI/cirrus: reduce compile time with increased parallelism
- CI: use GitHub Container Registry instead of Docker Hub
- cirrus: Add FreeBSD 13.0 job and disable sanitizer build
- cmake: avoid poll() on macOS
- cmake: sync CURL_DISABLE options
- codeql: fix error "Resource not accessible by integration"
- compressed.d: it's a request, not an order
- config.d: escape the backslash properly
- config.d: note that curlrc is used even when --config
- config: get rid of the unused HAVE_SIG_ATOMIC_T et. al.
- configure.ac: revert bad nghttp2 library detection improvements
- configure: error out if both ngtcp2 and quiche are specified
- configure: make --disable-hsts work
- configure: set classic mingw minimum OS version to XP
- configure: tweak nghttp2 library name fix
- connect: get local port + ip also when reusing connections
- connect: remove superfluous conditional
- curl-openssl.m4: check lib64 for the pkg-config file
- curl-openssl.m4: show correct output for OpenSSL v3
- curl.1: mention "global" flags
- curl.1: provide examples for each option
- curl: add warning for ignored data after quoted form parameter
- curl: add warning for incompatible parameters usage
- curl: better error message when -O fails to get a good name
- curl: stop retry if Retry-After: is longer than allowed
- curl_easy_setopt.3: improve the string copy wording
- Curl_hsts_loadcb: don't attempt to load if hsts wasn't inited
- curl_setup.h: sync values for HTTP_ONLY
- curl_url_get.3: clarify about path and query
- CURLMOPT_TIMERFUNCTION.3: remove misplaced "time"
- CURLOPT_DOH_URL.3: CURLOPT_OPENSOCKETFUNCTION is not inherited
- CURLOPT_SSL_CTX_*.3: tidy up the example
- CURLOPT_UNIX_SOCKET_PATH.3: remove nginx reference, add see also
- docs/MQTT: update state of username/password support
- docs: remove experimental mentions from HSTS and MQTT
- docs: the security list is reached at security at curl.se now
- easy: use a custom implementation of wcsdup on Windows
- examples/*hiperfifo.c: fix calloc arguments to match function proto
- examples/cookie_interface: avoid printfing time_t directly
- examples/cookie_interface: fix scan-build printf warning
- examples/ephiperfifo.c: simplify signal handler
- FAQ: add two dev related questions
- getparameter: fix the --local-port number parser
- happy-eyeballs-timeout-ms.d: polish the wording
- hostip: Make Curl_ipv6works function independent of getaddrinfo
- http2: Curl_http2_setup needs to init stream data in all invokes
- http2: revert a change that broke upgrade to h2c
- http2: revert call the handle-closed function correctly on closed stream
- http: disallow >3-digit response codes
- http: ignore content-length if any transfer-encoding is used
- http_proxy: clear 'sending' when the outgoing request is sent
- http_proxy: fix the User-Agent inclusion in CONNECT
- http_proxy: fix user-agent and custom headers for CONNECT with hyper
- http_proxy: only wait for writable socket while sending request
- INTERNALS: bump c-ares requirement to 1.16.0
- INTERNALS: c-ares has a new home: c-ares.org
- lib: don't use strerror()
- libcurl-errors.3: clarify two CURLUcode errors
- limit-rate.d: clarify base unit
- mailing lists: move from cool.haxx.se to lists.haxx.se
- mbedtls: avoid using a large buffer on the stack
- mbedTLS: initial 3.0.0 support
- mbedtls_threadlock: fix unused variable warning
- mksymbolsmanpage.pl: Fix showing symbol's last used version
- mksymbolsmanpage.pl: match symbols case insensitively
- multi: fix compiler warning with `CURL_DISABLE_WAKEUP`
- ngtcp2: compile with the latest ngtcp2 and nghttp3
- ngtcp2: fix build with ngtcp2 and nghttp3
- ngtcp2: remove the acked_crypto_offset struct field init
- ngtcp2: replace deprecated functions with nghttp3_conn_shutdown_stream_read
- ngtcp2: reset the outstanding send buffer again when drained
- ngtcp2: rework the return value handling of ngtcp2_conn_writev_stream
- ngtcp2: stop buffering crypto data
- ngtcp2: utilize crypto API functions to simplify
- openssl: annotate SSL3_MT_SUPPLEMENTAL_DATA
- openssl: when creating a new context, there cannot be an old one
- opt-docs: make sure all man pages have examples
- opt-docs: verify man page sections + order
- opts docs: unify phrasing in NAME header
- output.d: add method to suppress response bodies
- page-header: add GOPHERS, simplify wording in the 1st para
- progress: fix a compile warning on some systems
- progress: make trspeed avoid floats
- runtests: add option -u to error on server unexpectedly alive
- schannel: Work around typo in classic mingw macro
- scripts: invoke interpreters through /usr/bin/env
- setopt: enable CURLOPT_IGNORE_CONTENT_LENGTH for hyper
- strerror.h: remove the #include from files not using it
- symbols-in-versions: fix CURLSSLBACKEND_QSOSSL last used version
- test1138: remove trailing space to make work with hyper
- test1173: check references to libcurl options
- test1280: CRLFify the response to please hyper
- test1565: fix windows build errors
- test365: verify response with chunked AND Content-Length headers
- tests/*server.pl: flush output before executing subprocess
- tests/*server.py: remove pidfile on server termination
- tests/runtests.pl: cleanup copy&paste mistakes and unused code
- tests/server/*.c: align handling of portfile argument and file
- tests: adjust the tftpd output to work with hyper mode
- tests: be explicit about using 'python3' instead of 'python'
- tests: enable test 1129 for hyper builds
- tests: make three tests pass until 2037
- tool/tests: fix potential year 2038 issues
- tool_operate: Fix --fail-early with parallel transfers
- url: fix compiler warning in no-verbose builds
- urlapi.c:seturl: assert URL instead of using if-check
- vtls: fix typo in schannel_verify.c
- winbuild/README.md: clarify GEN_PDB option
- wolfssl: clean up wolfcrypt error queue
- write-out.d: clarify size_download/upload
- x509asn1: fix heap over-read when parsing x509 certificates

## Fixed in 7.78.0 - July 21 2021

7.78.0
7.78.0
7.78.0 changes only

Changes:

- curl_url_set: reject spaces in URLs w/o CURLU_ALLOW_SPACE
- CURLE_SETOPT_OPTION_SYNTAX: new error name for wrong setopt syntax
- hostip: make 'localhost' return fixed values
- mbedtls: add support for cert and key blob options
- metalink: remove all support for it
- mqtt: add support for username and password

Bugfixes:

- --socks4[a]: clarify where the hostname is resolved
- ares: always store IPv6 addresses first
- asyn-ares: remove check for 'data' in Curl_resolver_cancel
- bearssl: explicitly initialize all fields of Curl_ssl
- bearssl: remove incorrect const on variable that is modified
- build: fix compiler warnings when CURL_DISABLE_VERBOSE_STRINGS
- c-hyper: abort CONNECT response reading early on non 2xx responses
- c-hyper: add support for transfer-encoding in the request
- c-hyper: bail on too long response headers
- c-hyper: clear NTLM auth buffer when request is issued
- c-hyper: convert HYPERE_INVALID_PEER_MESSAGE to CURLE_UNSUPPORTED_PROTOCOL
- c-hyper: fix NTLM on closed connection tested with test159
- c-hyper: fix the uploaded field in progress callbacks
- c-hyper: handle NULL from hyper_buf_copy()
- c-hyper: support CURLINFO_STARTTRANSFER_TIME
- c-hyper: support CURLOPT_HEADER
- ccsidcurl: fix the compile errors
- CI/cirrus: install impacket from PyPI instead of FreeBSD packages
- CI: add bearssl build
- CI: add Circle CI
- CI: add jobs using Zuul
- CI: delete --enable-hsts option (it is the default now)
- CI: remove travis details
- cleanup: spell DoH with a lowercase o
- cmake: add CURL_DISABLE_NTLM option
- cmake: avoid leaking absolute paths into exported config
- cmake: fix IoctlSocket FIONBIO check
- cmake: fix support for UnixSockets feature on Win32
- cmake: remove libssh2 feature checks
- cmake: try well-known send/recv signature for Apple
- configure.ac: make non-executable
- configure/cmake: remove checks for many unused functions
- configure: add --disable-ntlm option
- configure: disable RTSP when hyper is selected
- configure: do not strip out debug flags
- configure: fix nghttp2 library name for static builds
- configure: inhibit the implicit-fallthrough warning on gcc-12
- configure: rename get-easy-option configure option to get-easy-options
- conn_shutdown: if closed during CONNECT cleanup properly
- conncache: lowercase the hash key for better match
- cookies: track expiration in jar to optimize removals
- copyright: add boiler-plate headers to CI config files
- crustls: bump crustls version and use new URL
- curl.h: <sys/select.h> is supported by VxWorks7
- curl.h: include sys/select.h for NuttX RTOS
- curl: ignore blank --output-dir
- curl_endian: remove the unused Curl_write64_le function
- curl_multibyte: Remove local encoding fallbacks
- Curl_ntlm_core_mk_nt_hash: fix OOM in error path
- Curl_ssl_getsessionid: fail if no session cache exists
- CURLOPT_WRITEFUNCTION.3: minor update of the example
- docs/BINDINGS: fix outdated links
- docs/examples: use curl_multi_poll() in multi examples
- docs/INSTALL: remove mentions of configure --with-darwin-ssl
- docs: document missing arguments to commands
- docs: fix inconsistencies in EGDSOCKET documentation
- docs: fix incorrect argument name reference
- docs: Fix typos
- docs: make docs for --etag-save match the program behaviour
- docs: use --max-redirs instead of --max-redir
- doh: (void)-prefix call to curl_easy_setopt
- doh: fix wrong DEBUGASSERT for doh private_data
- easy: during upkeep, attach Curl_easy to connections in the cache
- examples/multi-single: fix scan-build warning
- examples: length-limit two sscanf() uses of %s
- examples: safer and more proper read callback logic
- filecheck: quietly remove test-place/*~
- formdata: avoid "Argument cannot be negative" warning
- formdata: correct typecast in curl_mime_data call
- GHA: add a linux-hyper job
- GHA: add several libcurl tests to the hyper job
- GHA: run the newly fixed tests with hyper
- github: timeout jobs on macOS after 90 minutes
- glob: pass an 'int' as len when using printf's %*s
- gnutls: set the preferred TLS versions in correct order
- GOVERNANCE: add 'user', 'committer' and 'contributor'
- hostip: (macOS) free returned memory of SCDynamicStoreCopyProxies
- hostip: bad CURLOPT_RESOLVE syntax now returns error
- hsts: ignore numerical IP address hosts
- HSTS: not experimental anymore
- http2: clarify 'Using HTTP2' verbose message
- http2: init recvbuf struct for pushed streams
- http2_connisdead: handle trailing GOAWAY better
- http: fix crash in rate-limited upload
- http: make the haproxy support work with unix domain sockets
- http_proxy: deal with non-200 CONNECT response with Hyper
- hyper: propagate errors back up from read callbacks
- HYPER: remove mentions of deprecated development branch
- idn: fix libidn2 with windows unicode builds
- infof: remove newline from format strings, always append it
- lib: don't compare fd to FD_SETSIZE when using poll
- lib: fix compiler warnings with CURL_DISABLE_NETRC
- lib: fix type of len passed to *printf's %*s
- lib: more %u for port and int for %*s fixes
- lib: use %u instead of %ld for port number printf
- libcurl-security.3: mention file descriptors and forks
- libssh2: limit time a disconnect can take to 1 second
- mbedtls: make mbedtls_strerror always work
- mbedtls: Remove unnecessary include
- mqtt: detect illegal and too large file size
- mqtt: extend the error message for no topic
- msnprintf: return number of printed characters excluding null byte
- multi: add scan-build-6 work-around in curl_multi_fdset
- multi: alter transfer timeout ordering
- multi: do not switch off connect_only flag when closing
- multi: fix crash in curl_multi_wait / curl_multi_poll
- netrc: skip 'macdef' definitions
- ngtcp2: disable TLSv1.3 compatible mode when using GnuTLS
- openssl: avoid static variable for seed flag
- openssl: don't remove session id entry in disassociate
- pinnedpubkey.d: fix formatting for version support lists
- proto.d: fix formatting for paragraphs after margin changes
- quiche: use send() instead of sendto() to avoid macOS issue
- Revert "c-hyper: handle body on HYPER_TASK_EMPTY"
- Revert "ftp: Expression 'ftpc->wait_data_conn' is always false"
- runtests: also find the last test in Makefile.inc
- runtests: enable 'hyper mode' only for HTTP tests
- runtests: init $VERSION to avoid warnings when using -l
- runtests: parse data/Makefile.inc instead of using make
- runtests: skip disabled tests unless -f is used
- rustls: remove native_roots fallback
- schannel: set ALPN length correctly for HTTP/2
- SChannel: Use '_tcsncmp()' instead
- sectransp: check for client certs by name first, then file
- setopt: fix incorrect comments
- socketpair: fix potential hangs
- socks4: scan for the IPv4 address in resolve results
- ssl: read pending close notify alert before closing the connection
- sws: malloc request struct instead of using stack
- telnet: fix option parser to not send uninitialized contents
- test1116: hyper doesn't pass through "surprise-trailers"
- test1147: hyper doesn't allow "crazy" request headers like built-in
- test1151: added missing CRLF to work with hyper
- test1216: adjusted for hyper mode
- test1218: adjusted for hyper mode
- test1230: adjust to work in hyper mode
- test1340/1341: adjusted for hyper mode
- test1438/1457: add HTTP keyword to make hyper mode work
- test1514: add a CRLF to the response to make it correct
- test1518: adjusted to work with hyper
- test1519: adjusted to work with hyper
- test1594/1595/1596: fix to work in hyper mode
- test269: disable for hyper
- test3010: work with hyper mode
- test328: avoid a header-looking body to make hyper mode work
- test339: CRLFify better to work in hyper mode
- test347: CRLFify to work in hyper mode
- test393: make Content-Length fit within 64-bit for hyper
- test394: hyper returns a different error
- test395: hyper cannot work around > 64-bit content-lengths like built-in
- test433: adjust for hyper mode
- test434: add HTTP keyword
- test500: adjust to work with hyper mode
- test566: adjust to work with hyper mode
- test599: adjusted to work in hyper mode
- test644: remove as duplicate of test 587
- tests: fix Accept-Encoding strips to work with Hyper builds
- TLS: prevent shutdown loops to get stuck
- tool: make _lseeki64() macro work with the PellesC compiler
- tool_help: document that --tlspassword takes a password
- tool_help: remove unused define
- url.c: remove two variable assigns that are never read
- url: (void)-prefix a curl_url_get() call
- url: bad CURLOPT_CONNECT_TO syntax now returns error
- version: turn version number functions into returning void
- vtls: exit addsessionid if no cache is inited
- vtls: fix connection reuse checks for issuer cert and case sensitivity
- vtls: only store TIMER_APPCONNECT for non-proxy connect
- vtls: use free() not curl_free()
- warnless: simplify type size handling
- Win32: fix build with Watt-32
- winbuild/README: VC should be set to 6 'or larger'
- winbuild: support alternate nghttp2 static lib name
- wolfssl: failing to set a session id is not reason to error out
- write-out.d: clarify urlnum is not unique for de-globbed URLs
- zuul: use the new rustls directory name

## Fixed in 7.77.0 - May 26 2021

7.77.0
7.77.0
7.77.0 changes only

Changes:

- configure: make the TLS library choice(s) explicit
- curl: ignore options asking for SSLv2 or SSLv3
- hsts: enable by default
- SSL: support in-memory CA certs for some backends
- vtls: refuse setting any SSL version

Bugfixes:

- CVE-2021-22897: schannel cipher selection surprise
- CVE-2021-22898: TELNET stack contents disclosure
- CVE-2021-22901: TLS session caching disaster
- AmigaOS: add functions definitions for SHA256
- build: fix compilation for Windows UWP platform
- c-hyper: don't write to set.writeheader if null
- c-hyper: fix handling of zero-byte chunk from hyper
- c-hyper: handle body on HYPER_TASK_EMPTY
- checksrc: complain on == NULL or != 0 checks in conditions
- CI/cirrus: add shared and static Windows release builds
- cmake: add CURL_ENABLE_EXPORT_TARGET option
- cmake: check for getppid and utimes
- cmake: detect CURL_SA_FAMILY_T
- cmake: fix two invokes result in different curl_config.h
- cmake: make libcurl output filename configurable
- cmake: Use multithreaded compilation on VS 2008+
- config: remove now-unused macros
- configure: if asked for, fail if ldap is not found
- configure: provide --with-openssl, deprecate --with-ssl
- conn: add 'attach' to protocol handler, make libssh2 use it
- connect: use CURL_SA_FAMILY_T for portability
- ConnectionExists: respect requests for h1 connections better
- cookie: CURLOPT_COOKIEFILE set to NULL switches off cookies
- curl-wolfssl.m4: without custom include path, assume /usr/include
- curl: include libmetalink version in --version output
- Curl_http_header: check for colon when matching Persistent-Auth
- Curl_http_input_auth: require valid separator after negotiation type
- Curl_input_digest: require space after Digest
- curl_mprintf.3: add description
- curl_setup: provide the shutdown flags wider
- curl_url_set.3: add memory management information
- CURLcode: add CURLE_SSL_CLIENTCERT
- CURLOPT_CAPATH.3: defaults to a path, not NULL
- CURLOPT_IPRESOLVE: preventing wrong IP version from being used
- CURLOPT_POSTFIELDS.3: clarify how it gets the size of the data
- data_pending: check only SECONDARY socket for FTP(S) transfers
- docs/TheArtOfHttpScripting: fix markdown links
- docs: camelcase it like GitHub everywhere
- docs: cookies from HTTP headers need domain set
- docs: fix typo in fail-with-body doc
- docs: improve INTERNALS.md regarding getsock cb
- docs: replace dots with dashes in markdown enums
- easy: ignore sigpipe in curl_easy_send
- FILEFORMAT: mention sectransp as a feature
- GIT-INFO: suggest using autoreconf instead of buildconf
- github: add a workflow with libssh2 on macOS using cmake
- github: inhibit deprecated declarations for clang on macOS
- GnuTLS: don't allow TLS 1.3 for versions that don't support it
- gnutls: make setting only the MAX TLS allowed version work
- gskit: fix CURL_DISABLE_PROXY build
- gskit: fix undefined reference to 'conn'
- hostip.h: remove declaration of unimplemented function
- hostip: remove the debug code for LocalHost
- http2: call the handle-closed function correctly on closed stream
- http2: fix a resource leak in push_promise()
- http2: fix resource leaks in set_transfer_url()
- http2: make sure pause is done on HTTP
- http2: move the stream error field to the per-transfer storage
- http2: skip immediate parsing of payload following protocol switch
- http2: use nghttp2_session_upgrade2 instead of nghttp2_session_upgrade
- HTTP3.md: fix nghttp2's HTTP/3 server port
- HTTP3.md: make the ngtcp2 build use the quictls fork
- http: deal with partial CONNECT sends
- http: fix the check for 'Authorization' with Bearer
- http: limit the initial send amount to used upload buffer size
- http: reset the header buffer when sending the request
- http: use offsets inst of integer literals for header parsing
- INSTALL: add IBM i specific quirks
- krb5/name_to_level: replace checkprefix with curl_strequal
- krb5: don't use 'static' to store PBSZ size response
- krb5: remove the unused 'overhead' function
- lib/hostip6.c: make NAT64 address synthesis on macOS work
- lib1564.c: enable last wakeup test part on Windows
- lib: fix 0-length Curl_client_write calls
- lib: fix some misuse of curlx_convert_UTF8_to_tchar
- libcurl-security.3: be careful of setuid
- libcurl-security.3: don't try to filter IPv4 hosts based on the URL
- libcurl.3: mention the URL API
- libssh2: fix Value stored to 'sshp' is never read
- libssh2: ignore timeout during disconnect
- libssh: fix "empty expression statement has no effect" warnings
- libtest: remove lib530.c
- m4: add security frameworks on Mac when compiling rustls
- multi: don't close connection HTTP_1_1_REQUIRED
- multi: fix slow write/upload performance on Windows
- multi: reduce Win32 API calls to improve performance
- ngtcp2: fix the cb_acked_stream_data_offset proto
- NSS: add ciphers to map
- NSS: make colons, commas and spaces valid separators in cipher list
- nss_set_blocking: avoid static for sock_opt
- ntlm: precaution against super huge type2 offsets
- openldap: protect SSL-specific code with proper #ifdef
- openldap: replace ldap_ prefix on private functions
- openssl: fix build error with OpenSSL < 1.0.2
- openssl: remove unneeded cast for CertOpenSystemStore()
- os400: additional support for options metadata
- progress: fix scan-build-11 warnings
- progress: reset limit_size variables at transfer start
- progress: when possible, calculate transfer speeds with microseconds
- README.md: delete Codacy UTM parameters
- Revert "Revert 'multi: implement wait using winsock events'"
- rustls: only return CURLE_AGAIN when TLS session is fully drained
- rustls: use ALPN
- sasl: use 'unsigned short' to store mechanism
- schannel: Disable auto credentials; add an option to enable it
- schannel: Support strong crypto option
- sectransp: allow cipher name to be specified
- sectransp: fix EXC_BAD_ACCESS caused by uninitialized buffer
- sigpipe: ignore SIGPIPE when using wolfSSL as well
- sockfilt: avoid getting stuck waiting for writable socket
- sockfilt: fix invalid increment of handles index variable nfd
- sws: #ifdef S_IFSOCK use
- sws: allow HTTP requests up to 2MB in size
- test server: take care of siginterrupt() deprecation
- test2100: make it run with and require IPv6
- tests/disable-scan.pl: also scan all m4 files
- tests/getpart: generate output URL encoded for better diffs
- tests: ignore case of chunked hex numbers in tests
- tls: add USE_HTTP2 define
- tool_getparam: handle failure of curlx_convert_tchar_to_UTF8()
- tool_getparam: replace (in-place) '%20' by '+' according to RFC1866
- tool_operate: don't discard failed parallel transfer result
- tool_writeout: fix the HTTP_CODE json output
- travis: disable the failing libssh build
- URL-SYNTAX: update IDNA section for WHATWG spec changes
- urlapi: "normalize" numerical IPv4 hostnames
- vauth: factor base64 conversions out of authentication procedures
- version: add gsasl_version to curl_version_info_data
- version: add OpenLDAP version in the output
- vtls: deduplicate some DISABLE_PROXY ifdefs
- vtls: reset ssl use flag upon negotiation failure
- wolfssl: handle SSL_write() returns 0 for error
- wolfssl: remove SSLv3 support leftovers

## Fixed in 7.76.1 - April 14 2021

7.76.1
7.76.1
7.76.1 changes only

Bugfixes:

- configure: disable min version set for Darwin
- configure: include <time.h> unconditionally
- configure: remove use of RETSIGTYPE
- docs/HTTP3.md: update the build instruction using gnutls
- examples/hiperfifo.c: check event_initialized before delete
- file: support GET-ing directories again
- github/workflow: add "security-extended" to codeql-analysis.yml
- h2: allow 100 streams by default
- hostip: fix builds that disable all asynchronous DNS
- http_proxy: only loop on 407 + close if we have credentials
- install: add instructions for Apple Darwin platforms
- lib: remove unused HAVE_INET_NTOA_R* defines
- libssh: get rid of PATH_MAX
- ngtcp2+gnutls: clear credentials when freed
- ngtcp2: Use ALPN h3-29 for now
- ntlm: fix negotiated flags usage
- ntlm: support version 2 on 32-bit platforms
- openssl: fix CURLOPT_SSLCERT_BLOB without CURLOPT_SSLCERT_KEY
- TLS: fix HTTP/2 selection
- tool_progress: fix progress meter final update in parallel mode
- typecheck-gcc: make the ssl-ctx-cb check use SSL_CTX pointers

## Fixed in 7.76.0 - March 31 2021

7.76.0
7.76.0
7.76.0 changes only

Changes:

- cookies: Support multiple -b parameters
- curl: add --fail-with-body
- doh: add options to disable ssl verification
- http: add support to read and store the referrer header
- sasl: support SCRAM-SHA-1 and SCRAM-SHA-256 via libgsasl
- vtls: initial implementation of rustls backend

Bugfixes:

- CVE-2021-22876: strip credentials from the auto-referer header field
- CVE-2021-22890: add 'isproxy' argument to Curl_ssl_get/addsessionid()
- asyn-ares: use consistent resolve error message
- BUG-BOUNTY: removed the cooperation mention
- build: delete unused feature guards
- build: fix --disable-dateparse
- build: fix --disable-http-auth
- build: remove all traces of USE_BLOCKING_SOCKETS
- c-hyper: Remove superfluous pointer check
- c-hyper: support automatic content-encoding
- CI/azure: disable test 433 on azure-ubuntu
- CI/azure: replace python-impacket with python3-impacket
- ci: stop building on freebsd-12-1
- cmake: fix import library name for non-MS compiler on Windows
- cmake: use CMAKE_INSTALL_INCLUDEDIR indirection
- cmake: support WinIDN
- config: fix building SMB with configure using Win32 Crypto
- config: fix detection of restricted Windows App environment
- configure: fail if --with-quiche is used and quiche isn't found
- configure: make AC_TRY_* into AC_*_IFELSE
- configure: make hyper opt-in, and fail if missing
- configure: only add OpenSSL paths if they are defined
- configure: provide Largefile feature for curl-config
- configure: remove use of deprecated macros
- configure: s/AC_HELP_STRING/AS_HELP_STRING
- cookies: Fix potential NULL pointer deref with PSL
- curl: set CURLOPT_NEW_FILE_PERMS if requested
- curl_easy_setopt.3: add curl_easy_option* functions to SEE ALSO
- curl_multibyte: always return a heap-allocated copy of string
- curl_multibyte: fall back to local code page stat/access on Windows
- Curl_timeleft: check both timeouts during connect
- curl_url_set.3: mention CURLU_PATH_AS_IS
- CURLOPT_QUOTE.3: clarify that libcurl doesn't parse what's sent
- docs/HTTP2: remove the outdated remark about multiplexing for the tool
- docs/Makefile.inc: format to be update-friendly
- docs: add CURLOPT_CURLU to 'See also' in curl_url_ functions
- docs: add missing Arg tag to --stderr
- docs: Add SSL backend names to CURL_SSL_BACKEND
- docs: clarify timeouts for queued transfers in multi API
- docs: Explain DOH transfers inherit some SSL settings
- docs: fix FILE example URL in --metalink documentation
- docs: make gen.pl support *italic* and **bold**
- doh: Fix sharing user's resolve list with DOH handles
- doh: Inherit CURLOPT_STDERR from user's easy handle
- dynbuf: bump the max HTTP request to 1MB
- examples: Remove threaded-shared-conn.c due to bug
- file: Support unicode URLs on Windows
- ftp: add 'list_only' to the transfer state struct
- ftp: add 'prefer_ascii' to the transfer state struct
- FTP: allow SIZE to fail when doing (resumed) upload
- ftp: avoid SIZE when asking for a TYPE A file
- ftp: fix Codacy/cppcheck warning about null pointer arithmetic
- ftp: fix memory leak in ftp_done
- ftp: never set data->set.ftp_append outside setopt
- gen.pl: quote "bare" minuses in the nroff curl.1
- github: add torture-ftp for FTP-only torture testing
- gnutls: assume nettle crypto support
- gskit: correct the gskit_send() prototype
- hostip: fix build with sync resolver
- hostip: fix crash in sync resolver builds that use DOH
- hsts: remove unused defines
- http2: don't set KEEP_SEND when there's no more data to be sent
- http2: fail if connection terminated without END_STREAM
- http: cap body data amount during send speed limiting
- http: do not add a referrer header with empty value
- http: make 416 not fail with resume + CURLOPT_FAILONERRROR
- http: remove superfluous NULL assign
- http: strip default port from URL sent to proxy
- http: use credentials from transfer, not connection
- ldap: use correct memory free function
- lib1536: check ptr against NULL before dereferencing it
- lib1537: check ptr against NULL before dereferencing it
- lib: remove 'conn->data' completely
- libssh2: kdb_callback: get the right struct pointer
- libssh2:ssh_connect: clear session pointer after free
- memdebug: close debug logfile explicitly on exit
- mingw: enable using strcasecmp()
- multi: close the connection when h2=>h1 downgrading
- multi: do once-per-transfer inits in before_perform in DID state
- multi: rename the multi transfer states
- multi: update pending list when removing handle
- ngtcp2: adapt to the new recv_datagram callback
- ngtcp2: clarify calculation precedence
- ngtcp2: Fix build error due to change in ngtcp2_addr_init
- ngtcp2: sync with recent API updates
- openldap: avoid NULL pointer dereferences
- openssl: adapt to v3's new const for a few API calls
- openssl: ensure to check SSL_CTX_set_alpn_protos return values
- openssl: remove get_ssl_version_txt in favor of SSL_get_version
- openssl: set the transfer pointer for logging early
- OS400: update for CURLOPT_AWS_SIGV4
- parse_proxy: fix a memory leak in the OOM path
- pathhelp.pm: fix use of pwd -L in Msys environment
- projects: Update VS projects for OpenSSL 1.1.x
- quiche: fix build error: use 'int' for port number
- quiche: fix crash when failing to connect
- retry-all-errors.d: Explain curl errors versus HTTP response errors
- retry.d: Clarify transient 5xx HTTP response codes
- runtests.pl: add %TESTNUMBER variable to make copying tests more convenient
- runtests.pl: add a -P option to specify an external proxy
- runtests.pl: kill processes locking test log files
- setopt: error on CURLOPT_HTTP09_ALLOWED set true with Hyper
- test1188: change error to check for: --fail HTTP status
- test220/314: adjust to run with Hyper
- test304: header CRLF cleanup to work with Hyper
- test306: make it not run with Hyper
- tests: disable .curlrc in more environments
- tests: use %TESTNUMBER instead of fixed number
- tftp: remove the 3600 second default timeout
- time: enable 64-bit time_t in supported mingw environments
- tool_help: add missing argument for --create-file-mode
- tool_help: Increase space between option and description
- tool_operate: bail if set CURLOPT_HTTP09_ALLOWED returns error
- travis: add a rustls build
- travis: bump wolfssl to 4.7.0
- travis: only build wolfssl when needed
- travis: split "torture" into a separate "events" build
- travis: switch ngtcp2 build over to quictls
- travis: use ubuntu nghttp2 package instead of build our own
- url.c: use consistent error message for failed resolve
- url: fix memory leak if OOM in the HSTS handling
- url: fix possible use-after-free in default protocol
- urldata: don't touch data->set.httpversion at runtime
- urldata: fix build without HTTP and MQTT
- urldata: make 'actions[]' use unsigned char instead of int
- urldata: merge "struct DynamicStatic" into "struct UrlState"
- urldata: remove the 'rtspversion' field
- urldata: remove the _ORIG suffix from string names
- version.d: Add missing features to the features list
- wolfssl: don't store a NULL sessionid

## Fixed in 7.75.0 - February 3 2021

7.75.0
7.75.0
7.75.0 changes only

Changes:

- curl: add --create-file-mode [mode]
- curl: add new variables to --write-out
- dns: extend CURLOPT_RESOLVE syntax for adding non-permanent entries
- gopher: implement secure gopher protocol
- http: add Hyper as new optional HTTP backend
- http: introduce AWS HTTP v4 Signature support

Bugfixes:

- badsymbols.pl: add verbose mode -v
- badsymbols.pl: ignore stand-alone single hash lines
- BUG-BOUNTY: minor language updates
- build: fix djgpp builds
- cleanup: fix empty expression statement has no effect
- cmake: Add an option to disable libidn2
- cmake: enable gophers correctly in curl-config
- cmake: expose CURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG
- cmdline-opts/gen.pl: return hard on errors
- cmdline-opts/retry.d: mention response code 429 as well
- configure: set -Wextra-semi-stmt for clang with --enable-debug
- connect: defer port selection until connect() time
- connect: mark intentional ignores of setsockopt return values
- connect: on linux, enable reporting of all ICMP errors on UDP sockets
- connect: zero variable on stack to silence valgrind complaint
- cookie: avoid the C1001 internal compiler error with MSVC 14
- curl.1: fix typo -> microsoft
- curl: fix handling of -q option
- curl: include the filename in --xattr/--remote-time error msgs
- curl: move fprintf outputs to warnf
- Curl_chunker: shrink the struct
- curl_easy_pause.3: add multiplexed pause effects
- CURLINFO_PRETRANSFER_TIME.3: clarify
- CURLOPT_URL.3: remove scheme specific details
- digest_sspi: Show InitializeSecurityContext errors in verbose mode
- docs/examples: adjust prototypes for CURLOPT_READFUNCTION
- docs/URL-SYNTAX: the URL syntax curl accepts and works with
- docs: enable syntax highlighting in several docs files
- docs: fix line length bug in gen.pl
- docs: fix typos in NEW-PROTOCOL.md
- docs: fix wrong documentation in help.d
- docs: remove redundant "better" in --fail help
- doh: allocate state struct on demand
- examples/libtest: add .checksrc to dist
- examples: remove superfluous asterisk uses
- failf: remove newline from formatting strings
- file: don't provide content-length for directories
- getinfo: build with disabled HTTP support
- gitattributes: Set batch files to CRLF line endings on checkout
- h2: do not wait for RECV on paused transfers
- HISTORY: added dates to early history
- http: empty reply connection are not left intact
- http: get CURLOPT_REQUEST_TARGET working with an HTTP proxy
- http: have CURLOPT_FAILONERROR fail after all headers
- http: make providing Proxy-Connection header not cause duplicated headers
- http: show the request as headers even when split-sending
- http_chunks: correct and clarify a comment on hexnumber length
- http_proxy: Fix CONNECT chunked encoding race condition
- httpauth: make multi-request auth work with custom port
- INSTALL: now at 85 operating systems
- INSTALL: update the list known OSes and CPU archs curl has run on
- lib/unit tests: add missing curl_global_cleanup() calls
- lib1564/5: verify that curl_multi_wakeup returns OK
- lib: pass in 'struct Curl_easy *' to most functions
- lib: remove Curl_ prefix from many static functions
- lib: save a bit of space with some structure packing
- libssh2: fix "Value stored to 'readdir_len' is never read"
- libssh2: move data from connection object to transfer object
- libssh: avoid plain free() of libssh-memory
- mime: make sure setting MIMEPOST to NULL resets properly
- misc: assorted typo fixes
- misc: fix "warning: empty expression statement has no effect"
- misc: fix typos
- mk-ca-bundle.pl: deterministic output when using -t
- mqtt: deal with 0 byte reads correctly
- mqtt: handle POST/PUBLISH without a set POSTFIELDSIZE
- multi: set the PRETRANSFER time-stamp when we switch to PERFORM
- multi: skip DONE state if there's no connection left for ftp wildcard
- multi: when erroring in TOOFAST state, act as for PERFORM
- multi_runsingle: bail out early on data->conn == NULL
- ngtcp2: Fix http3 upload stall
- ngtcp2: Fix stack buffer overflow
- ngtcp2: make it build it current master again
- nss: get the runtime version instead of build-time
- openssl: lowercase the hostname before using it for SNI
- OS400: update ccsidcurl.c
- pretransfer: setup the User-Agent header here
- quiche: remove fprintf() leftover
- Revert "CI/github: work-around for brew breakage on macOS"
- runtests: add 'wakeup' as a feature
- runtests: add support for %if [feature] conditions
- runtests: preprocess DISABLED to allow conditionals
- schannel: plug a memory-leak
- schannel_verify: fix safefree call typo
- select: convert Curl_select() to private static function
- socks: use the download buffer instead
- speedcheck: exclude paused transfers
- strerror: skip errnum >= 0 assertion on windows
- test1522: add debug tracing
- test1633: set appropriate name
- test179: use consistent header line endings
- test410: verify HTTPS GET with a 49K request header
- tests/mqttd: extract the client id from the correct offset
- tests: make --libcurl tests only test FTP options if ftp enabled
- tool_doswin: Restore original console settings on CTRL signal
- tool_operate: fix the suppression logic of some error messages
- tool_operate: spellfix a comment
- tooĺ_writeout: fix the -w time output units
- transfer: fix GCC 10 warning with flag '-Wint-in-bool-context'
- travis: build ngtcp2 --with-gnutls
- travis: limit the tests with quiche builds to HTTPS and FTPS only
- travis: restrict the openssl3 job to only run https and ftps tests
- url: if IDNA conversion fails, fallback to Transitional
- urldata: make magic be the first struct field
- urldata: remove 'local_ip' from the connectdata struct
- urldata: remove duplicate 'upkeep_interval_ms' from connectdata
- urldata: remove duplicate port number storage
- urldata: remove the duplicate 'ip_addr_str' field
- urldata: store ip version in a single byte
- vtls: remove md5sum
- warnless: remove curlx_ultosi
- wolfssl: add SECURE_RENEGOTIATION support
- wolfssl: Support wolfSSL builds missing TLS 1.1

## Fixed in 7.74.0 - December 9 2020

7.74.0
7.74.0
7.74.0 changes only

Changes:

- hsts: add experimental support for Strict-Transport-Security

Bugfixes:

- CVE-2020-8286: Inferior OCSP verification
- CVE-2020-8285: FTP wildcard stack overflow
- CVE-2020-8284: trusting FTP PASV responses
- acinclude: detect manually set minimum macos/ipod version
- alt-svc: enable (in the build) by default
- alt-svc: minimize variable scope and avoid "DEAD_STORE"
- asyn: use 'struct thread_data *' instead of 'void *'
- checksrc: warn on empty line before open brace
- CI/appveyor: disable test 571 in two cmake builds
- CI/azure: improve on flakiness by avoiding libtool wrappers
- CI/tests: enable test target on TravisCI for CMake builds
- CI/travis: add brotli and zstd to the libssh2 build
- cirrus: build with FreeBSD 12.2 in CirrusCI
- cmake: call the feature unixsockets without dash
- cmake: check for linux/tcp.h
- cmake: correctly handle linker flags for static libs
- cmake: don't pass -fvisibility=hidden to clang-cl on Windows
- cmake: don't use reserved target name 'test'
- cmake: make BUILD_TESTING dependent option
- cmake: make CURL_ZLIB a tri-state variable
- cmake: set the unicode feature in curl-config on Windows
- cmake: store IDN2 information in curl_config.h
- cmake: use libcurl.rc in all Windows builds
- configure: pass -pthread to Libs.private for pkg-config
- configure: use pkgconfig to find openSSL when cross-compiling
- connect: repair build without ipv6 availability
- curl.1: add an "OUTPUT" section at the top of the man page
- curl.se: new home
- curl: add compatibility for Amiga and GCC 6.5
- curl: only warn not fail, if not finding the home dir
- curl_easy_escape: limit output string length to 3 * max input
- Curl_pgrsStartNow: init speed limit time stamps at start
- curl_setup: USE_RESOLVE_ON_IPS is for Apple native resolver use
- curl_url_set.3: fix typo in the RETURN VALUE section
- CURLOPT_DNS_USE_GLOBAL_CACHE.3: fix typo
- CURLOPT_HSTS.3: document the file format
- CURLOPT_NOBODY.3: fix typo
- CURLOPT_TCP_NODELAY.3: fix comment in example code
- CURLOPT_URL.3: clarify SCP/SFTP URLs are for uploads as well
- docs: document the 8MB input string limit
- docs: fix typos and markup in ETag man page sections
- docs: Fix various typos in documentation
- examples/httpput: remove use of CURLOPT_PUT
- FAQ: refreshed
- file: avoid duplicated code sequence
- ftp: retry getpeername for FTP with TCP_FASTOPEN
- gnutls: fix memory leaks (certfields memory wasn't released)
- header.d: mention the "Transfer-Encoding: chunked" handling
- HISTORY: the new domain
- http3: fix two build errors, silence warnings
- http3: use the master branch of GnuTLS for testing
- http: pass correct header size to debug callback for chunked post
- http_proxy: use enum with state names for 'keepon'
- httpput-postfields.c: new example doing PUT with POSTFIELDS
- infof/failf calls: fix format specifiers
- libssh2: fix build with disabled proxy support
- libssh2: fix transport over HTTPS proxy
- libssh2: require version 1.0 or later
- Makefile.m32: add support for HTTP/3 via ngtcp2+nghttp3
- Makefile.m32: add support for UNICODE builds
- mqttd: fclose test file when done
- NEW-PROTOCOL: document what needs to be done to add one
- ngtcp2: adapt to recent nghttp3 updates
- ngtcp2: advertise h3 ALPN unconditionally
- ngtcp2: Fix build error due to symbol name change
- ngtcp2: use the minimal version of QUIC supported by ngtcp2
- ntlm: avoid malloc(0) on zero length user and domain
- openssl: acknowledge SRP disabling in configure properly
- openssl: free mem_buf in error path
- openssl: guard against OOM on context creation
- openssl: use OPENSSL_init_ssl() with >= 1.1.0
- os400: Sync libcurl API options
- packages/OS400: make the source code-style compliant
- quiche: close the connection
- quiche: remove 'static' from local buffer
- range.d: clarify that curl does not parse multipart responses
- range.d: fix typo
- Revert "multi: implement wait using winsock events"
- rtsp: error out on empty Session ID, unified the code
- rtsp: fixed Session ID comparison to refuse prefix
- rtsp: fixed the RTST Session ID mismatch in test 570
- runtests: return error if no tests ran
- runtests: revert the mistaken edit of $CURL
- runtests: show keywords when no tests ran
- scripts/completion.pl: parse all opts
- socks: check for DNS entries with the right port number
- src/tool_filetime: disable -Wformat on mingw for this file
- strerror: use 'const' as the string should never be modified
- test122[12]: remove these two tests
- test506: make it not run in c-ares builds
- tests/*server.py: close log file after each log line
- tests/server/tftpd.c: close upload file right after transfer
- tests/util.py: fix compatibility with Python 2
- tests: add missing global_init/cleanup calls
- tests: fix some http/2 tests for older versions of nghttpx
- tool_debug_cb: do not assume zero-terminated data
- tool_help: make "output" description less confusing
- tool_operate: --retry for HTTP 408 responses too
- tool_operate: bail out proper on errors during parallel transfers
- tool_operate: fix compiler warning when --libcurl is disabled
- tool_writeout: use off_t getinfo-types instead of doubles
- travis: use ninja-build for CMake builds
- travis: use valgrind when running tests for debug builds
- urlapi: don't accept blank port number field without scheme
- urlapi: URL encode a '+' in the query part
- urldata: remove 'void *protop' and create the union 'p'
- vquic/ngtcp2.h: define local_addr as sockaddr_storage

## Fixed in 7.73.0 - October 14 2020

7.73.0
7.73.0
7.73.0 changes only

Changes:

- curl: add --output-dir
- curl: support XDG_CONFIG_HOME to find .curlrc
- curl: update --help with categories
- curl_easy_option_*: new API for meta-data about easy options
- CURLE_PROXY: new error code
- mqtt: enable by default
- sftp: add new quote commands `atime` and `mtime`
- ssh: add the option CURLKHSTAT_FINE_REPLACE
- tls: add CURLOPT_SSL_EC_CURVES and --curves

Bugfixes:

- altsvc: clone setting in curl_easy_duphandle
- base64: also build for smtp, pop3 and imap
- BUGS: convert document to markdown
- build-wolfssl: fix build with Visual Studio 2019
- buildconf: invoke `autoreconf -fi` instead
- checksrc: detect // comments on column 0
- checksrc: verify do-while and spaces between the braces
- checksrc: warn on space after exclamation mark
- CI/azure: disable test 571 in the msys2 builds
- CI/azure: MQTT is now enabled by default
- CI/azure: no longer ignore results of test 1013
- CI/tests: fix invocation of tests for CMake builds
- CI/travis: add a CI job with openssl3 (from git master)
- cleanups: avoid curl_ on local variables
- CMake: add option to enable Unicode on Windows
- cmake: make HTTP_ONLY also disable MQTT
- CMake: remove explicit `CMAKE_ANSI_CFLAGS`
- cmake: remove scary warning
- cmdline-opts/gen.pl: generate nicer "See Also" in curl.1
- configure: do not say HTTPS-proxy is enabled when disabled
- configure: fix pkg-config detecting wolfssl
- configure: let --enable-debug set -Wenum-conversion with gcc >= 10
- conn: check for connection being dead before reuse
- connect.c: remove superfluous `else` in Curl_getconnectinfo
- curl.1: add see also no-progress-meter on two spots
- curl.1: fix typo invoked -> invoked
- curl: in retry output do not call all problems "transient"
- curl: make --libcurl show binary posts correctly
- curl: make checkpasswd use dynbuf
- curl: make file2memory use dynbuf
- curl: make file2string use dynbuf
- curl: make glob_match_url use dynbuf
- curl: make sure setopt CURLOPT_IPRESOLVE passes on a long
- curl: retry delays in parallel mode no longer sleeps blocking
- curl: use curlx_dynbuf for realloc when loading config files
- curl:parallel_transfers: make sure retry re-adds the transfer
- curl_get_line: build only if cookies or alt-svc are enabled
- curl_mime_headers.3: fix the example's use of curl_slist_append
- Curl_pgrsTime - return new time to avoid timeout integer overflow
- Curl_send: return error when pre_receive_plain cannot malloc
- dist: add missing CMake Find modules to the distribution
- docs/LICENSE-MIXING: remove
- docs/opts: fix typos in two manual pages
- docs/RESOURCES: remove
- docs/TheArtOfHttpScripting: convert to markdown
- docs: add description about CI platforms to CONTRIBUTE.md
- docs: correct non-existing macros in man pages
- doh: add error message for DOH_DNS_NAME_TOO_LONG
- dynbuf: make sure Curl_dyn_tail() null-terminates
- easy_reset: clear retry counter
- easygetopt: pass a valid enum to avoid compiler warning
- etag: save and use the full received contents
- ftp: a 550 response to SIZE returns CURLE_REMOTE_FILE_NOT_FOUND
- ftp: avoid risk of reading uninitialized integers
- ftp: get rid of the PPSENDF macro
- ftp: make a 552 response return CURLE_REMOTE_DISK_FULL
- ftp: separate FTPS from FTP over "HTTPS proxy"
- git: ignore libtests in 3XXX area
- github: use new issue template feature
- HISTORY: mention alt-svc added in 2019
- HTTP/3: update to OpenSSL_1_1_1g-quic-draft-29
- http: consolidate nghttp2_session_mem_recv() call paths
- http_proxy: do not count proxy headers in the header bytecount
- http_proxy: do not crash with HTTPS_PROXY and NO_PROXY set
- imap: make imap_send use dynbuf for the send buffer management
- imap: set cselect_bits to CURL_CSELECT_IN initially
- ldap: reduce the amount of #ifdefs needed
- lib/Makefile.am: bump VERSIONINFO due to new functions
- lib1560: verify "redirect" to double-slash leading URL
- lib583: fix enum mixup
- lib: fix -Wassign-enum warnings
- lib: make Curl_gethostname accept a const pointer
- libssh2: handle the SSH protocols done over HTTPS proxy
- libssh2: pass on the error from ssh_force_knownhost_key_type
- Makefile.m32: add ability to override zstd libs [ci skip]
- manpages: switch to https://example.com URLs
- MANUAL: update examples to resolve without redirects
- mbedtls: add missing header when defining MBEDTLS_DEBUG
- memdebug: remove 9 year old unused debug function
- multi: expand pre-check for socket readiness
- multi: handle connection state winsock events
- multi: implement wait using winsock events
- ngtcp2: adapt to new NGTCP2_PROTO_VER_MAX define
- ngtcp2: adapt to the new pkt_info arguments
- ntlm: fix condition for curl_ntlm_core usage
- openssl: avoid error conditions when importing native CA
- openssl: consider ALERT_CERTIFICATE_EXPIRED a failed verification
- openssl: Fix wincrypt symbols conflict with BoringSSL
- parsedate: tune the date to epoch conversion
- pause: only trigger a reread if the unpause sticks
- pingpong: use a dynbuf for the *_pp_sendf() function
- READMEs: convert several to markdown
- runtests: add %repeat[]% for test files
- runtests: allow creating files without newlines
- runtests: allow generating a binary sequence from hex
- runtests: clear pid variables when failing to start a server
- runtests: make cleardir() erase dot files too
- runtests: provide curl's version string as %VERSION for tests
- schannel: fix memory leak when using get_cert_location
- schannel: return CURLE_PEER_FAILED_VERIFICATION for untrusted root
- scripts: improve the "get latest curl release tag" logic
- sectransp: make it build with --disable-proxy
- select.h: make socket validation macros test for INVALID_SOCKET
- select: align poll emulation to return all relevant events
- select: fix poll-based check not detecting connect failure
- select: reduce duplication of Curl_poll in Curl_socket_check
- select: simplify return code handling for poll and select
- setopt: if the buffer exists, refuse the new BUFFERSIZE
- setopt: return CURLE_BAD_FUNCTION_ARGUMENT on bad argument
- socketpair: allow CURL_DISABLE_SOCKETPAIR
- sockfilt: handle FD_CLOSE winsock event on write socket
- src: spell whitespace without whitespace
- SSLCERTS: fix English syntax
- strerror: honor Unicode API choice on Windows
- symbian: drop support
- telnet.c: depend on static requirement of WinSock version 2
- test1541: remove since it is a known bug
- test163[12]: require http to be built-in to run
- test434: test -K use in a single line without newline
- test971: show test mismatches "inline"
- tests/data: Fix some mismatched XML tags in test cases
- tests/FILEFORMAT: document nonewline support for <file>
- tests/FILEFORMAT: document type=shell for <command>
- tests/server/util.c: fix support for Windows Unicode builds
- tests: remove pipelining tests
- tls: fix SRP detection by using the proper #ifdefs
- tls: provide the CApath verbose log on its own line
- tool_setopt: escape binary data to hex, not octal
- tool_writeout: add new writeout variable, %{num_headers}
- travis: add a build using libressl (from git master)
- url: use blank credentials when using proxy w/o username and password
- urlapi: use more Curl_safefree
- vtls: deduplicate client certificates in ssl_config_data
- win32: drop support for WinSock version 1, require version 2
- winbuild: convert the instruction text to README.md

## Fixed in 7.72.0 - August 19 2020

7.72.0
7.72.0
7.72.0 changes only

- content_encoding: add zstd decoding support
- CURL_PUSH_ERROROUT: allow the push callback to fail the parent stream
- CURLINFO_EFFECTIVE_METHOD: added

Bugfixes:

- CVE-2020-8231: libcurl: wrong connect-only connection
- appveyor: collect libcurl.dll variants with prefix or suffix
- asyn-ares: correct some bad comments
- bearssl: fix build with disabled proxy support
- buildconf: avoid array concatenation in die()
- buildconf: retire ares buildconf invocation
- checksrc: ban gmtime/localtime
- checksrc: invoke script with -D to find .checksrc proper
- CI/azure: install libssh2 for use with msys2-based builds
- CI/azure: unconditionally enable warnings-as-errors with autotools
- CI/macos: enable warnings as errors for CMake builds
- CI/macos: set minimum macOS version
- CI/macos: unconditionally enable warnings-as-errors with autotools
- CI: Add muse CI analyzer
- cirrus-ci: upgrade 11-STABLE to 11.4
- CMake: do not complain about missing nroff
- CMake: fix test for warning suppressions
- cmake: fix windows xp build
- configure.ac: Sort features name in summary
- configure: allow disabling warnings
- configure: cleanup wolfssl + pkg-config conflicts when cross compiling.
- configure: show zstd "no" in summary when built without it
- connect: remove redundant message about connect failure
- curl-config: ignore REQUIRE_LIB_DEPS in --libs output
- curl.1: add a few missing valid exit codes
- curl: add %{method} to the -w variables
- curl: improve the existing file check with -J
- curl_multi_setopt: fix compiler warning "result is always false"
- curl_version_info.3: CURL_VERSION_KERBEROS4 is deprecated
- CURLINFO_CERTINFO.3: fix typo
- CURLOPT_NOBODY.3: clarify what setting to 0 means
- docs: add date of 7.20 to CURLM_CALL_MULTI_PERFORM mentions
- docs: Add video link to docs/CONTRIBUTE.md
- docs: change "website" to "website"
- docs: clarify MAX_SEND/RECV_SPEED functionality
- docs: Update a few leftover mentions of DarwinSSL
- doh: remove redundant cast
- file2memory: use a define instead of -1 unsigned value
- ftp: do not do ssl_shutdown instead of ssl_close
- ftpserver: do not verify SMTP MAIL FROM names
- getinfo: reset retry-after value in initinfo
- gnutls: repair the build with `CURL_DISABLE_PROXY`
- gtls: survive not being able to get name/issuer
- h2: repair trailer handling
- http2: close the http2 connection when no more requests may be sent
- http2: fix nghttp2_strerror -> nghttp2_http2_strerror in debug messages
- libssh2: s/ssherr/sftperr/
- libtest/Makefile.am: add -no-undefined for libstubgss for Cygwin
- md(4|5): do not use deprecated macOS functions
- mprintf: Fix dollar string handling
- mprintf: Fix stack overflows
- multi: Condition `extrawait` is always true
- multi: Remove 10-year old out-commented code
- multi: remove two checks always true
- multi: update comment to say easyp list is linear
- multi_remove_handle: close unused connect-only connections
- ngtcp2: adapt to error code rename
- ngtcp2: adjust to recent sockaddr updates
- ngtcp2: update to modified qlog callback prototype
- nss: fix build with disabled proxy support
- ntlm: free target_info before (re-)malloc
- openssl: fix build with LibreSSL < 2.9.1
- page-header: provide protocol details in the curl.1 man page
- quiche: handle calling disconnect twice
- runtests.pl: treat LibreSSL and BoringSSL as OpenSSL
- runtests: move the gnutls-serv tests to a dynamic port
- runtests: move the smbserver to use a dynamic port number
- runtests: move the TELNET server to a dynamic port
- runtests: run the DICT server on a random port number
- runtests: run the http2 tests on a random port number
- runtests: support dynamically base64 encoded sections in tests
- setopt: unset NOBODY switches to GET if still HEAD
- smtp_parse_address: handle blank input string properly
- socks: use size_t for size variable
- strdup: remove the odd strlen check
- test1119: verify stdout in the test
- test1139: make it display the difference on test failures
- test1140: compare stdout
- test1908: treat file as text
- tests/FILEFORMAT.md: mention %HTTP2PORT
- tests/sshserver.pl: fix compatibility with OpenSSH for Windows
- TLS naming: fix more Winssl and Darwinssl leftovers
- tls-max.d: this option is only for TLS-using connections
- tlsv1.3.d. only for TLS-using connections
- tool_doswin: Simplify Windows version detection
- tool_getparam: make --krb option work again
- TrackMemory tests: ignore realloc and free in getenv.c
- transfer: fix data_pending for builds with both h2 and h3 enabled
- transfer: fix memory-leak with CURLOPT_CURLU in a duped handle
- transfer: move retrycount from connect struct to easy handle
- travis/script.sh: fix use of `-n` with unquoted envvar
- travis: add ppc64le and s390x builds
- travis: update quiche builds for new boringssl layout
- url: fix CURLU and location following
- url: silence MSVC warning
- util: silence conversion warnings
- win32: Add Curl_verify_windows_version() to curlx
- WIN32: stop forcing narrow-character API
- windows: add unicode to feature list
- windows: disable Unix Sockets for old mingw

## Fixed in 7.71.1 - July 1 2020

7.71.1
7.71.1
7.71.1 changes only

Bugfixes:

- cirrus-ci: disable FreeBSD 13 (again)
- Curl_inet_ntop: always check the return code
- CURLOPT_READFUNCTION.3: provide the upload data size up front
- DYNBUF.md: fix a typo: trail => tail
- escape: make the URL decode able to reject only %00-bytes
- escape: zero length input should return a zero length output
- examples/multithread.c: call curl_global_cleanup()
- http2: set the correct URL in pushed transfers
- http: fix proxy auth with blank password
- mbedtls: fix build with disabled proxy support
- ngtcp2: sync with current master
- openssl: Fix compilation on Windows when ngtcp2 is enabled
- Revert "multi: implement wait using winsock events"
- sendf: improve the message on client write errors
- terminology: call them null-terminated strings
- tool_cb_hdr: Fix etag warning output and return code
- url: allow user + password to contain "control codes" for HTTP(S)
- vtls: compare cert blob when finding a connection to reuse

## Fixed in 7.71.0 - June 24 2020

7.71.0
7.71.0
7.71.0 changes only

Changes:

- CURLOPT_SSL_OPTIONS: optional use of Windows' CA store (with openssl)
- setopt: add CURLOPT_PROXY_ISSUERCERT(_BLOB) for coherency
- setopt: support certificate options in memory with struct curl_blob
- tool: Add option --retry-all-errors to retry on any error

Bugfixes:

- *_sspi: fix bad uses of CURLE_NOT_BUILT_IN
- all: fix codespell errors
- altsvc: bump to h3-29
- altsvc: fix `dsthost` may be used uninitialized in this function
- altsvc: fix parser for lines ending with CRLF
- altsvc: remove the num field from the altsvc struct
- appveyor: add non-debug plain autotools-based build
- appveyor: disable flaky test 1501 and ignore broken 1056
- appveyor: disable test 1139 instead of ignoring it
- asyn-*: remove support for never-used NULL entry pointers
- azure: use matrix strategy to avoid configuration redundancy
- build: disable more code/data when built without proxy support
- buildconf: remove -print from the find command that removes files
- checksrc: enhance the ASTERISKSPACE and update code accordingly
- CI/macos: fix `is already installed` errors by using bundle
- cirrus: disable SFTP and SCP tests
- CMake: add ENABLE_ALT_SVC option
- CMake: add HTTP/3 support (ngtcp2+nghttp3, quiche)
- CMake: add libssh build support
- CMake: do not build test programs by default
- CMake: fix runtests.pl with CMake, add new test targets
- CMake: ignore INTERFACE_LIBRARY targets for pkg-config file
- CMake: rebuild Makefile.inc.cmake when Makefile.inc changes
- CODE_REVIEW.md: how to do code reviews in curl
- configure: fix pthread check with static boringssl
- configure: for wolfSSL, check for the DES func needed for NTLM
- configure: only strip first -L from LDFLAGS
- configure: repair the check if argv can be written to
- configure: the wolfssh backend does not provide SCP
- connect: improve happy eyeballs handling
- connect: make happy eyeballs work for QUIC (again)
- curl.1: Quote globbed URLs
- curl: remove -J "informational" written on stdout
- Curl_addrinfo: use one malloc instead of three
- CURLINFO_ACTIVESOCKET.3: clarify the description
- doc: add missing closing parenthesis in CURLINFO_SSL_VERIFYRESULT.3
- doc: Rename VERSIONS to VERSIONS.md as it already has Markdown syntax
- docs/HTTP3: add qlog to the quiche build instruction
- docs/options-in-versions: which version added each cmdline option
- docs: unify protocol lists
- dynbuf: introduce internal generic dynamic buffer functions
- easy: fix dangling pointer on easy_perform fail
- examples/ephiperfifo: turn off interval when setting timerfd
- examples/http2-down/upload: add error checks
- examples: remove asiohiper.cpp
- FILEFORMAT: add more features that tests can depend on
- FILEFORMAT: describe verify/stderr
- ftp: make domore_getsock() return the secondary socket properly
- ftp: mark return-ignoring calls to Curl_GetFTPResponse with (void)
- ftp: shut down the secondary connection properly when SSL is used
- GnuTLS: Backend support for CURLINFO_SSL_VERIFYRESULT
- hostip: make Curl_printable_address not return anything
- hostip: on macOS avoid DoH when given a numerical IP address
- http2: keep trying to send pending frames after req.upload_done
- http2: simplify and clean up trailer handling
- HTTP3.md: clarify cargo build directory
- http: move header storage to Curl_easy from connectdata
- libcurl.pc: Merge Libs.private into Libs for static-only builds
- libssh2: improved error output for wrong quote syntax
- libssh2: keep sftp errors as `unsigned long`
- libssh2: set the expected total size in SCP upload init
- libtest/cmake: Remove commented code
- list-only.d: this option existed already in 4.0
- manpages: add three missing environment variables
- multi: add defensive check on data->multi->num_alive
- multi: implement wait using winsock events
- ngtcp2: cleanup memory when failing to connect
- ngtcp2: fix build with current ngtcp2 master implementing draft 28
- ngtcp2: fix happy eyeballs quic connect crash
- ngtcp2: introduce qlog support
- ngtcp2: never call fprintf() in lib code in release version
- ngtcp2: update with recent API changes
- ntlm: enable NTLM support with wolfSSL
- OpenSSL: have CURLOPT_CRLFILE imply CURLSSLOPT_NO_PARTIALCHAIN
- openssl: set FLAG_TRUSTED_FIRST unconditionally
- projects: Add crypt32.lib to dependencies for all OpenSSL configs
- quiche: clean up memory properly when failing to connect
- quiche: enable qlog output
- quiche: update SSLKEYLOGFILE support
- Revert "buildconf: use find -execdir"
- Revert "ssh: ignore timeouts during disconnect"
- runtests: remove sleep calls
- runtests: show elapsed test time with higher precision (ms)
- select: always use Sleep in Curl_wait_ms on Win32
- select: fix overflow protection in Curl_socket_check
- sendf: make failf() use the mvsnprintf() return code
- server/sws: fix asan warning on use of uninitialized variable
- server/util: fix logmsg format using curl_off_t argument
- sha256: fixed potentially uninitialized variable
- share: don not set the share flag it something fails
- sockfilt: make select_ws stop waiting on exit signal event
- socks: detect connection close during handshake
- socks: fix expected length of SOCKS5 reply
- socks: remove unreachable breaks in socks.c and mime.c
- source cleanup: remove all custom typedef structs
- test1167: fixes in badsymbols.pl
- test1177: look for curl.h in source directory
- test1238: avoid tftpd being busy for tests shortly following
- test613.pl: make tests 613 and 614 work with OpenSSH for Windows
- test75: Remove precheck test
- tests: add https-proxy support to the test suite
- tests: add support for SSH server variant specific transfer paths
- tests: add two simple tests for --login-options
- tests: make test 1248 + 1249 use %NOLISTENPORT
- tests: pick a random port number for SSH
- tests: run stunnel for HTTPS and FTPS on dynamic ports
- timeouts: change millisecond timeouts to timediff_t from time_t
- timeouts: move ms timeouts to timediff_t from int and long
- tool: fixup a few --help descriptions
- tool: support UTF-16 command line on Windows
- tool_cfgable: free login_options at exit
- tool_getparam: -i is not OK if -J is used
- tool_getparam: fix memory leak in parse_args
- tool_operate: fixed potentially uninitialized variables
- tool_paramhlp: fixed potentially uninitialized strtol() variable
- transfer: close connection after excess data has been read
- travis: add "qlog" as feature in the quiche build
- travis: Add ngtcp2 and quiche tests for CMake
- travis: upgrade to bionic, clang-9, improve readability
- typecheck-gcc.h: CURLINFO_PRIVATE does not need a `char *`
- unit1604.c: fix implicit conv from `SANITIZEcode` to `CURLcode`
- url: accept "any length" credentials for proxy auth
- url: alloc the download buffer at transfer start
- url: make the updated credentials URL-encoded in the URL
- url: reject too long input when parsing credentials
- url: sort the protocol schemes in rough popularity order
- urlapi: accept :: as a valid IPv6 address
- urldata: leave the HTTP method untouched in the set.* struct
- urlglob: treat literal IPv6 addresses with zone IDs as a hostname
- user-agent.d: spell out what happens given a blank argument
- vauth/cleartext: fix theoretical integer overflow
- version.d: expanded and alpha-sorted
- vtls: Extract and simplify key log file handling from OpenSSL
- wolfssl: add SSLKEYLOGFILE support
- wording: avoid blacklist/whitelist stereotypes
- write-out.d: added "response_code"

## Fixed in 7.70.0 - April 29 2020

7.70.0
7.70.0
7.70.0 changes only

Changes:

- curl: add --ssl-revoke-best-effort to allow a "best effort" revocation check
- mqtt: add new experimental protocol
- schannel: add "best effort" revocation check option: CURLSSLOPT_REVOKE_BEST_EFFORT
- writeout: support to generate JSON output with `%{json}`

Bugfixes:

- appveyor: add Unicode winbuild jobs
- appveyor: completely disable tests that fail to timeout early
- appveyor: show failed tests in log even if test is ignored
- appveyor: sort builds by type and add two new variants
- appveyor: turn disabled tests into ignored result tests
- appveyor: use random test server ports based upon APPVEYOR_API_URL
- build: fixed build for systems with select() in unistd.h
- buildconf: avoid using tempfile when removing files
- checksrc: warn on obvious conditional blocks on the same line as if()
- CI-fuzz: increase fuzz time to 40 minutes
- ci/tests: fix Azure Pipelines not running Windows containers
- CI: add build with ngtcp2 + gnutls on Travis CI
- CI: bring GitHub Actions fuzzing job in line with macOS jobs
- CI: migrate macOS jobs from Azure and Travis CI to GitHub Actions
- CI: remove default Ubuntu build from GitHub Actions
- cirrus: no longer ignore test 504 which is working again
- cirrus: re-enable the FreeBSD 13 CI builds
- cleanup: insert newline after if() conditions
- cmake: add aliases so exported target names are available in tree
- cmake: add CMAKE_MSVC_RUNTIME_LIBRARY
- cmake: add support for building with wolfSSL
- cmake: Avoid MSVC C4273 warnings in send/recv checks
- cmdline: fix handling of OperationConfig linked list (--next)
- compressed.d: stress that the headers are not modified
- config: remove all defines of HAVE_DES_H
- configure: convert -I to -isystem as a last step
- configure: document `compiler_num` for gcc
- configure: do not check for Security.framework when cross-compiling
- configure: fix -pedantic-errors for GCC 5 and later
- configure: remove use of -vec-report0 from CFLAGS with icc
- connect: happy eyeballs cleanup
- connect: store connection info for QUIC connections
- copyright: fix out-of-date copyright ranges and missing headers
- curl-functions.m4: remove inappropriate AC_REQUIRE
- curl.h: remnove CURL_VERSION_ESNI. Never supported nor documented
- curl.h: update comment typo
- curl: allow both --etag-compare and --etag-save with same filename
- curl_setup: define _WIN32_WINNT_[OS] symbols
- CURLINFO_CONDITION_UNMET: return true for 304 http status code
- CURLINFO_NUM_CONNECTS: improve accuracy
- CURLOPT_WRITEFUNCTION.3: add inline example and new see-also
- dist: add mail-rcpt-allowfails.d to the tarball
- docs/make: generate curl.1 from listed files only
- docs: add warnings about FILE: URLs on Windows
- easy: fix curl_easy_duphandle for builds missing IPv6 that use c-ares
- examples/sessioninfo.c: add include to fix compiler warning
- github actions: run when pushed to master or */ci + PRs
- gnutls: bump lowest supported version to 3.1.10
- gnutls: do not skip really long certificate fields
- gnutls: ensure TLS 1.3 when SRP is not requested
- gopher: check remaining time left during write busy loop
- gskit: use our internal select wrapper for portability
- http2: Fix erroneous debug message that h2 connection closed
- http: do not consider upload done if the request is not completely sent off
- http: free memory when Alt-Used header creation fails due to OOM
- lib/mk-ca-bundle: skip empty certs
- lib670: use the same Win32 API check as all other lib tests
- lib: fix typos in comments and errormessages
- lib: never define CURL_CA_BUNDLE with a getenv
- libcurl-multi.3: added missing full stop
- libssh: avoid options override by configuration files
- libssh: Use new ECDSA key types to check known hosts
- mailmap: fixup a few author names/fields
- Makefile.m32: Improve windres parameter compatibility
- Makefile: run the cd commands in a subshell
- memdebug: do not log free(NULL)
- mime: properly check Content-Type even if it has parameters
- multi-ssl: reset the SSL backend on `Curl_global_cleanup()`
- multi: improve parameter check for curl_multi_remove_handle
- nghttp2: 1.12.0 required
- ngtcp2: update to git master for the key installation API change
- nss: check for PK11_CreateDigestContext() returning NULL
- openssl: adapt to functions marked as deprecated since version 3
- OS400: update strings for ccsid-ifier (fixes the build)
- output.d: quote the URL when globbing
- packages: add OS400/chkstrings.c to the dist
- RELEASE-PROCEDURE.md: run the copyright.pl script!
- Revert "file: on Windows, refuse paths that start with \\"
- runtests: always put test number in servercmd file
- runtests: provide nicer errormsg when protocol "dump" file is empty
- schannel: Fix blocking timeout logic
- schannel: support .P12 or .PFX client certificates
- scripts/release-notes.pl: add helper script for RELEASE-NOTES maintenance
- select: make Curl_socket_check take timediff_t timeout
- select: move duplicate select preparation code into Curl_select
- select: remove typecast from SOCKET_WRITABLE/READABLE macros
- server/getpart: make the "XML-parser" stricter
- server/resolve: remove AI_CANONNAME to make macos tell the truth
- smtp: set auth correctly
- sockfilt: add logmsg output to select_ws_wait_thread on Windows
- sockfilt: fix broken pipe on Windows to be ready in select_ws
- sockfilt: fix handling of ready closed sockets on Windows
- sockfilt: fix race-condition of waiting threads and event handling
- socks: Fix blocking timeout logic
- src: Remove C99 constructs to ensure C89 compliance
- SSLCERTS.md: Fix example code for setting CA cert file
- test1148: tolerate progress updates better (again)
- test1154: set a proper name
- test1177: verify that all the CURL_VERSION_ bits are documented
- test1566: verify --etag-compare that gets a 304 back
- test1908: avoid using fixed port number in test data
- test2043: use revoked.badssl.com instead of revoked.grc.com
- test2100: fix static port instead of dynamic value being used
- tests/data: fix some XML formatting issues in test cases
- tests/FILEFORMAT: converted to markdown and extended
- tests/server/util.c: use curl_off_t instead of long for pid
- tests: add %NOLISTENPORT and use it
- tests: add Windows compatible pidwait like pidkill and pidterm
- tests: fix conflict between Cygwin/msys and Windows PIDs
- tests: introduce preprocessed test cases
- tests: make Python-based servers compatible with Python 2 and 3
- tests: make runtests check that disabled tests exists
- tests: move pingpong server to dynamic listening port
- tests: remove python_dependencies for smbserver from our tree
- tests: run the RTSP test server on a dynamic port number
- tests: run the SOCKS test server on a dynamic port number
- tests: run the sws server on "any port"
- tests: run the TFTP test server on a dynamic port number
- tests: use Cygwin/msys PIDs for stunnel and sshd on Windows
- tls: remove the BACKEND define kludge from most backends
- tool: do not declare functions with Curl_ prefix
- tool_operate: fix add_parallel_transfers when more are in queue
- transfer: cap retries of "dead connections" to 5
- transfer: Switch PUT to GET/HEAD on 303 redirect
- travis: bump the wolfssl CI build to use 4.4.0
- travis: update the ngtcp2 build to use the latest OpenSSL patch
- url: allow non-HTTPS altsvc-matching for debug builds
- version: add `cainfo` and `capath` to version info struct
- version: increase buffer space for ssl version output
- version: skip idn2_check_version() check and add precaution
- vquic: add support for GnuTLS backend of ngtcp2
- vtls: fix ssl_config memory-leak on out-of-memory
- warnless: remove code block for icc that did not work
- windows: enable UnixSockets with all build toolchains
- windows: suppress UI in all CryptAcquireContext() calls

## Fixed in 7.69.1 - March 11 2020

7.69.1
7.69.1
7.69.1 changes only

Bugfixes:

- ares: store dns parameters for duphandle
- cirrus-ci: disable the FreeBSD 13 builds
- curl_share_setopt.3: Note sharing cookies does not enable the engine
- lib1564: reduce number of mid-wait wakeup calls
- libssh: Fix matching user-specified MD5 hex key
- MANUAL: update a dict-using command line
- mime: do not perform more than one read in a row
- mime: fix the binary encoder to handle large data properly
- mime: latch last read callback status
- multi: skip EINTR check on wakeup socket if it was closed
- pause: bail out on bad input
- pause: force a connection recheck after unpausing (take 2)
- pause: return early for calls that do not change pause state
- runtests.1: rephrase how to specify what tests to run
- runtests: fix missing use of exe_ext helper function
- seek: fix fall back for missing ftruncate on Windows
- sftp: fix segfault regression introduced by #4747 in 7.69.0
- sha256: Added SecureTransport implementation
- sha256: Added WinCrypt implementation
- socks4: fix host resolve regression
- socks5: hostname resolv regression fix
- tests/server: fix missing use of exe_ext helper function
- tests: fix static ip:port instead of dynamic values being used
- tests: make sleeping portable by avoiding select
- unit1612: fix the inclusion and compilation of the HMAC unit test
- urldata: remove the `stream_was_rewound` connectdata struct member
- version: make curl_version* thread-safe without using global context

## Fixed in 7.69.0 - March 4 2020

7.69.0
7.69.0
7.69.0 changes only

Changes:

- polarssl: removed
- smtp: add CURLOPT_MAIL_RCPT_ALLLOWFAILS and --mail-rcpt-allowfails
- wolfSSH: new SSH backend

Bugfixes:

- altsvc: improved header parser
- altsvc: keep a copy of the filename to survive handle reset
- altsvc: make saving the cache an atomic operation
- altsvc: use h3-27
- azure: disable brotli on the macos debug-builds
- build: remove all HAVE_OPENSSL_ENGINE_H defines
- checksrc.bat: Fix not being able to run script from the main curl dir
- cleanup: fix several comment typos
- cleanup: fix typos and wording in docs and comments
- cmake: add support for CMAKE_LTO option
- cmake: clean up and improve build procedures
- cmake: enable SMB for Windows builds
- cmake: improve libssh2 check on Windows
- cmake: Show HTTPS-proxy in the features output
- cmake: support specifying the target Windows version
- cmake: use check_symbol_exists also for inet_pton
- configure.ac: fix comments about --with-quiche
- configure: disable metalink if mbedTLS is specified
- configure: disable metalink support for incompatible SSL/TLS
- conn: do not reuse connection if SOCKS proxy credentials differ
- conncache: removed unused Curl_conncache_bundle_size()
- connect: remove some spurious infof() calls
- connection reuse: respect the max_concurrent_streams limits
- contributors: also include people who contributed to curl-www
- contrithanks: use the most recent tag by default
- cookie: check __Secure- and __Host- case sensitively
- cookies: make saving atomic with a rename
- create-dirs.d: mention the mode
- curl: avoid using strlen for testing if a string is empty
- curl: error on --alt-svc use w/o support
- curl: let -D merge headers in one file again
- curl: make #0 not output the full URL
- curl: make the -# spaceship bar not wrap the line
- curl: remove `config` field from OutStruct
- curl:progressbarinit: ignore column width from terminals < 20
- curl_escape.3: add a link to curl_free
- curl_getenv.3: fix the memory handling description
- curl_global_init: assume the EINTR bit by default
- curl_global_init: move the IPv6 works status bool to multi handle
- CURLINFO_COOKIELIST.3: Fix example
- CURLOPT_ALTSVC_CTRL.3: fix the DEFAULT wording
- CURLOPT_PROXY_SSL_OPTIONS.3: Sync with CURLOPT_SSL_OPTIONS.3
- CURLOPT_REDIR_PROTOCOLS.3: update the DEFAULT section
- data.d: remove "Multiple files can also be specified"
- digest: do not quote algorithm in HTTP authorization
- docs/HTTP3: add --enable-alt-svc to curl's configure
- docs/HTTP3: update the OpenSSL branch to use for ngtcp2
- docs: fix typo on CURLINFO_RETRY_AFTER
- easy: remove dead code
- form.d: fix two minor typos
- ftp: convert `sock_accepted` to a plain boolean
- ftp: remove superfluous checking for crlf in user or pwd
- ftp: shrink temp buffers used for PORT
- github action: add CIFuzz
- github: Instructions to post "uname -a" on Unix systems in issues
- GnuTLS: always send client cert
- gtls: fixed compilation when using GnuTLS < 3.5.0
- hostip: move code to resolve IP address literals to `Curl_resolv`
- HTTP-COOKIES: describe the cookie file format
- HTTP-COOKIES: mention that a trailing newline is required
- http2: make pausing/unpausing set/clear local stream window
- http2: now requires nghttp2 >= 1.12.0
- http: added 417 response treatment
- http: increase EXPECT_100_THRESHOLD to 1Mb
- http: mark POSTs with no body as "upload done" from the start
- http: move "oauth_bearer" from connectdata to Curl_easy
- include: remove non-curl prefixed defines
- KNOWN_BUGS: Multiple methods in a single WWW-Authenticate: header
- libssh2: add support for forcing a hostkey type
- libssh2: fix variable type
- libssh: improve known hosts handling
- llist: removed unused Curl_llist_move()
- location.d: the method change is from POST to GET only
- md4: fixed compilation issues when using GNU TLS gcrypt
- md4: use init/update/final functions in Secure Transport
- md5: added implementation for mbedTLS
- mk-ca-bundle: add support for CKA_NSS_SERVER_DISTRUST_AFTER
- multi: change curl_multi_wait/poll to error on negative timeout
- multi: fix outdated comment
- multi: if Curl_readwrite sets `comeback` use expire, not loop
- multi_done: if multiplexed, make conn->data point to another transfer
- multi_wait: stop loop when sread() returns zero
- ngtcp2: add error code for QUIC connection errors
- ngtcp2: fixed to only use AF_INET6 when ENABLE_IPV6
- ngtcp2: update to git master and its draft-25 support
- ntlm: move the winbind data into the NTLM data structure
- ntlm: pass the Curl_easy structure to the private winbind functions
- ntlm: removed the dependency on the TLS libraries when using MD5
- ntlm_wb: use Curl_socketpair() for greater portability
- oauth2-bearer.d: works for HTTP too
- openssl: make CURLINFO_CERTINFO not truncate x509v3 fields
- openssl: remove redundant assignment
- os400: fixed the build
- pause: force-drain the transfer on unpause
- quiche: update to draft-25
- README: mention that the docs is in docs/
- RELEASE-PROCEDURE: feature win is closed post-release a few days
- runtests: make random seed fixed for a month
- runtests: restore the command log
- schannel: make CURLOPT_CAINFO work better on Windows 7
- schannel_verify: Fix alt names manual verify for UNICODE builds
- sha256: use crypto implementations when available
- singleuse.pl: support new API functions, fix curl_dbg_ handling
- smtp: support the SMTPUTF8 extension
- smtp: support UTF-8 based hostnames in MAIL FROM
- SOCKS: make the connect phase non-blocking
- strcase: turn Curl_raw_tolower into static
- strerror: increase STRERROR_LEN 128 -> 256
- test1323: added missing `unit test` feature requirement
- tests: add a unit test for MD4 digest generation
- tests: add a unit test for SHA256 digest generation
- tests: add a unit test for the HMAC hash generation
- tests: deduce the tool name from the test case for unit tests
- tests: fix Python 3 compatibility of smbserver.py
- tool_dirhie: allow directory traversal during creation
- tool_homedir: change GetEnv() to use libcurl's curl_getenv()
- tool_util: improve Windows version of tvnow()
- travis: update non-OpenSSL Linux jobs to Bionic
- url: include the failure reason when curl_win32_idn_to_ascii() fails
- urlapi: guess scheme properly with credentials given
- urldata: do string enums without #ifdefs for build scripts
- vtls: refactor Curl_multissl_version to make the code clearer
- win32: USE_WIN32_CRYPTO to enable Win32 based MD4, MD5 and SHA256

## Fixed in 7.68.0 - January 8 2020

7.68.0
7.68.0 changes only

Changes:

- TLS: add BearSSL vtls implementation
- XFERINFOFUNCTION: support CURL_PROGRESSFUNC_CONTINUE
- curl: add --etag-compare and --etag-save
- curl: add --parallel-immediate
- multi: add curl_multi_wakeup()
- openssl: CURLSSLOPT_NO_PARTIALCHAIN can disable partial cert chains

Bugfixes:

- CVE-2019-15601: file: on Windows, refuse paths that start with \\
- Azure Pipelines: add several builds
- CMake: add support for building with the NSS vtls backend
- CURL-DISABLE: initial docs for the CURL_DISABLE_* defines
- CURLOPT_HEADERFUNCTION.3: Document that size is always 1
- CURLOPT_QUOTE.3: fix typos
- CURLOPT_READFUNCTION.3: fix the example
- CURLOPT_URL.3: "curl supports SMB version 1 (only)"
- CURLOPT_VERBOSE.3: see also ERRORBUFFER
- HISTORY: added cmake, HTTP/3 and parallel downloads with curl
- HISTORY: the SMB(S) support landed in 2014
- INSTALL.md: provide Android build instructions
- KNOWN_BUGS: Connection information when using TCP Fast Open
- KNOWN_BUGS: LDAP on Windows does not work correctly
- KNOWN_BUGS: TLS session cache does not work with TFO
- OPENSOCKETFUNCTION.3: correct the purpose description
- TrackMemory tests: always remove CR before LF
- altsvc: bump to h3-24
- altsvc: make the save function ignore NULL filenames
- build: Disable Visual Studio warning "conditional expression is constant"
- build: fix for CURL_DISABLE_DOH
- checksrc.bat: Add a check for vquic and vssh directories
- checksrc: repair the copyrightyear check
- cirrus-ci: enable clang sanitizers on freebsd 13
- cirrus: Drop the FreeBSD 10.4 build
- config-win32: cpu-machine-OS for Windows on ARM
- configure: avoid unportable `==` test(1) operator
- configure: enable IPv6 support without `getaddrinfo`
- configure: fix typo in help text
- conncache: CONNECT_ONLY connections assumed always in-use
- conncache: fix multi-thread use of shared connection cache
- copyrights: fix copyright year range
- create_conn: prefer multiplexing to using new connections
- curl -w: handle a blank input file correctly
- curl.h: add two missing defines for "pre ISO C" compilers
- curl/parseconfig: fix mem-leak
- curl/parseconfig: use curl_free() to free memory allocated by libcurl
- curl: cleanup multi handle on failure
- curl: fix --upload-file . hangs if delay in STDIN
- curl: fix -T globbing
- curl: improved cleanup in upload error path
- curl: make a few char pointers point to const char instead
- curl: properly free mimepost data
- curl: show better error message when no homedir is found
- curl: show error for --http3 if libcurl lacks support
- curl_setup_once: consistently use WHILE_FALSE in macros
- define: remove HAVE_ENGINE_LOAD_BUILTIN_ENGINES, not used anymore
- docs: Change typo to `experimental`
- docs: TLS SRP does not work with TLS 1.3
- docs: fix several typos
- docs: mention CURL_MAX_INPUT_LENGTH restrictions
- doh: improved both encoding and decoding
- doh: make it behave when built without proxy support
- examples/postinmemory.c: Call curl_global_cleanup always
- examples/url2file.c: corrected erroneous comment
- examples: add multi-poll.c
- global_init: undo the "initialized" bump in case of failure
- hostip: suppress compiler warning
- http_ntlm: Remove duplicate NSS initialization
- lib: Move lib/ssh.h -> lib/vssh/ssh.h
- lib: fix compiler warnings with `CURL_DISABLE_VERBOSE_STRINGS`
- lib: fix warnings found when porting to NuttX
- lib: remove ASSIGNWITHINCONDITION exceptions, use our code style
- lib: remove erroneous +x file permission on some c files
- libssh2: add support for ECDSA and ed25519 knownhost keys
- multi.h: remove INITIAL_MAX_CONCURRENT_STREAMS from public header
- multi: free sockhash on OOM
- multi_poll: avoid busy-loop when called without easy handles attached
- ngtcp2: Support the latest update key callback type
- ngtcp2: fix thread-safety bug in error-handling
- ngtcp2: free used resources on disconnect
- ngtcp2: handle key updates as ngtcp2 master branch tells us
- ngtcp2: increase QUIC window size when data is consumed
- ngtcp2: use overflow buffer for extra HTTP/3 data
- ntlm: USE_WIN32_CRYPTO check removed to get USE_NTLM2SESSION set
- ntlm_wb: fix double-free in OOM
- openssl: Revert to less sensitivity for SYSCALL errors
- openssl: improve error message for SYSCALL during connect
- openssl: prevent recursive function calls from ctx callbacks
- openssl: retrieve reported LibreSSL version at runtime
- openssl: set X509_V_FLAG_PARTIAL_CHAIN by default
- parsedate: offer a getdate_capped() alternative
- pause: avoid updating socket if done was already called
- projects: Fix Visual Studio projects SSH builds
- projects: Fix Visual Studio wolfSSL configurations
- quiche: reject HTTP/3 headers in the wrong order
- remove_handle: clear expire timers after multi_done()
- runtests: --repeat=[num] to repeat tests
- runtests: introduce --shallow to reduce huge torture tests
- schannel: fix --tls-max for when min is --tlsv1 or default
- setopt: Fix ALPN / NPN user option when built without HTTP2
- strerror: Add Curl_winapi_strerror for Win API specific errors
- strerror: Fix an error looking up some Windows error strings
- strerror: Fix compiler warning "empty expression"
- system.h: fix for MCST lcc compiler
- test/sws: search for "Testno:" header unconditionally if no testno
- test1175: verify symbols-in-versions and libcurl-errors.3 in sync
- test1270: a basic -w redirect_url test
- test1456: remove the use of a fixed local port number
- test1558: use double slash after file:
- test1560: require IPv6 for IPv6 aware URL parsing
- tests/lib1557: fix mem-leak in OOM
- tests/lib1559: fix mem-leak in OOM
- tests/lib1591: free memory properly on OOM, in the trailers callback
- tests/unit1607: fix mem-leak in OOM
- tests/unit1609: fix mem-leak in OOM
- tests/unit1620: fix bad free in OOM
- tests: Change NTLM tests to require SSL
- tests: Fix bounce requests with truncated writes
- tests: fix build with `CURL_DISABLE_DOH`
- tests: fix permissions of ssh keys in WSL
- tests: make it possible to set executable extensions
- tests: make sure checksrc runs on header files too
- tests: set LC_ALL=en_US.UTF-8 instead of blank in several tests
- tests: use DoH feature for DoH tests
- tests: use \r\n for log messages in WSL
- tool_operate: fix mem leak when failed config parse
- travis: Fix error detection
- travis: abandon coveralls, it is not reliable
- travis: build ngtcp2 with --enable-lib-only
- travis: export the CC/CXX variables when set
- vtls: make BearSSL possible to set with CURL_SSL_BACKEND
- winbuild: Define CARES_STATICLIB when WITH_CARES=static
- winbuild: Document CURL_STATICLIB requirement for static libcurl

## Fixed in 7.67.0 - November 6 2019

7.67.0
7.67.0 changes only

Changes:

- curl: added --no-progress-meter
- setopt: CURLMOPT_MAX_CONCURRENT_STREAMS is new
- urlapi: CURLU_NO_AUTHORITY allows empty authority/host part

Bugfixes:

- BINDINGS: five new bindings added
- CURLOPT_TIMEOUT.3: Clarify transfer timeout time includes queue time
- CURLOPT_TIMEOUT.3: remove the mention of "minutes"
- ESNI: initial build/setup support
- FTP: FTPFILE_NOCWD: avoid redundant CWDs
- FTP: allow "rubbish" prepended to the SIZE response
- FTP: remove trailing slash from path for LIST/MLSD
- FTP: skip CWD to entry directory when target is absolute
- FTP: URL-decode path before evaluation
- HTTP3.md: move -p for mkdir, remove -j for make
- HTTP3: fix invalid use of sendto for connected UDP socket
- HTTP3: fix ngtcp2 Windows build
- HTTP3: fix prefix parameter for ngtcp2 build
- HTTP3: fix typo to somewhere1
- HTTP3: show an --alt-svc using example too
- INSTALL: add missing space for configure commands
- INSTALL: add vcpkg installation instructions
- README: minor grammar fix
- altsvc: accept quoted ma and persist values
- altsvc: both backends run h3-23 now
- appveyor: Add MSVC ARM64 build
- appveyor: Use two parallel compilation on appveyor with CMake
- appveyor: add --disable-proxy autotools build
- appveyor: add 32-bit MinGW-w64 build
- appveyor: add a winbuild
- appveyor: add a winbuild that uses VS2017
- appveyor: make winbuilds with DEBUG=no/yes and VS 2015/2017
- appveyor: publish artifacts on appveyor
- appveyor: upgrade VS2017 to VS2019
- asyn-thread: make use of Curl_socketpair() where available
- asyn-thread: s/AF_LOCAL/AF_UNIX for Solaris
- build: Remove unused HAVE_LIBSSL and HAVE_LIBCRYPTO defines
- checksrc: fix uninitialized variable warning
- chunked-encoding: stop hiding the CURLE_BAD_CONTENT_ENCODING error
- cirrus: Increase the git clone depth
- cirrus: Switch the FreeBSD 11.x build to 11.3 and add a 13.0 build
- cirrus: switch off blackhole status on the freebsd CI machines
- cleanups: 21 various PVS-Studio warnings
- configure: only say ipv6 enabled when the variable is set
- configure: remove all cyassl references
- conn-reuse: requests wanting NTLM can reuse non-NTLM connections
- connect: return CURLE_OPERATION_TIMEDOUT for errno == ETIMEDOUT
- connect: silence sign-compare warning
- cookie: avoid harmless use after free
- cookie: pass in the correct cookie amount to qsort()
- cookies: change argument type for Curl_flush_cookies
- cookies: using a share with cookies should not enable the cookie engine
- copyrights: update copyright notices to 2019
- curl: create easy handles on-demand and not ahead of time
- curl: ensure HTTP 429 triggers --retry
- curl: exit the create_transfers loop on errors
- curl: fix memory leaked by parse_metalink()
- curl: load large files with -d @ much faster
- docs/HTTP3: fix `--with-ssl` ngtcp2 configure flag
- docs: added multi-event.c example
- docs: disambiguate CURLUPART_HOST is for hostname (ie no port)
- docs: note on failed handles not being counted by curl_multi_perform
- doh: allow only http and https in debug mode
- doh: avoid truncating DNS QTYPE to lower octet
- doh: clean up dangling DOH memory on easy close
- doh: fix (harmless) buffer overrun
- doh: fix undefined behaviour and open up for gcc and clang optimization
- doh: return early if there is no time left
- examples/sslbackend: fix -Wchar-subscripts warning
- examples: remove the "this exact code has not been verified"
- git: add tests/server/disabled to .gitignore
- gnutls: make gnutls_bye() not wait for response on shutdown
- http2: expire a timeout at end of stream
- http2: prevent duplicated handles to send dummy PRIORITY frames
- http2: relax verification of :authority in push promise requests
- http2_recv: a closed stream trumps pause state
- http: lowercase headernames for HTTP/2 and HTTP/3
- ldap: Stop using wide char version of ldapp_err2string
- ldap: fix OOM error on missing query string
- mbedtls: add error message for cert validity starting in the future
- mime: when disabled, avoid C99 macro
- ngtcp2: adapt to API change
- ngtcp2: compile with latest ngtcp2 + nghttp3 draft-23
- ngtcp2: remove fprintf() calls
- openssl: close_notify on the FTP data connection does not mean closure
- openssl: fix compiler warning with LibreSSL
- openssl: use strerror on SSL_ERROR_SYSCALL
- os400: getpeername() and getsockname() return ebcdic AF_UNIX sockaddr
- parsedate: fix date parsing disabled builds
- quiche: do not close connection at end of stream
- quiche: persist connection details (fixes -I with --http3)
- quiche: set `drain` when returning without having drained the queues
- quiche: update HTTP/3 config creation to new API
- redirect: handle redirects to absolute URLs containing spaces
- runtests: get textaware info from curl instead of perl
- schannel: reverse the order of certinfo insertions
- schannel_verify: Fix concurrent openings of CA file
- security: silence conversion warning
- setopt: handle ALTSVC set to NULL
- setopt: make it easier to add new enum values
- setopt: store CURLOPT_RTSP_SERVER_CSEQ correctly
- smb: check for full size message before reading message details
- smbserver: fix Python 3 compatibility
- socks: Fix destination host shown on SOCKS5 error
- test1162: disable MSYS2's POSIX path conversion
- test1591: fix spelling of http feature
- tests: add `connect to non-listen` keywords
- tests: fix narrowing conversion warnings
- tests: fix the test 3001 cert failures
- tests: makes tests succeed when using --disable-proxy
- tests: use %FILE_PWD for file:// URLs
- tests: use port 2 instead of 60000 for a safer non-listening port
- tool_operate: Fix retry sleep time shown to user when Retry-After
- travis: Add an ARM64 build
- url: Curl_free_request_state() should also free doh handles
- url: do not set appconnect time for non-ssl/non-ssh connections
- url: fix the NULL hostname compiler warning
- url: normalize CURLINFO_EFFECTIVE_URL
- url: only reuse TLS connections with matching pinning
- urlapi: avoid index underflow for short ipv6 hostnames
- urlapi: fix URL encoding when setting a full URL
- urlapi: fix unused variable warning
- urlapi: question mark within fragment is still fragment
- urldata: use `bool` for the bit type on MSVC compilers
- vtls: Fix comment typo about macosx-version-min compiler flag
- vtls: fix narrowing conversion warnings
- winbuild/MakefileBuild.vc: Add vssh
- winbuild/MakefileBuild.vc: Fix line endings
- winbuild: Add manifest to curl.exe for proper OS version detection
- winbuild: add ENABLE_UNICODE option

## Fixed in 7.66.0 - September 11 2019

7.66.0
7.66.0 changes only

Changes:

- CURLINFO_RETRY_AFTER: parse the Retry-After header value
- HTTP3: initial (experimental still not working) support
- curl: --sasl-authzid added to support CURLOPT_SASL_AUTHZID from the tool
- curl: support parallel transfers with -Z
- curl_multi_poll: a sister to curl_multi_wait() that waits more
- sasl: Implement SASL authorization identity via CURLOPT_SASL_AUTHZID

Bugfixes:

- CVE-2019-5481: FTP-KRB double-free
- CVE-2019-5482: TFTP small blocksize heap buffer overflow
- CI: remove duplicate configure flag for LGTM.com
- CMake: remove needless newlines at end of gss variables
- CMake: use platform dependent name for dlopen() library
- CURLINFO docs: mention that in redirects times are added
- CURLOPT_ALTSVC.3: use a "" filename to not load from a file
- CURLOPT_ALTSVC_CTRL.3: remove CURLALTSVC_ALTUSED
- CURLOPT_HEADERFUNCTION.3: clarify
- CURLOPT_HTTP_VERSION: setting this to 3 forces HTTP/3 use directly
- CURLOPT_READFUNCTION.3: provide inline example
- CURLOPT_SSL_VERIFYHOST: treat the value 1 as 2
- Curl_addr2string: take an addrlen argument too
- Curl_fillreadbuffer: avoid double-free trailer buf on error
- HTTP: use chunked Transfer-Encoding for HTTP_POST if size unknown
- alt-svc: add protocol version selection masking
- alt-svc: fix removal of expired cache entry
- alt-svc: make it use h3-22 with ngtcp2 as well
- alt-svc: more liberal ALPN name parsing
- alt-svc: send Alt-Used: in redirected requests
- alt-svc: with quiche, use the quiche h3 alpn string
- appveyor: pass on -k to make
- asyn-thread: create a socketpair to wait on
- build-openssl: fix build with Visual Studio 2019
- cleanup: move functions out of url.c and make them static
- cleanup: remove the `numsocks` argument used in many places
- configure: avoid undefined check_for_ca_bundle
- curl.h: add CURL_HTTP_VERSION_3 to the version enum
- curl.h: fix outdated comment
- curl: cap the maximum allowed values for retry time arguments
- curl: handle a libcurl build without netrc support
- curl: make use of CURLINFO_RETRY_AFTER when retrying
- curl: remove outdated comment
- curl: use .curlrc (with a dot) on Windows
- curl: use CURLINFO_PROTOCOL to check for HTTP(s)
- curl_global_init_mem.3: mention it was added in 7.12.0
- curl_version: bump string buffer size to 250
- curl_version_info.3: mentioned ALTSVC and HTTP3
- curl_version_info: offer quic (and h3) library info
- curl_version_info: provide nghttp2 details
- defines: avoid underscore-prefixed defines
- docs/ALTSVC: remove what works and the experimental explanation
- docs/EXPERIMENTAL: explain what it means and what is experimental now
- docs/MANUAL.md: converted to markdown from plain text
- docs/examples/curlx: fix errors
- docs: s/curl_debug/curl_dbg_debug in comments and docs
- easy: resize receive buffer on easy handle reset
- examples: Avoid reserved names in hiperfifo examples
- examples: add http3.c, altsvc.c and http3-present.c
- getenv: support up to 4K environment variable contents on windows
- http09: disable HTTP/0.9 by default in both tool and library
- http2: when marked for closure and wanted to close == OK
- http2_recv: trigger another read when the last data is returned
- http: fix use of credentials from URL when using HTTP proxy
- http_negotiate: improve handling of gss_init_sec_context() failures
- md4: Use our own MD4 when no crypto libraries are available
- multi: call detach_connection before Curl_disconnect
- netrc: make the code try ".netrc" on Windows
- nss: use TLSv1.3 as default if supported
- openssl: build warning free with boringssl
- openssl: use SSL_CTX_set_<min|max>_proto_version() when available
- plan9: add support for running on Plan 9
- progress: reset download/uploaded counter between transfers
- readwrite_data: repair setting the TIMER_STARTTRANSFER stamp
- scp: fix directory name length used in memcpy
- smb: init *msg to NULL in smb_send_and_recv()
- smtp: check for and bail out on too short EHLO response
- source: remove names from source comments
- spnego_sspi: add typecast to fix build warning
- src/makefile: fix uncompressed hugehelp.c generation
- ssh-libssh: do not specify O_APPEND when not in append mode
- ssh: move code into vssh for SSH backends
- sspi: fix memory leaks
- tests: Replace outdated test case numbering documentation
- tftp: return error when packet is too small for options
- timediff: make it 64-bit (if possible) even with 32-bit time_t
- travis: reduce number of torture tests in `coverage`
- url: make use of new HTTP version if alt-svc has one
- urlapi: verify the IPv6 numerical address
- urldata: avoid `generic`, use dedicated pointers
- vauth: Use CURLE_AUTH_ERROR for auth function errors

## Fixed in 7.65.3 - July 19 2019

7.65.3
7.65.3 changes only

Bugfixes:

- progress: make the progress meter appear again

## Fixed in 7.65.2 - July 17 2019

7.65.2
7.65.2 changes only

Bugfixes:

- CIPHERS.md: Explain Schannel error SEC_E_ALGORITHM_MISMATCH
- CMake: Convert errant elseif() to else()
- CMake: Fix finding Brotli on case-sensitive file systems
- CURLMOPT_SOCKETFUNCTION.3: clarified
- CURLMOPT_SOCKETFUNCTION.3: fix typo
- CURLOPT_CAINFO.3: polished wording
- CURLOPT_HEADEROPT.3: Fix example
- CURLOPT_RANGE.3: Caution against using it for HTTP PUT
- CURLOPT_SEEKDATA.3: fix variable name
- DEPRECATE: fixup versions and spelling
- bindlocal: detect and avoid IP version mismatches in bind()
- build: fix Codacy warnings
- buildconf.bat: fix header filename
- c-ares: honor port numbers in CURLOPT_DNS_SERVERS
- config-os400: add getpeername and getsockname defines
- configure: --disable-progress-meter
- configure: fix --disable-code-coverage
- configure: fix typo `--disable-http-uath`
- configure: more --disable switches to toggle off individual features
- configure: remove CURL_DISABLE_TLS_SRP
- conn_maxage: move the check to prune_dead_connections()
- curl: skip CURLOPT_PROXY_CAPATH for disabled-proxy builds
- curl_multi_wait.3: escape backslash in example
- docs: Explain behavior change in --tlsv1. options since 7.54
- docs: Fix links to OpenSSL docs
- docs: fix string suggesting HTTP/2 is not the default
- examples/fopen: fix comparison
- examples/htmltitle: use C++ casts between pointer types
- headers: Remove no longer exported functions
- http2: call done_sending on end of upload
- http2: do not call stream-close on already closed streams
- http2: remove CURL_DISABLE_TYPECHECK define
- http: allow overriding timecond with custom header
- http: clarify header buffer size calculation
- krb5: fix compiler warning
- lib: Use UTF-8 encoding in comments
- libcurl-tutorial.3: Fix small typo (-> multipart)
- libcurl: Restrict redirect schemes to HTTP, HTTPS, FTP and FTPS
- multi: enable multiplexing by default (again)
- multi: fix the transfer hashes in the socket hash entries
- multi: make sure `data` can present in several sockhash entries
- netrc: Return the correct error code when out of memory
- nss: do not set unused parameter
- nss: inspect returnvalue of token check
- nss: only cache valid CRL entries
- nss: support using libnss on macOS
- openssl: define HAVE_SSL_GET_SHUTDOWN based on version number
- openssl: disable engine if OPENSSL_NO_UI_CONSOLE is defined
- openssl: fix pubkey/signature algorithm detection in certinfo
- openssl: remove outdated comment
- os400: make vsetopt() non-static as Curl_vsetopt() for os400 support
- quote.d: asterisk prefix works for SFTP as well
- runtests: keep logfiles around by default
- runtests: report single test time + total duration
- smb: Use the correct error code for access denied on file open
- sws: remove unused variables
- system_win32: fix clang warning
- system_win32: fix typo
- test1165: verify that CURL_DISABLE_ symbols are in sync
- test1521: adapt to SLISTPOINT
- test1523: test CURLOPT_LOW_SPEED_LIMIT
- test153: fix content-length to avoid occasional hang
- test188/189: fix Content-Length
- tests: have runtests figure out disabled features
- tests: support non-localhost HOSTIP for dict/smb servers
- tests: update fixed IP for hostip/clientip split
- tool_cb_prg: Fix integer overflow in progress bar
- travis: disable threaded resolver for coverage build
- travis: enable alt-svc for coverage build
- travis: enable brotli for all xenial jobs
- travis: enable libssh2 for coverage build
- travis: enable warnings-as-errors for coverage build
- travis: update scan-build job to xenial
- typecheck: CURLOPT_CONNECT_TO takes an slist too
- typecheck: add 3 missing strings and a callback data pointer
- unit1654: cleanup on memory failure
- unpause: trigger a timeout for event-based transfers
- url: Fix CURLOPT_MAXAGE_CONN time comparison
- win32: make DLL loading a no-op for UWP
- winbuild: Change Makefile to honor ENABLE_OPENSSL_AUTO_LOAD_CONFIG
- winbuild: use WITH_PREFIX if given
- wolfssl: refer to it as wolfSSL only

## Fixed in 7.65.1 - June 5 2019

7.65.1
7.65.1 changes only

Bugfixes:

- CURLOPT_LOW_SPEED_* repaired
- NTLM: reset proxy "multipass" state when CONNECT request is done
- PolarSSL: deprecate support step 1. Removed from configure
- appveyor: add Visual Studio solution build
- cmake: check for if_nametoindex()
- cmake: support CMAKE_OSX_ARCHITECTURES when detecting SIZEOF variables
- config-win32: add support for if_nametoindex and getsockname
- conncache: Remove the DEBUGASSERT on length check
- conncache: make "bundles" per hostname when doing proxy tunnels
- curl-win32.h: Enable Unix Domain Sockets based on the Windows SDK version
- curl_share_setopt.3: improve wording
- dump-header.d: spell out that no headers == empty file
- example/http2-download: fix format specifier
- examples: cleanups and compiler warning fixes
- http2: Stop drain from being permanently set
- http: do not parse body-related headers in bodyless responses
- md4: build correctly with openssl without MD4
- md4: include the mbedtls config.h to get the MD4 info
- multi: track users of a socket better
- nss: allow to specify TLS 1.3 ciphers if supported by NSS
- parse_proxy: make sure portptr is initialized
- parse_proxy: use the IPv6 zone id if given
- sectransp: handle errSSLPeerAuthCompleted from SSLRead()
- singlesocket: use separate variable for inner loop
- ssl: Update outdated "openssl-only" comments for supported backends
- tests: add HAProxy keywords
- tests: add support to test against OpenSSH for Windows
- tests: make test 1420 and 1406 work with rtsp-disabled libcurl
- tls13-docs: mention it is only for OpenSSL >= 1.1.1
- tool_parse_cfg: Avoid 2 fopen() for WIN32
- tool_setopt: for builds with disabled-proxy, skip all proxy setopts()
- url: Load if_nametoindex() dynamically from iphlpapi.dll on Windows
- url: fix bad feature-disable #ifdef
- url: use correct port in ConnectionExists()
- winbuild: Use two space indentation

## Fixed in 7.65.0 - May 22 2019

7.65.0
7.65.0 changes only

Changes:

- CURLOPT_DNS_USE_GLOBAL_CACHE: removed
- CURLOPT_MAXAGE_CONN: set the maximum allowed age for conn reuse
- pipelining: removed

Bugfixes:

- CVE-2019-5435: Integer overflows in curl_url_set
- CVE-2019-5436: tftp: use the current blksize for recvfrom()
- --config: clarify that initial : and = might need quoting
- AppVeyor: enable testing for WinSSL build
- CURLMOPT_TIMERFUNCTION.3: warn about the recursive risk
- CURLOPT_ADDRESS_SCOPE: fix range check and more
- CURLOPT_CAINFO.3: with Schannel, you want Windows 8 or later
- CURLOPT_CHUNK_BGN_FUNCTION.3: document the struct and time value
- CURLOPT_READFUNCTION.3: see also CURLOPT_UPLOAD_BUFFERSIZE
- CURL_MAX_INPUT_LENGTH: largest acceptable string input size
- Curl_disconnect: treat all CONNECT_ONLY connections as "dead"
- INTERNALS: Add code highlighting
- OS400/ccsidcurl: replace use of Curl_vsetopt
- OpenSSL: Report -fips in version if OpenSSL is built with FIPS
- README.md: fix no-consecutive-blank-lines Codacy warning
- VC15 project: remove MinimalRebuild
- VS projects: use Unicode for VC10+
- WRITEFUNCTION: add missing set_in_callback around callback
- altsvc: Fix building with cookies disabled
- auth: Rename the various authentication clean up functions
- base64: build conditionally if there are users
- build-openssl.bat: Fixed support for OpenSSL v1.1.0+
- build: fix "clarify calculation precedence" warnings
- checksrc.bat: ignore snprintf warnings in docs/examples
- cirrus: Customize the disabled tests per FreeBSD version
- cleanup: remove FIXME and TODO comments
- cmake: avoid linking executable for some tests with cmake 3.6+
- cmake: clear CMAKE_REQUIRED_LIBRARIES after each use
- cmake: rename CMAKE_USE_DARWINSSL to CMAKE_USE_SECTRANSP
- cmake: set SSL_BACKENDS
- configure: avoid unportable `==` test(1) operator
- configure: error out if OpenSSL was not detected when asked for
- configure: fix default location for fish completions
- cookie: Guard against possible NULL ptr deref
- curl: make code work with protocol-disabled libcurl
- curl: report error for "--no-" on non-boolean options
- curl_easy_getinfo.3: fix minor formatting mistake
- curlver.h: use parenthesis in CURL_VERSION_BITS macro
- docs/BUG-BOUNTY: bug bounty time
- docs/INSTALL: fix broken link
- docs/RELEASE-PROCEDURE: link to live iCalendar
- documentation: Fix several typos
- doh: acknowledge CURL_DISABLE_DOH
- doh: disable DOH for the cases it does not work
- examples: remove unused variables
- ftplistparser: fix LGTM alert "Empty block without comment"
- hostip: acknowledge CURL_DISABLE_SHUFFLE_DNS
- http: Ignore HTTP/2 prior knowledge setting for HTTP proxies
- http: acknowledge CURL_DISABLE_HTTP_AUTH
- http: mark bundle as not for multiuse on < HTTP/2 response
- http_digest: do not expose functions when HTTP and Crypto Auth are disabled
- http_negotiate: do not treat failure of gss_init_sec_context() as fatal
- http_ntlm: Corrected the name of the include guard
- http_ntlm_wb: Handle auth for only a single request
- http_ntlm_wb: Return the correct error on receiving an empty auth message
- lib509: add missing include for strdup
- lib557: initialize variables
- makedebug: Fix ERRORLEVEL detection after running where.exe
- mbedtls: enable use of EC keys
- mime: acknowledge CURL_DISABLE_MIME
- multi: improved HTTP_1_1_REQUIRED handling
- netrc: acknowledge CURL_DISABLE_NETRC
- nss: allow fifos and character devices for certificates
- nss: provide more specific error messages on failed init
- ntlm: Fix misaligned function comments for Curl_auth_ntlm_cleanup
- ntlm: Support the NT response in the type-3 when OpenSSL does not include MD4
- openssl: mark connection for close on TLS close_notify
- openvms: Remove pre-processor for SecureTransport
- openvms: Remove pre-processors for Windows
- parse_proxy: use the URL parser API
- parsedate: disabled on CURL_DISABLE_PARSEDATE
- pingpong: disable more when no pingpong protocols are enabled
- polarssl_threadlock: remove conditionally unused code
- progress: acknowledge CURL_DISABLE_PROGRESS_METER
- proxy: acknowledge DISABLE_PROXY more
- resolve: apply Happy Eyeballs philosophy to parallel c-ares queries
- revert "multi: support verbose conncache closure handle"
- sasl: do not send authcid as authzid for the PLAIN mechanism as per RFC 4616
- sasl: only enable if there is a protocol enabled using it
- scripts: fix typos
- singleipconnect: show port in the verbose "Trying ..." message
- smtp: fix compiler warning
- socks5: username and passwords must be shorter than 256
- socks: fix error message
- socksd: new SOCKS 4+5 server for tests
- spnego_gssapi: fix return code on gss_init_sec_context() failure
- ssh-libssh: remove unused variable
- ssh: define USE_SSH if SSH is enabled (any backend)
- ssh: move variable declaration to where it is used
- test1002: correct the name
- test2100: Fix typos in test description
- tests/server/util: fix Windows Unicode build
- tests: Run global cleanup at end of tests
- tests: make Impacket (SMB server) Python 3 compatible
- tool_cb_wrt: fix bad-function-cast warning
- tool_formparse: remove redundant assignment
- tool_help: Warn if curl and libcurl versions do not match
- tool_help: include <strings.h> for strcasecmp
- transfer: fix LGTM alert "Comparison is always true"
- travis: add an osx http-only build
- travis: allow builds on branches named "ci"
- travis: install dependencies only when needed
- travis: update some builds do Xenial
- travis: updated mesalink builds
- url: always clone the CUROPT_CURLU handle
- url: convert the zone id from an IPv6 URL to correct scope id
- urlapi: add CURLUPART_ZONEID to set and get
- urlapi: increase supported scheme length to 40 bytes
- urlapi: require a non-zero hostname length when parsing URL
- urlapi: stricter CURLUPART_PORT parsing
- urlapi: strip off zone id from numerical IPv6 addresses
- urlapi: urlencode characters above 0x7f correctly
- vauth/cleartext: update the PLAIN login to match RFC 4616
- vauth/oauth2: Fix OAUTHBEARER token generation
- vauth: Fix incorrect function description for Curl_auth_user_contains_domain
- vtls: fix potential ssl_buffer stack overflow
- wildcard: disable from build when FTP is not present
- winbuild: Support MultiSSL builds
- xattr: skip unittest on unsupported platforms

## Fixed in 7.64.1 - March 27 2019

7.64.1
7.64.1 changes only

Changes:

- alt-svc: experimental support added
- configure: add --with-amissl

Bugfixes:

- AppVeyor: add MinGW-w64 and classic Mingw builds
- AppVeyor: switch VS 2015 builds to VS 2017 image
- CURLU: fix NULL dereference when used over proxy
- Curl_easy: remove req.maxfd - never used!
- Curl_now: figure out windows version in win32_init:
- Curl_resolv: fix a gcc -Werror=maybe-uninitialized warning
- DoH: inherit some SSL options from user's easy handle
- Secure Transport: no more "darwinssl"
- Secure Transport: tvOS 11 is required for ALPN support
- cirrus: Added FreeBSD builds using Cirrus CI
- cleanup: make local functions static
- cli tool: do not use mime.h private structures
- cmdline-opts/proxytunnel.d: the option tunnnels all protocols
- configure: add additional libraries to check for LDAP support
- configure: remove the unused fdopen macro
- configure: show features as well in the final summary
- conncache: use conn->data to know if a transfer owns it
- connection: never reuse CONNECT_ONLY connections
- connection_check: restore original conn->data after the check
- connection_check: set ->data to the transfer doing the check
- cookie: Add support for cookie prefixes
- cookies: dotless names can set cookies again
- cookies: fix NULL dereference if flushing cookies with no CookieInfo set
- curl.1: --user and --proxy-user are hidden from ps output
- curl.1: mark the argument to --cookie as <data|filename>
- curl.h: use __has_declspec_attribute for shared builds
- curl: display --version features sorted alphabetically
- curl: fix FreeBSD compiler warning in the --xattr code
- curl: remove MANUAL from -M output
- curl_easy_duphandle.3: clarify that a duped handle has no shares
- curl_multi_remove_handle.3: use at any time, but not from within callbacks
- curl_url.3: this API is not experimental anymore
- dns: release sharelock as soon as possible
- docs: update max-redirs.d phrasing
- easy: fix win32 init to work without CURL_GLOBAL_WIN32
- examples/10-at-a-time.c: improve readability and simplify
- examples/cacertinmem.c: use multiple certificates for loading CA-chain
- examples/crawler: Fix the Accept-Encoding setting
- examples/ephiperfifo.c: various fixes
- examples/externalsocket: add missing close socket calls
- examples/http2-download: cleaned up
- examples/http2-serverpush: add some sensible error checks
- examples/http2-upload: cleaned up
- examples/httpcustomheader: Value stored to `res` is never read
- examples/postinmemory: Potential leak of memory pointed to by `chunk.memory`
- examples/sftpuploadresume: Value stored to `result` is never read
- examples: only include <curl/curl.h>
- examples: remove recursive calls to curl_multi_socket_action
- examples: remove superfluous null-pointer checks
- file: fix "Checking if unsigned variable `readcount` is less than zero."
- fnmatch: disable if FTP is disabled
- gnutls: remove call to deprecated gnutls_compression_get_name
- gopher: remove check for path == NULL
- gssapi: fix deprecated header warnings
- hostip: make create_hostcache_id avoid alloc + free
- http2: multi_connchanged() moved from multi.c, only used for h2
- http2: verify :athority in push promise requests
- http: make adding a blank header thread-safe
- http: send payload when (proxy) authentication is done
- http: set state.infilesize when sending multipart formposts
- makefile: make checksrc and hugefile commands "silent"
- mbedtls: make it build even if MBEDTLS_VERSION_C is not set
- mbedtls: release sessionid resources on error
- memdebug: log pointer before freeing its data
- memdebug: make debug-specific functions use curl_dbg_ prefix
- mime: put the boundary buffer into the curl_mime struct
- multi: call multi_done on connect timeouts, fixes CURLINFO_TOTAL_TIME
- multi: remove verbose "Expire in" ... messages
- multi: removed unused code for request retries
- multi: support verbose conncache closure handle
- negotiate: fix for HTTP POST with Negotiate
- openssl: add support for TLS ASYNC state
- openssl: if cert type is ENG and no key specified, key is ENG too
- pretransfer: do not strlen() POSTFIELDS set for GET requests
- rand: Fix a mismatch between comments in source and header
- runtests: detect "schannel" as an alias for "winssl"
- schannel: be quiet - remove verbose output
- schannel: close TLS before removing conn from cache
- schannel: support CALG_ECDH_EPHEM algorithm
- scripts/completion.pl: also generate fish completion file
- singlesocket: fix the `sincebefore` placement
- source: fix two `nread` may be used uninitialized warnings
- ssh: fix Condition `!status` is always true
- ssh: loop the state machine if not done and not blocking
- strerror: make the strerror function use local buffers
- system_win32: move win32_init here from easy.c
- test578: make it read data from the correct test
- tests: Fixed XML validation errors in some test files
- tests: add stderr comparison to the test suite
- tests: fix multiple may be used uninitialized warnings
- threaded-resolver: shutdown the resolver thread without error message
- tool_cb_wrt: fix writing to Windows null device NUL
- tool_getpass: termios.h is present on AmigaOS 3, but no tcgetattr/tcsetattr
- tool_operate: build on AmigaOS
- tool_operate: fix typecheck warning
- transfer.c: do not compute length of undefined hex buffer
- travis: add build using gnutls
- travis: add scan-build
- travis: bump the used wolfSSL version to 4.0.0
- travis: enable valgrind for the iconv tests
- travis: use updated compiler versions: clang 7 and gcc 8
- unit1307: require FTP support
- unit1651: survive curl_easy_init() fails
- url/idnconvert: remove scan for <= 32 ascii values
- url: change conn shutdown order to ensure SOCKETFUNCTION callbacks
- urlapi: reduce variable scope, remove unreachable `break`
- urldata: convert bools to bitfields and move to end
- urldata: simplify bytecounters
- urlglob: Argument with `nonnull` attribute passed null
- version.c: silent scan-build even when librtmp is not enabled
- vtls: rename some of the SSL functions
- wolfssl: stop custom-adding curves
- x509asn1: "Dereference of null pointer"
- x509asn1: cleanup and unify code layout
- zsh.pl: escape `:` character
- zsh.pl: update regex to better match curl -h output

## Fixed in 7.64.0 - February 6 2019

7.64.0
7.64.0 changes only

Changes:

- cookies: leave secure cookies alone
- hostip: support wildcard hosts
- http: Implement trailing headers for chunked transfers
- http: added options for allowing HTTP/0.9 responses
- timeval: Use high resolution timestamps on Windows

Bugfixes:

- CVE-2018-16890: NTLM type-2 out-of-bounds buffer read
- CVE-2019-3822: NTLMv2 type-3 header stack buffer overflow
- CVE-2019-3823: SMTP end-of-response out-of-bounds read
- FAQ: remove mention of sourceforge for github
- OS400: handle memory error in list conversion
- OS400: upgrade ILE/RPG binding.
- README: add codacy code quality badge
- Revert http_negotiate: do not close connection
- THANKS: added several missing names from year <= 2000
- build: make `tidy` target work for metalink builds
- cmake: added checks for variadic macros
- cmake: updated check for HAVE_POLL_FINE to match autotools
- cmake: use lowercase for function name like the rest of the code
- configure: detect xlclang separately from clang
- configure: fix recv/send/select detection on Android
- configure: rewrite --enable-code-coverage
- conncache_unlock: avoid indirection by changing input argument type
- cookie: fix comment typo
- cookies: allow secure override when done over HTTPS
- cookies: extend domain checks to non psl builds
- cookies: skip custom cookies when redirecting cross-site
- curl --xattr: strip credentials from any URL that is stored
- curl -J: refuse to append to the destination file
- curl/urlapi.h: include "curl.h" first
- curl_multi_remove_handle() do not block terminating c-ares requests
- darwinssl: accept setting max-tls with default min-tls
- disconnect: separate connections and easy handles better
- disconnect: set conn->data for protocol disconnect
- docs/version.d: mention MultiSSL
- docs: fix the --tls-max description
- docs: use $(INSTALL_DATA) to install man page
- docs: use meaningless port number in CURLOPT_LOCALPORT example
- gopher: always include the entire gopher-path in request
- http2: clear pause stream id if it gets closed
- if2ip: remove unused function Curl_if_is_interface_name
- libssh: do not let libssh create socket
- libssh: enable CURLOPT_SSH_KNOWNHOSTS and CURLOPT_SSH_KEYFUNCTION for libssh
- libssh: free sftp_canonicalize_path() data correctly
- libtest/stub_gssapi: use "real" snprintf
- mbedtls: use VERIFYHOST
- multi: multiplexing improvements
- multi: set the EXPIRE_*TIMEOUT timers at TIMER_STARTSINGLE time
- ntlm: fix NTMLv2 compliance
- ntlm_sspi: add support for channel binding
- openssl: adapt to 3.0.0, OpenSSL_version_num() is deprecated
- openssl: fix the SSL_get_tlsext_status_ocsp_resp call
- openvms: fix OpenSSL discovery on VAX
- openvms: fix typos in documentation
- os400: add a missing closing bracket
- os400: fix extra parameter syntax error
- pingpong: change default response timeout to 120 seconds
- pingpong: ignore regular timeout in disconnect phase
- printf: fix format specifiers
- runtests.pl: Fix perl call to include srcdir
- schannel: fix compiler warning
- schannel: preserve original certificate path parameter
- schannel: stop calling it "winssl"
- sigpipe: if mbedTLS is used, ignore SIGPIPE
- smb: fix incorrect path in request if connection reused
- ssh: log the libssh2 error message when ssh session startup fails
- test1558: verify CURLINFO_PROTOCOL on file:// transfer
- test1561: improve test name
- test1653: make it survive torture tests
- tests: allow tests to pass by 2037-02-12
- tests: move objnames-* from lib into tests
- timediff: fix math for unsigned time_t
- timeval: Disable MSVC Analyzer GetTickCount warning
- tool_cb_prg: avoid integer overflow
- travis: added cmake build for osx
- urlapi: Fix port parsing of eol colon
- urlapi: distinguish possibly empty query
- urlapi: fix parsing ipv6 with zone index
- urldata: rename easy_conn to conn
- winbuild: conditionally use /DZLIB_WINAPI
- wolfssl: fix memory-leak in threaded use
- spnego_sspi: add support for channel binding

## Fixed in 7.63.0 - December 12 2018

7.63.0
7.63.0 changes only

Changes:

- curl: add %{stderr} and %{stdout} for --write-out
- curl: add undocumented option --dump-module-paths for win32
- setopt: add CURLOPT_CURLU

Bugfixes:

- (lib)curl.rc: fixup for minor bugs
- CURLINFO_REDIRECT_URL: extract the Location: header field unvalidated
- CURLOPT_HEADERFUNCTION.3: match `nitems` name in synopsis and description
- CURLOPT_WRITEFUNCTION.3: spell out that it gets called many times
- Curl_follow: accept non-supported schemes for "fake" redirects
- KNOWN_BUGS: add --proxy-any connection issue
- NTLM: Remove redundant ifdef USE_OPENSSL
- NTLM: force the connection to HTTP/1.1
- OS400: add URL API ccsid wrappers and sync ILE/RPG bindings
- SECURITY-PROCESS: bountygraph shuts down again
- TODO: Have the URL API offer IDN decoding
- ares: remove fd from multi fd set when ares is about to close the fd
- axtls: removed
- checksrc: add COPYRIGHTYEAR check
- cmake: fix MIT/Heimdal Kerberos detection
- configure: include all libraries in ssl-libs fetch
- configure: show CFLAGS, LDFLAGS etc in summary
- connect: fix building for recent versions of Minix
- cookies: create the cookiejar even if no cookies to save
- cookies: expire "Max-Age=0" immediately
- curl: --local-port range was not "including"
- curl: fix --local-port integer overflow
- curl: fix memory leak reading --writeout from file
- curl: fixed UTF-8 in current console code page (Windows)
- curl_easy_perform: fix timeout handling
- curl_global_sslset(): id == -1 is not necessarily an error
- curl_multibyte: fix a malloc overcalculation
- curle: move deprecated error code to ifndef block
- docs: curl_formadd field and filenames are now escaped
- docs: escape "\n" codes
- doh: fix memory leak in OOM situation
- doh: make it work for h2-disabled builds too
- examples/ephiperfifo: report error when epoll_ctl fails
- ftp: avoid two unsigned int overflows in FTP listing parser
- hostnames: allow trailing dot in name resolve, then strip it
- http2: Upon HTTP_1_1_REQUIRED, retry the request with HTTP/1.1
- http: do not set CURLINFO_CONDITION_UNMET for http status code 204
- http: fix HTTP Digest auth to include query in URI
- http_negotiate: do not close connection until negotiation is completed
- impacket: add LICENSE
- infof: clearly indicate truncation
- ldap: fix LDAP URL parsing regressions
- libcurl: stop reading from paused transfers
- mprintf: avoid unsigned integer overflow warning
- netrc: do not ignore the login name specified with "--user"
- nss: Fall back to latest supported SSL version
- nss: Fix compatibility with nss versions 3.14 to 3.15
- nss: fix fallthrough comment to fix picky compiler warning
- nss: remove version selecting dead code
- nss: set default max-tls to 1.3/1.2
- openssl: Remove SSLEAY leftovers
- openssl: do not log excess "TLS app data" lines for TLS 1.3
- openssl: do not use file BIOs if not requested
- openssl: fix unused variable compiler warning with old openssl
- openssl: support session resume with TLS 1.3
- openvms: fix example name
- os400: Add curl_easy_conn_upkeep() to ILE/RPG binding
- os400: add CURLOPT_CURLU to ILE/RPG binding
- os400: fix return type of curl_easy_pause() in ILE/RPG binding
- packages: remove old leftover files and dirs
- pop3: only do APOP with a valid timestamp
- runtests: use the local curl for verifying
- schannel: be consistent in Schannel capitalization
- schannel: better CURLOPT_CERTINFO support
- schannel: use Curl_ prefix for global private symbols
- snprintf: renamed and we now only use msnprintf()
- ssl: fix compilation with OpenSSL 0.9.7
- ssl: replace all internal uses of CURLE_SSL_CACERT
- symbols-in-versions: add missing CURLU_ symbols
- test328: verify Content-Encoding: none
- tests: disable SO_EXCLUSIVEADDRUSE for stunnel on Windows
- tests: drop http_pipe.py script no longer used
- tool_cb_wrt: Silence function cast compiler warning
- tool_doswin: Fix uninitialized field warning
- travis: build with clang sanitizers
- travis: remove curl before a normal build
- url: a short hostname + port is not a scheme
- url: fix IPv6 numeral address parser
- urlapi: only skip encoding the first `;=` with APPENDQUERY set

## Fixed in 7.62.0 - October 31 2018

7.62.0
7.62.0 changes only

Changes:

- multiplex: enable by default
- url: default to CURL_HTTP_VERSION_2TLS if built h2-enabled
- setopt: add CURLOPT_DOH_URL
- curl: --doh-url added
- setopt: add CURLOPT_UPLOAD_BUFFERSIZE: set upload buffer size
- imap: change from "FETCH" to "UID FETCH"
- configure: add option to disable automatic OpenSSL config loading
- upkeep: add a connection upkeep API: curl_easy_upkeep()
- URL-API: added five new functions
- vtls: MesaLink is a new TLS backend

Bugfixes:

- CVE-2018-16839: SASL password overflow via integer overflow
- CVE-2018-16840: use-after-free in handle close
- CVE-2018-16842: warning message out-of-buffer read
- CURLOPT_DNS_USE_GLOBAL_CACHE: deprecated
- Curl_dedotdotify(): always null-terminate returned string
- Curl_follow: Always free the passed new URL
- Curl_http2_done: fix memleak in error path
- Curl_retry_request: fix memory leak
- Curl_saferealloc: Fixed typo in docblock
- FILE: fix CURLOPT_NOBODY and CURLOPT_HEADER output
- GnutTLS: TLS 1.3 support
- SECURITY-PROCESS: mention the bountygraph program
- VS projects: add USE_IPV6:
- Windows: fixes for MinGW targeting Windows Vista
- anyauthput: fix compiler warning on 64-bit Windows
- appveyor: add WinSSL builds
- appveyor: run test suite (on Windows!)
- certs: generate tests certs with sha256 digest algorithm
- checksrc: enable strict mode and warnings
- checksrc: handle zero scoped ignore commands
- cmake: Backport to work with CMake 3.0 again
- cmake: Improve config installation
- cmake: add support for transitive ZLIB target
- cmake: disable -Wpedantic-ms-format
- cmake: do not require OpenSSL if USE_OPENSSL=OFF
- cmake: fixed path used in generation of docs/tests
- cmake: remove unused *SOCKLEN_T variables
- cmake: suppress MSVC warning C4127 for libtest
- cmake: test and set missed defines during configuration
- comment: Fix multiple typos in function parameters
- config: Remove unused SIZEOF_VOIDP
- config_win32: enable LDAPS
- configure: force-use -lpthreads on HPUX
- configure: remove CURL_CONFIGURE_CURL_SOCKLEN_T
- configure: s/AC_RUN_IFELSE/CURL_RUN_IFELSE
- cookies: Remove redundant expired check
- cookies: fix leak when writing cookies to file
- curl-config.in: remove dependency on bc
- curl.1: --ipv6 mutexes ipv4 (fixed typo)
- curl: enabled Windows VT Support and UTF-8 output
- curl: update the documentation of --tlsv1.0
- curl_multi_wait: call getsock before figuring out timeout
- curl_ntlm_wb: check aprintf() return codes
- curl_threads: fix classic MinGW compile break
- darwinssl: Fix realloc memleak
- darwinssl: more specific and unified error codes
- data-binary.d: clarify default content-type is x-www-form-urlencoded
- docs/BUG-BOUNTY: explain the bounty program
- docs/CIPHERS: Mention the options used to set TLS 1.3 ciphers
- docs/CIPHERS: fix the TLS 1.3 cipher names
- docs/CIPHERS: mention the colon separation for OpenSSL
- docs/examples: URL updates
- docs: add "see also" links for SSL options
- example/asiohiper: insert warning comment about its status
- example/htmltidy: fix include paths of tidy libraries
- examples/Makefile.m32: sync with core
- examples/http2-pushinmemory: receive HTTP/2 pushed files in memory
- examples/parseurl.c: show off the URL API
- examples: Fix memory leaks from realloc errors
- examples: do not wait when no transfers are running
- ftp: include command in Curl_ftpsend sendbuffer
- gskit: make sure to terminate version string
- gtls: Values stored to but never read
- hostip: fix check on Curl_shuffle_addr return value
- http2: fix memory leaks on error-path
- http: fix memleak in rewind error path
- krb5: fix memory leak in krb_auth
- ldap: show precise LDAP call in error message on Windows
- lib: fix gcc8 warning on Windows
- memory: add missing curl_printf header
- memory: ensure to check allocation results
- multi: Fix error handling in the SENDPROTOCONNECT state
- multi: fix memory leak in content encoding related error path
- multi: make the closure handle "inherit" CURLOPT_NOSIGNAL
- netrc: free temporary strings if memory allocation fails
- nss: fix nssckbi module loading on Windows
- nss: try to connect even if libnssckbi.so fails to load
- ntlm_wb: Fix memory leaks in ntlm_wb_response
- ntlm_wb: bail out if the response gets overly large
- openssl: assume engine support in 0.9.8 or later
- openssl: enable TLS 1.3 post-handshake auth
- openssl: fix gcc8 warning
- openssl: load built-in engines too
- openssl: make `done` a proper boolean
- openssl: output the correct cipher list on TLS 1.3 error
- openssl: return CURLE_PEER_FAILED_VERIFICATION on failure to parse issuer
- openssl: show "proper" version number for libressl builds
- pipelining: deprecated
- rand: add comment to skip a clang-tidy false positive
- rtmp: fix for compiling with lwIP
- runtests: ignore disabled even when ranges are given
- runtests: skip ld_preload tests on macOS
- runtests: use Windows paths for Windows curl
- schannel: unified error code handling
- sendf: Fix whitespace in infof/failf concatenation
- ssh: free the session on init failures
- ssl: deprecate CURLE_SSL_CACERT in favor of a unified error code
- system.h: use proper setting with Sun C++ as well
- test1299: use single quotes around asterisk
- test1452: mark as flaky
- test1651: unit test Curl_extract_certinfo()
- test320: strip out more HTML when comparing
- tests/negtelnetserver.py: fix Python2-ism in neg TELNET server
- tests: add unit tests for url.c
- timeval: fix use of weak symbol clock_gettime() on Apple platforms
- tool_cb_hdr: handle failure of rename()
- travis: add a "make tidy" build that runs clang-tidy
- travis: add build for "configure --disable-verbose"
- travis: bump the Secure Transport build to use xcode
- travis: make distcheck scan for BOM markers
- unit1300: fix stack-use-after-scope AddressSanitizer warning
- urldata: Fix "connecting" comment
- urlglob: improve error message on bad globs
- vtls: fix ssl version "or later" behavior change for many backends
- x509asn1: Fix SAN IP address verification
- x509asn1: always check return code from getASN1Element()
- x509asn1: return CURLE_PEER_FAILED_VERIFICATION on failure to parse cert
- x509asn1: suppress left shift on signed value

## Fixed in 7.61.1 - September 5 2018

7.61.1
7.61.1 changes only

Bugfixes:

- security advisory (CVE-2018-14618): NTLM password overflow via integer overflow
- CURLINFO_SIZE_UPLOAD: fix missing counter update
- CURLOPT_ACCEPT_ENCODING.3: list them comma-separated
- CURLOPT_SSL_CTX_FUNCTION.3: might cause accidental connection reuse
- Curl_getoff_all_pipelines: improved for multiplexed
- DEPRECATE: remove release date from 7.62.0
- HTTP: do not attempt to needlessly decompress redirect body
- INTERNALS: require GnuTLS >= 2.11.3
- README.md: add LGTM.com code quality grade for C/C++
- SSLCERTS: improve the openssl command line
- Silence GCC 8 cast-function-type warnings
- ares: check for NULL in completed-callback
- asyn-thread: Remove unused macro
- auth: only pick CURLAUTH_BEARER if we *have* a Bearer token
- auth: pick Bearer authentication whenever a token is available
- cmake: CMake config files are defining CURL_STATICLIB for static builds
- cmake: Respect BUILD_SHARED_LIBS
- cmake: Update scripts to use consistent style
- cmake: bumped minimum version to 3.4
- cmake: link curl to the OpenSSL targets instead of lib absolute paths
- configure: conditionally enable pedantic-errors
- configure: fix for -lpthread detection with OpenSSL and pkg-config
- conn: remove the boolean `inuse` field
- content_encoding: accept up to 4 unknown trailer bytes after raw deflate data
- cookie tests: treat files as text
- cookies: support creation-time attribute for cookies
- curl: Fix segfault when -H @headerfile is empty
- curl: add http code 408 to transient list for --retry
- curl: fix time-of-check, time-of-use race in directory creation
- curl: use Content-Disposition before the "URL end" for -OJ
- curl: warn the user if a given filename looks like an option
- curl_threads: silence bad-function-cast warning
- darwinssl: add support for ALPN negotiation
- docs/CURLOPT_URL: fix indentation
- docs/CURLOPT_WRITEFUNCTION: size is always 1
- docs/SECURITY-PROCESS: mention bounty, drop pre-notify
- docs/examples: add hiperfifo example using linux epoll/timerfd
- docs: add disallow-username-in-url.d and haproxy-protocol.d to dist
- docs: clarify NO_PROXY env variable functionality
- docs: improved the manual pages of some callbacks
- docs: mention NULL is fine input to several functions
- formdata: Remove unused macro HTTPPOST_CONTENTTYPE_DEFAULT
- gopher: Do not translate `?` to `%09`
- header output: switch off all styles, not only unbold
- hostip: fix unused variable warning
- http2: Use correct format identifier for stream_id
- http2: abort the send_callback if not setup yet
- http2: avoid set_stream_user_data() before stream is assigned
- http2: check nghttp2_session_set_stream_user_data return code
- http2: clear the drain counter in Curl_http2_done
- http2: make sure to send after RST_STREAM
- http2: separate easy handle from connections better
- http: fix for tiny "HTTP/0.9" response
- http_proxy: Remove unused macro SELECT_TIMEOUT
- lib/Makefile: only do symbol hiding if told to
- lib1502: fix memory leak in torture test
- lib1522: fix curl_easy_setopt argument type
- libcurl-thread.3: expand somewhat on the NO_SIGNAL motivation
- mime: check Curl_rand_hex's return code
- multi: always do the COMPLETED procedure/state
- openssl: assume engine support in 1.0.0 or later
- openssl: fix debug messages
- projects: Improve Windows perl detection in batch scripts
- retry: return error if rewind was necessary but did not happen
- reuse_conn(): memory leak - free old_conn->options
- schannel: client certificate store opening fix
- schannel: enable CALG_TLS1PRF for w32api >= 5.1
- schannel: fix MinGW compile break
- sftp: do not send post-quote sequence when retrying a connection
- smb: fix memory leak on early failure
- smb: fix memory-leak in URL parse error path
- smb_getsock: always wait for write socket too
- ssh-libssh: fix infinite connect loop on invalid private key
- ssh-libssh: reduce excessive verbose output about pubkey auth
- ssh-libssh: use FALLTHROUGH to silence gcc8
- ssl: set engine implicitly when a PKCS#11 URI is provided
- sws: handle EINTR when calling select()
- system_win32: fix version checking
- telnet: Remove unused macros TELOPTS and TELCMDS
- test1143: disable MSYS2's POSIX path conversion
- test1148: disable if decimal separator is not point
- test1307: (fnmatch testing) disabled
- test1422: add required file feature
- test1531: Add timeout
- test1540: Remove unused macro TEST_HANG_TIMEOUT
- test214: disable MSYS2's POSIX path conversion for URL
- test320: treat curl320.out file as binary
- tests/http_pipe.py: Use /usr/bin/env to find python
- tests: do not use Windows path %PWD for SSH tests
- tests: fixes for Windows line endlings
- tool_operate: Fix setting proxy TLS 1.3 ciphers
- travis: build darwinssl on macos 10.12 to fix linker errors
- travis: execute "set -eo pipefail" for coverage build
- travis: run a `make checksrc` too
- travis: update to GCC-8
- travis: verify that man pages can be regenerated
- upload: allocate upload buffer on-demand
- upload: change default UPLOAD_BUFSIZE to 64KB
- urldata: remove unused pipe_broke struct field
- vtls: reinstantiate engine on duplicated handles
- windows: implement send buffer tuning
- wolfSSL/CyaSSL: Fix memory leak in Curl_cyassl_random

## Fixed in 7.61.0 - July 11 2018

7.61.0
7.61.0 changes only

Changes:

- getinfo: add microsecond precise timers for seven intervals
- curl: show headers in bold, switch off with --no-styled-output
- httpauth: add support for Bearer tokens
- Add CURLOPT_TLS13_CIPHERS and CURLOPT_PROXY_TLS13_CIPHERS
- curl: --tls13-ciphers and --proxy-tls13-ciphers
- Add CURLOPT_DISALLOW_USERNAME_IN_URL
- curl: --disallow-username-in-url

Bugfixes:

- CVE-2018-0500: smtp: fix SMTP send buffer overflow
- schannel: disable client cert option if APIs not available
- schannel: disable manual verify if APIs not available
- tests/libtest/Makefile: Do not unconditionally add gcc-specific flags
- openssl: acknowledge --tls-max for default version too
- stub_gssapi: fix `unused parameter` warnings
- examples/progressfunc: make it build on both new and old libcurls
- docs: mention it is HA Proxy protocol "version 1"
- curl_fnmatch: only allow two asterisks for matching
- docs: clarify CURLOPT_HTTPGET
- configure: replace a AC_TRY_RUN with CURL_RUN_IFELSE
- configure: do compile-time SIZEOF checks instead of runtime
- checksrc: make sure sizeof() is used *with* parentheses
- CURLOPT_ACCEPT_ENCODING.3: add brotli and clarify a bit
- schannel: make CAinfo parsing resilient to CR/LF
- tftp: make sure error is null-terminated before printfing it
- http resume: skip body if http code 416 (range error) is ignored
- configure: add basic test of --with-ssl prefix
- cmake: set -d postfix for debug builds
- multi: provide a socket to wait for in Curl_protocol_getsock
- content_encoding: handle zlib versions too old for Z_BLOCK
- winbuild: only delete OUTFILE if it exists
- winbuild: In MakefileBuild.vc fix typo DISTDIR->DIRDIST
- schannel: add failf calls for client certificate failures
- cmake: Fix the test for fsetxattr and strerror_r
- curl.1: Fix cmdline-opts reference errors
- cmdline-opts/gen.pl: warn if mutexes: or see-also: list non-existing options
- cmake: check for getpwuid_r
- configure: fix ssh2 linking when built with a static mbedtls
- psl: use latest psl and refresh it periodically
- fnmatch: insist on escaped bracket to match
- KNOWN_BUGS: restore text regarding #2101
- INSTALL: LDFLAGS=-Wl,-R/usr/local/ssl/lib
- configure: override AR_FLAGS to silence warning
- os400: implement mime api EBCDIC wrappers
- curl.rc: embed manifest for correct Windows version detection
- strictness: correct {infof, failf} format specifiers
- tests: update .gitignore for libtests
- configure: check for declaration of getpwuid_r
- fnmatch: use the system one if available
- CURLOPT_RESOLVE: always purge old entry first
- multi: remove a potentially bad DEBUGF()
- curl_addrinfo: use same #ifdef conditions in source as header
- build: remove the Borland specific makefiles
- axTLS: not considered fit for use
- cmdline-opts/cert-type.d: mention "p12" as a recognized type
- system.h: add support for IBM xlc C compiler
- tests/libtest: Add lib1521 to nodist_SOURCES
- mk-ca-bundle.pl: leave certificate name untouched
- boringssl + schannel: undef X509_NAME in lib/schannel.h
- openssl: assume engine support in 1.0.1 or later
- cppcheck: fix warnings
- test 46: make test pass after year 2025
- schannel: support selecting ciphers
- Curl_debug: remove dead printhost code
- test 1455: unflakified
- Curl_init_do: handle NULL connection pointer passed in
- progress: remove a set of unused defines
- mk-ca-bundle.pl: make -u delete certdata.txt if found not changed
- GOVERNANCE.md: explains how this project is run
- configure: use pkg-config for c-ares detection
- configure: enhance ability to build with static openssl
- maketgz: fix sed issues on OSX
- multi: fix memory leak when stopped during name resolve
- CURLOPT_INTERFACE.3: interface names not supported on Windows
- url: fix dangling conn->data pointer
- cmake: allow multiple SSL backends
- system.h: fix for gcc on 32-bit OpenServer
- ConnectionExists: make sure conn->data is set when "taking" a connection
- multi: fix crash due to dangling entry in connect-pending list
- CURLOPT_SSL_VERIFYPEER.3: Add performance note
- netrc: use a larger buffer to support longer passwords
- url: check Curl_conncache_add_conn return code
- configure: Add dependent libraries after crypto
- easy_perform: faster local name resolves by using *multi_timeout()
- getnameinfo: not used, removed all configure checks
- travis: add a build using the synchronous name resolver
- CURLINFO_TLS_SSL_PTR.3: improve the example
- openssl: allow TLS 1.3 by default
- openssl: make the requested TLS version the *minimum* wanted
- openssl: Remove some dead code
- telnet: fix clang warnings
- DEPRECATE: new doc describing planned item removals
- example/crawler.c: simple crawler based on libxml2
- libssh: goto DISCONNECT state on error, not SESSION_FREE
- CMake: Remove unused functions
- darwinssl: allow High Sierra users to build the code using GCC
- scripts: include _curl as part of CLEANFILES

## Fixed in 7.60.0 - May 16 2018

7.60.0
7.60.0 changes only

Changes:

- Add CURLOPT_HAPROXYPROTOCOL, support for the HAProxy PROXY protocol
- Add --haproxy-protocol for the command line tool
- Add CURLOPT_DNS_SHUFFLE_ADDRESSES, shuffle returned IP addresses

Bugfixes:

- FTP: shutdown response buffer overflow CVE-2018-1000300
- RTSP: bad headers buffer over-read CVE-2018-1000301
- FTP: fix typo in recursive callback detection for seeking
- test1208: marked flaky
- HTTP: make header-less responses still count correct body size
- user-agent.d:: mention --proxy-header as well
- http2: fixes typo
- cleanup: misc typos in strings and comments
- rate-limit: use three second window to better handle high speeds
- examples/hiperfifo.c: improved
- pause: when changing pause state, update socket state
- multi: improved pending transfers handling => improved performance
- curl_version_info.3: fix ssl_version description
- add_handle/easy_perform: clear errorbuffer on start if set
- darwinssl: fix iOS build
- cmake: add support for brotli
- parsedate: support UT timezone
- vauth/ntlm.h: fix the #ifdef header guard
- lib/curl_path.h: added #ifdef header guard
- vauth/cleartext: fix integer overflow check
- CURLINFO_COOKIELIST.3: made the example not leak memory
- cookie.d: mention that "-" as filename means stdin
- CURLINFO_SSL_VERIFYRESULT.3: fixed the example
- http2: read pending frames (including GOAWAY) in connection-check
- timeval: remove compilation warning by casting
- cmake: avoid warn-as-error during config checks
- travis-ci: enable -Werror for CMake builds
- openldap: fix for NULL return from ldap_get_attribute_ber()
- threaded resolver: track resolver time and set suitable timeout values
- cmake: Add advapi32 as explicit link library for win32
- docs: fix CURLINFO_*_T examples use of CURL_FORMAT_CURL_OFF_T
- test1148: set a fixed locale for the test
- cookies: when reading from a file, only remove_expired once
- cookie: store cookies per top-level-domain-specific hash table
- openssl: fix build with LibreSSL 2.7
- tls: fix mbedTLS 2.7.0 build + handle sha256 failures
- openssl: RESTORED verify locations when verifypeer==0
- file: restore old behavior for file:////foo/bar URLs
- FTP: allow PASV on IPv6 connections when a proxy is being used
- build-openssl.bat: allow custom paths for VS and perl
- winbuild: make the clean target work without build-type
- build-openssl.bat: Refer to VS2017 as VC14.1 instead of VC15
- curl: retry on FTP 4xx, ignore other protocols
- configure: detect (and use) sa_family_t
- examples/sftpuploadresume: Fix Windows large file seek
- build: cleanup to fix clang warnings/errors
- winbuild: updated the documentation
- lib: silence null-dereference warnings
- travis: bump to clang 6 and gcc 7
- travis: build libpsl and make builds use it
- proxy: show getenv proxy use in verbose output
- duphandle: make sure CURLOPT_RESOLVE is duplicated
- all: Refactor malloc+memset to use calloc
- checksrc: Fix typo
- system.h: Add sparcv8plus to oracle/sunpro 32-bit detection
- vauth: Fix typo
- ssh: show libSSH2 error code when closing fails
- test1148: tolerate progress updates better
- urldata: make service names unconditional
- configure: keep LD_LIBRARY_PATH changes local
- ntlm_sspi: fix authentication using Credential Manager
- schannel: add client certificate authentication
- winbuild: Support custom devel paths for each dependency
- schannel: add support for CURLOPT_CAINFO
- http2: handle on_begin_headers() called more than once
- openssl: support OpenSSL 1.1.1 verbose-mode trace messages
- openssl: fix subjectAltName check on non-ASCII platforms
- http2: avoid strstr() on data not null-terminated
- http2: clear the "drain counter" when a stream is closed
- http2: handle GOAWAY properly
- tool_help: clarify --max-time unit of time is seconds
- curl.1: clarify that options and URLs can be mixed
- http2: convert an assert to runtime check
- curl_global_sslset: always provide available backends
- ftplistparser: keep state between invokes
- Curl_memchr: zero length input cannot match
- examples/sftpuploadresume: typecast fseek argument to long
- examples/http2-upload: expand buffer to avoid silly warning
- ctype: restore character classification for non-ASCII platforms
- mime: avoid NULL pointer dereference risk
- cookies: ensure that we have cookies before writing jar
- os400.c: fix checksrc warnings
- configure: provide --with-wolfssl as an alias for --with-cyassl
- cyassl: adapt to libraries without TLS 1.0 support built-in
- http2: get rid of another strstr
- checksrc: force indentation of lines after an else
- cookies: remove unused macro
- CURLINFO_PROTOCOL.3: mention the existing defined names
- tests: provide `manual` as a feature to optionally require
- travis: enable libssh2 on both macos and Linux
- CURLOPT_URL.3: added ENCODING section
- wolfssl: Fix non-blocking connect
- vtls: do not define MD5_DIGEST_LENGTH for wolfssl
- docs: remove extraneous commas in man pages
- URL: fix ASCII dependency in strcpy_url and strlen_url
- ssh-libssh.c: fix left shift compiler warning
- configure: only check for CA bundle for file-using SSL backends
- travis: add an mbedtls build
- http: do not set the "rewind" flag when not uploading anything
- configure: put CURLDEBUG and DEBUGBUILD in lib/curl_config.h
- transfer: do not unset writesockfd on setup of multiplexed conns
- vtls: use unified "supports" bitfield member in backends
- URLs: fix one more http URL
- travis: add a build using WolfSSL
- openssl: change FILE ops to BIO ops
- travis: add build using NSS
- smb: reject negative file sizes
- cookies: accept parameter names as cookie name
- http2: getsock fix for uploads
- all over: fixed format specifiers
- http2: use the correct function pointer typedef

## Fixed in 7.59.0 - March 14 2018

7.59.0
7.59.0 changes only

Changes:

- curl: add --proxy-pinnedpubkey
- added: CURLOPT_TIMEVALUE_LARGE and CURLINFO_FILETIME_T
- CURLOPT_RESOLVE: Add support for multiple IP addresses per entry
- Add option CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS
- Add new tool option --happy-eyeballs-timeout-ms
- Add CURLOPT_RESOLVER_START_FUNCTION and CURLOPT_RESOLVER_START_DATA

Bugfixes:

- openldap: check ldap_get_attribute_ber() results for NULL before using
- FTP: reject path components with control codes
- readwrite: make sure excess reads do not go beyond buffer end
- lib555: drop text conversion and encode data as ascii codes
- lib517: make variable static to avoid compiler warning
- lib544: sync ascii code data with textual data
- GSKit: restore pinnedpubkey functionality
- darwinssl: do not import client certificates into Keychain on macOS
- parsedate: fix date parsing for systems with 32-bit long
- openssl: fix pinned public key build error in FIPS mode
- SChannel/WinSSL: Implement public key pinning
- cookies: remove verbose "cookie size:" output
- progress-bar: do not use stderr explicitly, use bar->out
- Fixes for MSDOS
- build: open VC15 projects with VS 2017
- curl_ctype: private is*() type macros and functions
- configure: set PATH_SEPARATOR to colon for PATH w/o separator
- winbuild: make linker generate proper PDB
- curl_easy_reset: clear digest auth state
- curl/curl.h: fix comment typo for CURLOPT_DNS_LOCAL_IP6
- range: commonize FTP and FILE range handling
- progress-bar docs: update to match implementation
- fnmatch: do not match the empty string with a character set
- fnmatch: accept an alphanum to be followed by a non-alphanum in char set
- build: fix termios issue on android cross-compile
- getdate: return -1 for out of range
- formdata: use the mime-content type function
- time-cond: fix reading the file modification time on Windows
- build-openssl.bat: Extend VC15 support to include Enterprise and Professional
- build-wolfssl.bat: Extend VC15 support to include Enterprise and Professional
- openssl: do not add verify locations when verifypeer==0
- fnmatch: optimize processing of consecutive *s and ?s pattern characters
- schannel: fix compiler warnings
- content_encoding: Add "none" alias to "identity"
- get_posix_time: only check for overflows if they can happen
- http_chunks: do not write chunks twice with CURLOPT_HTTP_TRANSFER_DECODING
- README: language fix
- sha256: build with OpenSSL < 0.9.8
- smtp: fix processing of initial dot in data
- --tlsauthtype: works only if libcurl is built with TLS-SRP support
- tests: new tests for http raw mode
- libcurl-security.3: man page discussion security concerns when using libcurl
- curl_gssapi: make sure this file too uses our *printf()
- BINDINGS: fix curb link (and remove ruby-curl-multi)
- nss: use PK11_CreateManagedGenericObject() if available
- travis: add build with iconv enabled
- ssh: add two missing state names
- CURLOPT_HEADERFUNCTION.3: mention folded headers
- http: fix the max header length detection logic
- header callback: do not chop headers into smaller pieces
- CURLOPT_HEADER.3: clarify problems with different data sizes
- curl --version: show PSL if the runtime lib has it enabled
- examples/sftpuploadresume: resume upload via CURLOPT_APPEND
- Return error if called recursively from within callbacks
- sasl: prefer PLAIN mechanism over LOGIN
- winbuild: Use CALL to run batch scripts
- curl_share_setopt.3: connection cache is shared within multi handles
- winbuild: Use macros for the names of some build utilities
- projects/README: remove reference to dead IDN link/package
- lib655: silence compiler warning
- configure: Fix version check for OpenSSL 1.1.1
- docs/MANUAL: formfind.pl is not accessible on the site anymore
- unit1309: fix warning on Windows x64
- unit1307: proper cleanup on OOM to fix torture tests
- curl_ctype: fix macro redefinition warnings
- build: get CFLAGS (including -werror) used for examples and tests
- NO_PROXY: fix for IPv6 numericals in the URL
- krb5: use nondeprecated functions
- winbuild: prefer documented zlib library names
- http2: mark the connection for close on GOAWAY
- limit-rate: kick in even before "limit" data has been received
- HTTP: allow "header;" to replace an internal header with a blank one
- http2: verbose output new MAX_CONCURRENT_STREAMS values
- SECURITY: distros' max embargo time is 14 days
- curl tool: accept --compressed also if Brotli is enabled and zlib is not
- WolfSSL: adding TLSv1.3
- checksrc.pl: add -i and -m options
- CURLOPT_COOKIEFILE.3: "-" as filename means stdin

## Fixed in 7.58.0 - January 24 2018

7.58.0
7.58.0 changes only

Changes:

- new libssh-powered SSH SCP/SFTP backend
- curl-config: add --ssl-backends

Bugfixes:

- http2: fix incorrect trailer buffer size
- http: prevent custom Authorization headers in redirects
- travis: add boringssl build
- examples/xmlstream.c: do not switch off CURL_GLOBAL_SSL
- SSL: Avoid magic allocation of SSL backend specific data
- lib: do not export all symbols, only everything curl_*
- libssh2: send the correct CURLE error code on scp file not found
- libssh2: return CURLE_UPLOAD_FAILED on failure to upload
- openssl: enable pkcs12 in boringssl builds
- libssh2: remove dead code from SSH_SFTP_QUOTE
- sasl_getmessage: make sure we have a long enough string to pass
- conncache: fix several lock issues
- threaded-shared-conn.c: new example
- conncache: only allow multiplexing within same multi handle
- configure: check for netinet/in6.h
- URL: tolerate backslash after drive letter for FILE:
- openldap: add commented out debug possibilities
- include: get netinet/in.h before linux/tcp.h
- CONNECT: keep close connection flag in http_connect_state struct
- BINDINGS: another PostgreSQL client
- curl: limit -# update frequency for unknown total size
- configure: add AX_CODE_COVERAGE only if using gcc
- curl.h: remove incorrect comment about ERRORBUFFER
- openssl: improve data-pending check for https proxy
- curl: remove __EMX__ #ifdefs
- CURLOPT_PRIVATE.3: fix grammar
- sftp: allow quoted commands to use relative paths
- CURLOPT_DNS_CACHE_TIMEOUT.3: see also CURLOPT_RESOLVE
- RESOLVE: output verbose text when trying to set a duplicate name
- openssl: Disable file buffering for Win32 SSLKEYLOGFILE
- multi_done: prune DNS cache
- tests: update .gitignore for libtests
- tests: mark data files as non-executable in git
- CURLOPT_DNS_LOCAL_IP4.3: fixed the "SEE ALSO" to not self-reference
- curl.1: documented two missing valid exit codes
- curl.1: mention http:// and https:// as valid proxy prefixes
- vtls: replaced getenv() with curl_getenv()
- setopt: less *or equal* than INT_MAX/1000 should be fine
- examples/smtp-mail.c: use separate defines for options and mail
- curl: support >256 bytes warning messages
- conncache: fix a return code
- krb5: fix a potential access of uninitialized memory
- rand: add a clang-analyzer work-around
- CURLOPT_READFUNCTION.3: refer to argument with correct name
- brotli: allow compiling with version 0.6.0
- content_encoding: rework zlib_inflate
- curl_easy_reset: release mime-related data
- examples/rtsp: fix error handling macros
- build-openssl.bat: Added support for VC15
- build-wolfssl.bat: Added support for VC15
- build: Added Visual Studio 2017 project files
- winbuild: Added support for VC15
- curl: Support size modifiers for --max-filesize
- examples/cacertinmem: ignore cert-already-exists error
- brotli: data at the end of content can be lost
- curl_version_info.3: call the argument `age`
- openssl: fix memory leak of SSLKEYLOGFILE filename
- build: remove HAVE_LIMITS_H check
- --mail-rcpt: fix short-text description
- scripts: allow all perl scripts to be run directly
- progress: calculate transfer speed on milliseconds if possible
- system.h: check __LONG_MAX__ for defining curl_off_t
- easy: fix connection ownership in curl_easy_pause
- setopt: reintroduce non-static Curl_vsetopt() for OS400 support
- setopt: fix SSLVERSION to allow CURL_SSLVERSION_MAX_ values
- configure.ac: append extra linker flags instead of prepending them
- HTTP: bail out on negative Content-Length: values
- docs: comment about CURLE_READ_ERROR returned by curl_mime_filedata
- mime: clone mime tree upon easy handle duplication
- openssl: enable SSLKEYLOGFILE support by default
- smtp/pop3/imap_get_message: decrease the data length too...
- CURLOPT_TCP_NODELAY.3: fix typo
- SMB: fix numeric constant suffix and variable types
- ftp-wildcard: fix matching an empty string with "*[^a]"
- curl_fnmatch: only allow 5 `*&` sections in a single pattern
- openssl: fix potential memory leak in SSLKEYLOGFILE logic
- SSH: Fix state machine for ssh-agent authentication
- examples/url2file.c: add missing curl_global_cleanup() call
- http2: do not close connection when single transfer is stopped
- libcurl-env.3: first version
- curl: progress bar refresh, get width using ioctl()
- CONNECT_TO: fail attempt to set an IPv6 numerical without IPv6 support

## Fixed in 7.57.0 - November 29 2017

7.57.0
7.57.0 changes only

Changes:

- auth: add support for RFC7616 - HTTP Digest access authentication
- share: add support for sharing the connection cache
- HTTP: implement Brotli content encoding

Bugfixes:

- CVE-2017-8816: NTLM buffer overflow via integer overflow
- CVE-2017-8817: FTP wildcard out of bounds read
- CVE-2017-8818: SSL out of buffer access
- curl_mime_filedata.3: fix typos
- libtest: Add required test libraries for lib1552 and lib1553
- fix time diffs for systems using unsigned time_t
- ftplistparser: memory leak fix: free temporary memory always
- multi: allow table handle sizes to be overridden
- wildcards: do not use with non-supported protocols
- curl_fnmatch: return error on illegal wildcard pattern
- transfer: Fix chunked-encoding upload too early exit
- curl_setup: Improve detection of CURL_WINDOWS_APP
- resolvers: only include anything if needed
- setopt: fix CURLOPT_SSH_AUTH_TYPES option read
- appveyor: add a win32 build
- Curl_timeleft: change return type to timediff_t
- cmake: Export libcurl and curl targets to use by other cmake projects
- curl: in -F option arg, comma is a delimiter for files only
- curl: improved ";type=" handling in -F option arguments
- timeval: use mach_absolute_time() on MacOS
- curlx: the timeval functions are no longer provided as curlx_*
- mkhelp.pl: do not generate comment with current date
- memdebug: use send/recv signature for curl_dosend/curl_dorecv
- cookie: avoid NULL dereference
- url: fix CURLOPT_POSTFIELDSIZE arg value check to allow -1
- include: remove conncache.h inclusion from where its not needed
- CURLOPT_MAXREDIRS: allow -1 as a value
- tests: Fixed torture tests on tests 556 and 650
- http2: Fixed OOM handling in upgrade request
- url: fix CURLOPT_DNS_CACHE_TIMEOUT arg value check to allow -1
- CURLOPT_INFILESIZE: accept -1
- curl: pass through [] in URLs instead of calling globbing error
- curl: speed up handling of many URLs
- ntlm: avoid malloc(0) for zero length passwords
- url: remove faulty arg value check from CURLOPT_SSH_AUTH_TYPES
- HTTP: support multiple Content-Encodings
- travis: add a job with brotli enabled
- url: remove unnecessary NULL-check
- fnmatch: remove dead code
- connect: store IPv6 connection status after valid connection
- imap: deal with commands case insensitively
- --interface: add support for Linux VRF
- content_encoding: fix inflate_stream for no bytes available
- cmake: Correctly include curl.rc in Windows builds
- cmake: Add missing setmode check
- connect.c: remove executable bit on file
- SMB: fix uninitialized local variable
- zlib/brotli: only include header files in modules needing them
- URL: return error on malformed URLs with junk after IPv6 bracket
- openssl: fix too broad use of HAVE_OPAQUE_EVP_PKEY
- macOS: Fix missing connectx function with Xcode version older than 9.0
- --resolve: allow IP address within [] brackets
- examples/curlx: Fix code style
- ntlm: remove unnecessary NULL-check to please scan-build
- Curl_llist_remove: fix potential NULL pointer deref
- mime: fix "Value stored to `sz` is never read" scan-build error
- openssl: fix "Value stored to `rc` is never read" scan-build error
- http2: fix "Value stored to `hdbuf` is never read" scan-build error
- http2: fix "Value stored to `end` is never read" scan-build error
- Curl_open: fix OOM return error correctly
- url: reject ASCII control characters and space in hostnames
- examples/rtsp: clear RANGE again after use
- connect: improve the bind error message
- make: fix "make distclean"
- connect: add support for new TCP Fast Open API on Linux
- metalink: fix memory-leak and NULL pointer dereference
- URL: update "file:" URL handling
- ssh: remove check for a NULL pointer
- global_init: ignore CURL_GLOBAL_SSL's absence

## Fixed in 7.56.1 - October 23 2017

7.56.1
7.56.1 changes only

Bugfixes:

- imap: if a FETCH response has no size, do not call write callback
- ftp: UBsan fixup pointer index expression overflowed
- failf: skip the sprintf() if there are no consumers
- fuzzer: move to using external curl-fuzzer
- lib/Makefile.m32: allow customizing dll suffixes
- docs: fix typo in curl_mime_data_cb man page
- darwinssl: add support for TLSv1.3
- build: fix --disable-crypto-auth
- lib/config-win32.h: let SMB/SMBS be enabled with OpenSSL/NSS
- openssl: fix build without HAVE_OPAQUE_EVP_PKEY
- strtoofft: Remove extraneous null check
- multi_cleanup: call DONE on handles that never got that
- tests: added flaky keyword to tests 587 and 644
- pingpong: return error when trying to send without connection
- remove_handle: call multi_done() first, then clear dns cache pointer
- mime: be tolerant about setting the same header list twice in a part
- mime: improve unbinding top multipart from easy handle
- mime: avoid resetting a part's encoder when part's contents change
- mime: refuse to add subparts to one of their own descendants
- RTSP: avoid integer overflow on funny RTSP responses
- curl: do not pass semicolons when parsing Content-Disposition
- openssl: enable PKCS12 support for !BoringSSL
- FAQ: s/CURLOPT_PROGRESSFUNCTION/CURLOPT_XFERINFOFUNCTION
- CURLOPT_NOPROGRESS.3: also refer to xferinfofunction
- CURLOPT_XFERINFODATA.3: fix duplicate see also
- test298: verify --ftp-method nowcwd with URL encoded path
- FTP: URL decode path for directory listing in nocwd mode
- smtp_done: fix memory leak on send failure
- ftpserver: support case insensitive commands
- test950; verify SMTP with custom request
- openssl: do not use old BORINGSSL_YYYYMM macros
- setopt: update current connection SSL verify params
- winbuild/BUILD.WINDOWS.txt: mention WITH_NGHTTP2
- curl: reimplement stdin buffering in -F option
- mime: keep "text/plain" content type if user-specified
- mime: fix the content reader to handle >16K data properly
- configure: remove the C++ compiler check
- memdebug: trace send, recv and socket
- runtests: use valgrind for torture as well
- ldap: silence clang warning
- makefile.m32: allow to override gcc, ar and ranlib
- setopt: avoid integer overflows when setting millisecond values
- setopt: range check most long options
- ftp: reject illegal IP/port in PASV 227 response
- mime: do not reuse previously computed multipart size
- vtls: change struct Curl_ssl `close` field name to `close_one`
- os400: add missing symbols in config file
- mime: limit bas64-encoded lines length to 76 characters
- mk-ca-bundle: Remove URL for aurora
- mk-ca-bundle: Fix URL for NSS

## Fixed in 7.56.0 - October 4 2017

7.56.0
7.56.0 changes only

Changes:

- curl: enable compression for SCP/SFTP with --compressed-ssh
- libcurl: enable compression for SCP/SFTP with CURLOPT_SSH_COMPRESSION
- vtls: added dynamic changing SSL backend with curl_global_sslset()
- new MIME API, curl_mime_init() and friends
- openssl: initial SSLKEYLOGFILE implementation

Bugfixes:

- FTP: null-terminate the entry path even on bad input
- examples/ftpuploadresume.c: use portable code
- runtests: match keywords case insensitively
- travis: build the examples too
- strtoofft: reduce integer overflow risks globally
- zsh.pl: produce a working completion script again
- cmake: remove dead code for CURL_DISABLE_RTMP
- progress: Track total times following redirects
- configure: fix --disable-threaded-resolver
- cmake: remove dead code for DISABLED_THREADSAFE
- configure: fix clang version detection
- darwinssi: fix error: variable length array used
- travis: add metalink to some osx builds
- configure: check for __builtin_available() availability
- http_proxy: fix build error for CURL_DOES_CONVERSIONS
- examples/ftpuploadresume: checksrc compliance
- ftp: fix CWD when doing multicwd then nocwd on same connection
- system.h: remove all CURL_SIZEOF_* defines
- http: do not wait on CONNECT when there is no proxy
- system.h: check for __ppc__ as well
- http2_recv: return error better on fatal h2 errors
- scripts/contri*sh: use "git log --use-mailmap"
- tftp: fix memory leak on too long filename
- system.h: fix build for hppa
- cmake: enable picky compiler options with clang and gcc
- makefile.m32: add support for libidn2
- curl: turn off MinGW CRT's globbing
- request-target.d: mention added in 7.55.0
- curl: shorten and clean up CA cert verification error message
- imap: support PREAUTH
- CURLOPT_USERPWD.3: see also CURLOPT_PROXYUSERPWD
- examples/threaded-ssl: mention that this is for openssl before 1.1
- winbuild: fix embedded manifest option
- tests: Make sure libtests & unittests call curl_global_cleanup()
- system.h: include sys/poll.h for AIX
- darwinssl: handle long strings in TLS certs
- strtooff: fix build for systems with long long but no strtoll
- asyn-thread: Improved cleanup after OOM situations
- HELP-US.md: "How to get started helping out in the curl project"
- curl.h: CURLSSLBACKEND_WOLFSSL used wrong value
- unit1301: fix error message on first test
- ossfuzz: moving towards the ideal integration
- http: fix a memory leakage in checkrtspprefix()
- examples/post-callback: stop returning one byte at a time
- schannel: return CURLE_SSL_CACERT on failed verification
- MAIL-ETIQUETTE: added "1.9 Your emails are public"
- http-proxy: treat all 2xx as CONNECT success
- openssl: use OpenSSL's default ciphers by default
- runtests.pl: support attribute "nonewline" in part verify/upload
- configure: remove --enable-soname-bump and SONAME_BUMP
- travis: add c-ares enabled builds linux + osx
- vtls: fix WolfSSL 3.12 build problems
- http-proxy: when not doing CONNECT, that phase is done immediately
- configure: fix curl_off_t check's include order
- configure: use -Wno-varargs on clang 3.9[.X] debug builds
- rtsp: do not call fwrite() with NULL pointer FILE *
- mbedtls: enable CA path processing
- travis: add build without HTTP/SMTP/IMAP
- checksrc: verify more code style rules
- HTTP proxy: on connection reuse, still use the new remote port
- tests: add initial gssapi test using stub implementation
- rtsp: Segfault when using WRITEDATA
- docs: clarify the CURLOPT_INTERLEAVE* options behavior
- non-ascii: use iconv() with `char **` argument
- server/getpart: provide dummy function to build conversion enabled
- conversions: fix several compiler warnings
- openssl: add missing includes
- schannel: Support partial send for when data is too large
- socks: fix incorrect port number in SOCKS4 error message
- curl: fix integer overflow in timeout options
- travis: on mac, do not install openssl or libidn
- cookies: reject oversized cookies instead of truncating
- cookies: use lock when using CURLINFO_COOKIELIST
- curl: check fseek() return code and bail on error
- examples/post-callback: use long for CURLOPT_POSTFIELDSIZE
- openssl: only verify RSA private key if supported
- tests: make the imap server not verify user+password
- imap: quote atoms properly when escaping characters
- tests: fix a compiler warning in test 643
- file_range: avoid integer overflow when figuring out byte range
- curl.h: include <sys/select.h> on cygwin too
- reuse_conn: do not copy flags that are known to be equal
- http: fix adding custom empty headers to repeated requests
- docs: clarify the use of environment variables for proxy
- docs: link CURLOPT_CONNECTTIMEOUT and CURLOPT_CONNECTTIMEOUT_MS
- connect: fix race condition with happy eyeballs timeout
- cookie: fix memory leak if path was set twice in header
- vtls: compare and clone ssl configs properly
- proxy: read the "no_proxy" variable only if necessary

## Fixed in 7.55.1 - August 14 2017

7.55.1
7.55.1 changes only

Bugfixes:

- build: fix `make install` with configure, install docs/libcurl/* too
- make install: add 8 missing man pages to the installation
- curl: do bounds check using a double comparison
- dist: Add dictserver.py/negtelnetserver.py to release
- digest_sspi: do not reuse context if the user/passwd has changed
- gitignore: ignore top-level .vs folder
- build: check out *.sln files with Windows line endings
- travis: verify "make install"
- dist: fix the cmake build by shipping cmake_uninstall.cmake.in too
- metalink: fix error: ‘*’ in boolean context, suggest ‘&&’ instead
- configure: use the threaded resolver backend by default if possible
- mkhelp.pl: allow executing this script directly
- maketgz: remove old *.dist files before making the tarball
- openssl: remove CONST_ASN1_BIT_STRING
- openssl: fix "error: this statement may fall through"
- proxy: fix memory leak in case of invalid proxy server name
- curl/system.h: support more architectures (OpenRISC, ARC)
- docs: fix typos
- curl/system.h: add Oracle Solaris Studio
- CURLINFO_TOTAL_TIME: could wrongly return 4200 seconds
- docs: --connect-to clarified
- cmake: allow user to override CMAKE_DEBUG_POSTFIX
- travis: test cmake build on tarball too
- redirect: make it handle absolute redirects to IDN names
- curl/system.h: fix for gcc on PowerPC
- curl --interface: fixed for IPV6 unique local addresses
- cmake: threads detection improvements

## Fixed in 7.55.0 - August 9 2017

7.55.0
7.55.0 changes only

Changes:

- curl: allow --header and --proxy-header read from file
- getinfo: provide sizes as curl_off_t
- curl: prevent binary output spewed to terminal
- curl: added --request-target
- libcurl: added CURLOPT_REQUEST_TARGET
- curl: added --socks5-{basic,gssapi}: control socks5 auth
- libcurl: added CURLOPT_SOCKS5_AUTH

Bugfixes:

- glob: do not parse after a strtoul() overflow range (CVE-2017-1000101)
- tftp: reject filename lengths that do not fit (CVE-2017-1000100)
- file: output the correct buffer to the user (CVE-2017-1000099)
- includes: remove curl/curlbuild.h and curl/curlrules.h
- dist: make the hugehelp.c not get regenerated unnecessarily
- timers: store internal time stamps as time_t instead of doubles
- progress: let "current speed" be UL + DL speeds combined
- http-proxy: do the HTTP CONNECT process entirely non-blocking
- lib/curl_setup.h: remove CURL_WANTS_CA_BUNDLE_ENV
- fuzz: bring oss-fuzz initial code converted to C89
- configure: disable nghttp2 too if HTTP has been disabled
- mk-ca-bundle.pl: Check curl's exit code after certdata download
- test1148: verify the -# progressbar
- tests: stabilize test 2032 and 2033
- HTTPS-Proxy: do not offer h2 for https proxy connections
- http-proxy: only attempt FTP over HTTP proxy
- curl-compilers.m4: enable vla warning for clang
- curl-compilers.m4: enable double-promotion warning
- curl-compilers.m4: enable missing-variable-declarations clang warning
- curl-compilers.m4: enable comma clang warning
- Makefile.m32: enable -W for MinGW32 build
- CURLOPT_PREQUOTE: not supported for SFTP
- http2: fix OOM crash
- PIPELINING_SERVER_BL: cleanup the internal list use
- mkhelp.pl: fix script name in usage text
- lib1521: add curl_easy_getinfo calls to the test set
- travis: do the distcheck test build out-of-tree as well
- if2ip: fix compiler warning in ISO C90 mode
- lib: fix the djgpp build
- typecheck-gcc: add support for CURLINFO_OFF_T
- travis: enable typecheck-gcc warnings
- maketgz: switch to xz instead of lzma
- CURLINFO_REDIRECT_URL.3: mention the CURLOPT_MAXREDIRS case
- curl-compilers.m4: fix unknown-warning-option on Apple clang
- winbuild: fix boringssl build
- curl/system.h: add check for XTENSA for 32-bit gcc
- test1537: fixed memory leak on OOM
- test1521: fix compiler warnings
- curl: fix memory leak on test 1147 OOM
- libtest/make: generate lib1521.c dynamically at build-time
- curl_strequal.3: fix typo in SYNOPSIS
- progress: prevent resetting t_starttransfer
- openssl: improve fallback seed of PRNG with a time based hash
- http2: improved PING frame handling
- test1450: add simple testing for DICT
- make: build the docs subdir only from within src
- cmake: Added compatibility options for older Windows versions
- gtls: fix build when sizeof(long) < sizeof(void *)
- url: make the original string get used on subsequent transfers
- timeval.c: Use long long constant type for timeval assignment
- tool_sleep: typecast to avoid macos compiler warning
- travis.yml: use --enable-werror on debug builds
- test1451: add SMB support to the testbed
- configure: remove checks for 5 functions never used
- configure: try ldap/lber in reversed order first
- smb: fix build for djgpp/MSDOS
- travis: install nghttp2 on linux builds
- smb: add support for CURLOPT_FILETIME
- cmake: fix send/recv argument scanner for windows
- inet_pton: fix include on windows to get prototype
- select.h: avoid macro redefinition harder
- cmake: if inet_pton is used, bump _WIN32_WINNT
- asyn-thread.c: fix unused variable warnings on macOS
- runtests: support "threaded-resolver" as a feature
- test506: skip if threaded-resolver
- cmake: remove spurious "-l" from linker flags
- cmake: add CURL_WERROR for enabling "warning as errors"
- memdebug: do not setbuf() if the file open failed
- curl_easy_escape.3: mention the (lack of) encoding
- test1452: add telnet negotiation
- CURLOPT_POSTFIELDS.3: explain the 100-continue magic better
- cmake: offer CMAKE_DEBUG_POSTFIX when building with MSVC
- tests/valgrind.supp: suppress OpenSSL false positive seen on travis
- curl_setup_once: Remove ERRNO/SET_ERRNO macros
- curl-compilers.m4: disable warning spam with Cygwin's clang
- ldap: fix MinGW compiler warning
- make: fix docs build on OpenBSD
- curl_setup: always define WIN32_LEAN_AND_MEAN on Windows
- system.h: include winsock2.h before windows.h
- winbuild: build with warning level 4
- rtspd: fix MSVC level 4 warning
- sockfilt: suppress conversion warning with explicit cast
- libtest: fix MSVC warning C4706
- darwinssl: fix pinnedpubkey build error
- tests/server/resolve.c: fix deprecation warning
- nss: fix a possible use-after-free in SelectClientCert()
- checksrc: escape open brace in regex
- multi: mention integer overflow risk if using > 500 million sockets
- darwinssl: fix --tlsv1.2 regression
- timeval: struct curltime is a struct timeval replacement
- curl_rtmp: fix a compiler warning
- include.d: clarify that it concerns the response headers
- cmake: support make uninstall
- include.d: clarify --include is only for response headers
- libcurl: Stop using error codes defined under CURL_NO_OLDIES
- http: fix response code parser to avoid integer overflow
- configure: fix the check for IdnToUnicode
- multi: fix request timer management
- curl_threads: fix MSVC compiler warning
- travis: build on osx with openssl
- travis: build on osx with libressl
- CURLOPT_NETRC.3: mention the filename on windows
- cmake: set MSVC warning level to 4
- netrc: skip lines starting with `#`
- darwinssl: fix curlssl_sha256sum() compiler warnings on first argument
- BUILD.WINDOWS: mention buildconf.bat for builds off git
- darwinssl: silence compiler warnings
- travis: build on osx with darwinssl
- FTP: skip unnecessary CWD when in nocwd mode
- gssapi: fix memory leak of output token in multi round context
- getparameter: avoid returning uninitialized `usedarg`
- curl (debug build) easy_events: make event data static
- curl: detect and bail out early on parameter integer overflows
- configure: fix recv/send/select detection on Android

## Fixed in 7.54.1 - June 14 2017

7.54.1
7.54.1 changes only

Changes:

- curl: show the libcurl release date in --version output

Bugfixes:

- CVE-2017-9502: default protocol drive letter buffer overflow
- openssl: fix memory leak in servercert
- tests: remove the html and PDF versions from the tarball
- mbedtls: enable NTLM (& SMB) even if MD4 support is unavailable
- typecheck-gcc: handle function pointers properly
- llist: no longer uses malloc
- gnutls: removed some code when --disable-verbose is configured
- lib: fix maybe-uninitialized warnings
- multi: clarify condition in curl_multi_wait
- schannel: do not treat encrypted partial record as pending data
- configure: fix the -ldl check for openssl, add -lpthread check
- configure: accept -Og and -Ofast GCC flags
- Makefile: avoid use of GNU-specific form of $<
- if2ip: fix -Wcast-align warning
- configure: stop prepending to LDFLAGS, CPPFLAGS
- curl: set a 100K buffer size by default
- typecheck-gcc: fix _curl_is_slist_info
- nss: do not leak PKCS #11 slot while loading a key
- nss: load libnssckbi.so if no other trust is specified
- examples: ftpuploadfrommem.c
- url: declare get_protocol_family() static
- examples/cookie_interface.c: changed to example.com
- test1443: test --remote-time
- curl: use utimes instead of obsolescent utime when available
- url: fixed a memory leak on OOM while setting CURLOPT_BUFFERSIZE
- curl_rtmp: fix missing-variable-declarations warnings
- tests: fixed OOM handling of unit tests to abort test
- curl_setup: Ensure no more than one IDN lib is enabled
- tool: Fix missing prototype warnings for CURL_DOES_CONVERSIONS
- CURLOPT_BUFFERSIZE: 1024 bytes is now the minimum size
- curl: non-boolean command line args reject --no- prefixes
- telnet: Write full buffer instead of byte-by-byte
- typecheck-gcc: add missing string options
- typecheck-gcc: add support for CURLINFO_SOCKET
- opt manpages: they all have examples now
- curl_setup_once: use SEND_QUAL_ARG2 for swrite
- test557: set a known good numeric locale
- schannel: return a more specific error code for SEC_E_UNTRUSTED_ROOT
- tests/server: make string literals const
- runtests: use -R for random order
- unit1305: fix compiler warning
- curl_slist_append.3: clarify a NULL input creates a new list
- tests/server: run checksrc by default in debug-builds
- tests: fix -Wcast-qual warnings
- runtests.pl: simplify the datacheck read section
- curl: remove --environment and tool_writeenv.c
- buildconf: fix hang on IRIX
- tftp: silence bad-function-cast warning
- asyn-thread: fix unused macro warnings
- tool_parsecfg: fix -Wcast-qual warning
- sendrecv: fix MinGW-w64 warning
- test537: use correct variable type
- rand: treat fake entropy the same regardless of endianness
- curl: generate the --help output
- tests: removed redundant --trace-ascii arguments
- multi: assign IDs to all timers and make each timer singleton
- multi: use a fixed array of timers instead of malloc
- mbedtls: Support server renegotiation request
- pipeline: fix mistakenly trying to pipeline POSTs
- lib510: do not write past the end of the buffer if it is too small
- CURLOPT_HTTPPROXYTUNNEL.3: clarify, add example
- SecureTransport/DarwinSSL: Implement public key pinning
- curl.1: clarify --config
- curl_sasl: fix build error with CURL_DISABLE_CRYPTO_AUTH + USE_NTLM
- darwinssl: Fix exception when processing a client-side certificate
- curl.1: mention --oauth2-bearer's <token> argument
- mkhelp.pl: do not add current time into curl binary
- asiohiper.cpp / evhiperfifo.c: deal with negative timerfunction input
- ssh: fix memory leak in disconnect due to timeout
- tests: stabilize test 1034
- cmake: auto detection of CURL_CA_BUNDLE/CURL_CA_PATH
- assert: avoid, use DEBUGASSERT instead
- LDAP: using ldap_bind_s on Windows with methods
- redirect: store the "would redirect to" URL when max redirs is reached
- winbuild: fix the nghttp2 build
- examples: fix -Wimplicit-fallthrough warnings
- time: fix type conversions and compiler warnings
- mbedtls: fix variable shadow warning
- test557: fix ubsan runtime error due to int left shift
- transfer: init the infilesize from the postfields
- docs: clarify NO_PROXY further
- build-wolfssl: Sync config with wolfSSL 3.11
- curl-compilers.m4: enable -Wshift-sign-overflow for clang
- example/externalsocket.c: make it use CLOSESOCKETFUNCTION too
- lib574.c: use correct callback proto
- lib583: fix compiler warning
- curl-compilers.m4: fix compiler_num for clang
- typecheck-gcc.h: separate getinfo slist checks from other pointers
- typecheck-gcc.h: check CURLINFO_TLS_SSL_PTR and CURLINFO_TLS_SESSION
- typecheck-gcc.h: check CURLINFO_CERTINFO
- build: provide easy code coverage measuring
- test1537: dedicated tests of the URL (un)escape API calls
- curl_endian: remove unused functions
- test1538: verify the libcurl strerror API calls
- MD(4|5): silence cast-align clang warning
- dedotdot: fixed output for ".." and "." only input
- cyassl: define build macros before including ssl.h
- updatemanpages.pl: error out on too old git version
- curl_sasl: fix unused-variable warning
- x509asn1: fix implicit-fallthrough warning with GCC 7
- libtest: fix implicit-fallthrough warnings with GCC 7
- BINDINGS: add Ring binding
- curl_ntlm_core: pass unsigned char to toupper
- test1262: verify ftp download with -z for "if older than this"
- test1521: test all curl_easy_setopt options
- typecheck-gcc: allow CURLOPT_STDERR to be NULL too
- metalink: remove unused printf() argument
- file: make speedcheck use current time for checks
- configure: fix link with librtmp when specifying path
- examples/multi-uv.c: fix deprecated symbol
- cmake: Fix inconsistency regarding mbed TLS include directory
- setopt: check CURLOPT_ADDRESS_SCOPE option range
- gitignore: ignore all vim swap files
- urlglob: fix division by zero
- libressl: OCSP and intermediate certs workaround no longer needed

## Fixed in 7.54.0 - April 19 2017

7.54.0
7.54.0 changes only

Changes:

- Add CURL_SSLVERSION_MAX_* constants to CURLOPT_SSLVERSION
- Add --max-tls
- Add CURLOPT_SUPPRESS_CONNECT_HEADERS
- Add --suppress-connect-headers

Bugfixes:

- CVE-2017-7468: switch off SSL session id when client cert is used
- cmake: Replace invalid UTF-8 byte sequence
- tests: use consistent environment variables for setting charset
- proxy: fixed a memory leak on OOM
- ftp: removed an erroneous free in an OOM path
- docs: de-duplicate file lists in the Makefiles
- ftp: fixed a NULL pointer dereference on OOM
- gopher: fixed detection of an error condition from Curl_urldecode
- url: fix unix-socket support for proxy-disabled builds
- test1139: allow for the possibility that the man page is not rebuilt
- cyassl: get library version string at runtime
- digest_sspi: fix compilation warning
- tests: enable HTTP/2 tests to run with non-default port numbers
- warnless: suppress compiler warning
- darwinssl: Warn that disabling host verify also disables SNI
- configure: fix for --enable-pthreads
- checksrc.bat: Ignore curl_config.h.in, curl_config.h
- no-keepalive.d: fix typo
- configure: fix --with-zlib when a path is specified
- build: fix gcc7 implicit fallthrough warnings
- fix potential use of uninitialized variables
- CURLOPT_SSL_CTX_FUNCTION.3: Fix EXAMPLE formatting errors
- CMake: Reorganize SSL support, separate WinSSL and SSPI
- CMake: Add DarwinSSL support
- CMake: Add mbedTLS support
- ares: return error at once if timed out before name resolve starts
- BINDINGS: added C++, perl, go and Scilab bindings
- URL: return error on malformed URLs with junk after port number
- KNOWN_BUGS: Add DarwinSSL does not import PKCS#12 without a password
- http2: Fix assertion error on redirect with CL=0
- updatemanpages.pl: Update man pages to use current date and versions
- --insecure: clarify that this option is for server connections
- mkhelp: simplified the gzip code
- build: fixed making man page in out-of-tree tarball builds
- tests: disabled 1903 due to flakiness
- openssl: add two /* FALLTHROUGH */ to satisfy coverity
- cmdline-opts: fixed a few typos
- authneg: clear auth.multi flag at http_done
- curl_easy_reset: Also reset the authentication state
- proxy: skip SSL initialization for closed connections
- http_proxy: ignore TE and CL in CONNECT 2xx responses
- tool_writeout: fixed a buffer read overrun on --write-out
- make: regenerate docs/curl.1 by running make in docs
- winbuild: add basic support for OpenSSL 1.1.x
- build: removed redundant DEPENDENCIES from makefiles
- CURLINFO_LOCAL_PORT.3: added example
- curl: show HTTPS-Proxy options on CURLE_SSL_CACERT
- tests: strip more options from non-HTTP --libcurl tests
- tests: fixed the documented test server port numbers
- runtests.pl: fixed display of the Gopher IPv6 port number
- multi: fix streamclose() crash in debug mode
- cmake: build manual pages
- cmake: add support for building HTML and PDF docs
- mbedtls: add support for CURLOPT_SSL_CTX_FUNCTION
- make: introduce `test-nonflaky` target
- CURLINFO_PRIMARY_IP.3: add example
- tests/README: mention nroff for --manual tests
- mkhelp: disable compression if the perl gzip module is unavailable
- openssl: fall back on SSL_ERROR_* string when no error detail
- asiohiper: make sure socket is open in event_cb
- tests/README: make "Run" section foolproof
- curl: check for end of input in writeout backslash handling
- .gitattributes: turn off CRLF for *.am
- multi: fix MinGW-w64 compiler warnings
- schannel: fix variable shadowing warning
- openssl: exclude DSA code when OPENSSL_NO_DSA is defined
- http: Fix proxy connection reuse with basic-auth
- pause: handle mixed types of data when paused
- http: do not treat FTPS over CONNECT as HTTPS
- conncache: make hashkey avoid malloc
- make: use the variable MAKE for recursive calls
- curl: fix callback argument inconsistency
- NTLM: check for features with #ifdef instead of #if
- cmake: add several missing files to the dist
- select: use correct SIZEOF_ constant
- connect: fix unreferenced parameter warning
- schannel: fix unused variable warning
- gcc7: fix ‘*’ in boolean context
- http2: silence unused parameter warnings
- ssh: fix narrowing conversion warning
- telnet: (win32) fix read callback return variable
- docs: Explain --fail-early does not imply --fail
- docs: added examples for CURLINFO_FILETIME.3 and CURLOPT_FILETIME.3
- tests/server/util: remove in6addr_any for recent MinGW
- multi: make curl_multi_wait avoid malloc in the typical case
- include: curl/system.h is a runtime version of curlbuild.h
- easy: silence compiler warning
- llist: replace Curl_llist_alloc with Curl_llist_init
- hash: move key into hash struct to reduce mallocs
- url: do not free postponed data on connection reuse
- curl_sasl: declare mechtable static
- curl: fix Windows Unicode build
- multi: fix queueing of pending easy handles
- tool_operate: fix MinGW compiler warning
- low_speed_limit: improved function for longer time periods
- gtls: fix compiler warning
- sspi: print out InitializeSecurityContext() error message
- schannel: fix compiler warnings
- vtls: fix unreferenced variable warnings
- INSTALL.md: fix secure transport configure arguments
- CURLINFO_SCHEME.3: fix variable type
- libcurl-thread.3: also mention threaded-resolver
- nss: load CA certificates even with --insecure
- openssl: fix this statement may fall through
- poll: prefer <poll.h> over <sys/poll.h>
- polarssl: unbreak build with versions < 1.3.8
- Curl_expire_latest: ignore already expired timers
- configure: turn implicit function declarations into errors
- mbedtls: fix memory leak in error path
- http2: fix handle leak in error path
- .gitattributes: force shell scripts to LF
- configure.ac: ignore CR after version numbers
- extern-scan.pl: strip trailing CR
- openssl: make SSL_ERROR_to_str more future-proof
- openssl: fix thread-safety bugs in error-handling
- openssl: do not try to print nonexistent peer private keys
- nss: fix MinGW compiler warnings

## Fixed in 7.53.1 - February 24 2017

7.53.1
7.53.1 changes only

Bugfixes:

- cyassl: fix typo
- url: Improve CURLOPT_PROXY_CAPATH error handling
- urldata: include curl_sspi.h when Windows SSPI is enabled
- formdata: check for EOF when reading from stdin
- tests: Set CHARSET & LANG to UTF-8 in 1035, 2046 and 2047
- url: Default the proxy CA bundle location to CURL_CA_BUNDLE
- rand: added missing #ifdef HAVE_FCNTL_H around fcntl.h header

## Fixed in 7.53.0 - February 22 2017

7.53.0
7.53.0 changes only

Changes:

- unix_socket: added --abstract-unix-socket and CURLOPT_ABSTRACT_UNIX_SOCKET
- CURLOPT_BUFFERSIZE: support enlarging receive buffer

Bugfixes:

- CVE-2017-2629: make SSL_VERIFYSTATUS work again
- gnutls-random: check return code for failed random
- openssl-random: check return code when asking for random
- http: remove "Curl_http_done: called premature" message
- cyassl: use time_t instead of long for timeout
- build-wolfssl: Sync config with wolfSSL 3.10
- ftp-gss: check for init before use
- configure: accept --with-libidn2 instead
- ftp: failure to resolve proxy should return that error code
- curl.1: add three more exit codes
- docs/ciphers: link to our own new page about ciphers
- vtls: s/SSLEAY/OPENSSL - fixes multi_socket timeouts with openssl
- darwinssl: fix iOS build
- darwinssl: fix CFArrayRef leak
- cmake: use crypt32.lib when building with OpenSSL on windows
- curl_formadd.3: CURLFORM_CONTENTSLENGTH not needed when chunked
- digest_sspi: copy terminating NUL as well
- curl: fix --remote-time incorrect times on Windows
- curl.1: several updates and corrections
- content_encoding: change return code on a failure
- curl.h: CURLE_FUNCTION_NOT_FOUND is no longer in use
- docs: TCP_KEEPALIVE start and interval default to 60
- darwinssl: --insecure overrides --cacert if both settings are in use
- TheArtOfHttpScripting: grammar
- CIPHERS.md: document GSKit ciphers
- wolfssl: support setting cipher list
- wolfssl: display negotiated SSL version and cipher
- lib506: fix build for Open Watcom
- asiohiper: improved socket handling
- examples: make the C++ examples follow our code style too
- tests/sws: retry send() on EWOULDBLOCK
- cmake: Fix passing _WINSOCKAPI_ macro to compiler
- smtp: Fix STARTTLS denied error message
- imap/pop3: do not print response character in STARTTLS denied messages
- rand: make it work without TLS backing
- url: fix parsing for when `file` is the default protocol
- url: allow file://X:/path URLs on windows again
- gnutls: check for alpn and ocsp in configure
- IDN: Use TR46 `non-transitional` for toASCII translations
- url: Fix NO_PROXY env var to work properly with --proxy option
- CURLOPT_PREQUOTE.3: takes a struct curl_slist*, not a char*
- docs: Add note about libcurl copying strings to CURLOPT_* man pages
- curl: reset the easy handle at --next
- --next docs: --trace and --trace-ascii are also global
- --write-out docs: `time_total` is not always shown with ms precision
- http: print correct HTTP string in verbose output when using HTTP/2
- docs: improved language in README.md HISTORY.md CONTRIBUTE.md
- http2: disable server push if not requested
- nss: use the correct lock in nss_find_slot_by_name()
- usercertinmem.c: improve the short description
- CURLOPT_CONNECT_TO: Fix compile warnings
- docs: non-blocking SSL handshake is now supported with NSS
- *.rc: escape non-ASCII/non-UTF-8 character for clarity
- mbedTLS: fix multi interface non-blocking handshake
- PolarSSL: fix multi interface non-blocking handshake
- VC: remove the makefile.vc6 build infra
- telnet: fix windows compiler warnings
- cookies: do not assume a valid domain has a dot
- polarssl: fix hangs
- gnutls: disable TLS session tickets
- mbedtls: disable TLS session tickets
- mbedtls: implement CTR-DRBG and HAVEGE random generators
- openssl: do not use certificate after transferring ownership
- cmake: Support curl --xattr when built with cmake
- OS400: Fix symbols
- docs: Add more HTTPS proxy documentation
- docs: use more HTTPS links
- cmdline-opts: Fixed build and test in out of source tree builds
- CHANGES.0: removed
- schannel: Remove incorrect SNI disabled message
- darwinssl: Avoid parsing certificates when not in verbose mode
- test552: Fix typos
- telnet: Fix typos
- transfer: only retry nobody-requests for HTTP
- http2: reset push header counter fixes crash
- nss: make FTPS work with --proxytunnel
- test1139: Added the --manual keyword since the manual is required
- polarssl, mbedtls: Fix detection of pending data
- http_proxy: Fix tiny memory leak upon edge case connecting to proxy
- URL: only accept ";options" in SMTP/POP3/IMAP URL schemes
- curl.1: ftp.sunet.se is no longer an FTP mirror
- tool_operate: Show HTTPS-Proxy options on CURLE_SSL_CACERT
- http2: fix memory-leak when denying push streams
- configure: Allow disabling pthreads, fall back on Win32 threads
- curl: fix typo in time condition warning message
- axtls: adapt to API changes
- tool_urlglob: Allow a glob range with the same start and stop
- winbuild: add note on auto-detection of MACHINE in Makefile.vc
- http: fix missing `Content-Length: 0` while negotiating auth
- proxy: fix hostname resolution and IDN conversion
- docs: fix timeout handling in multi-uv example
- digest_sspi: Fix nonce-count generation in HTTP digest
- sftp: improved checks for create directory failures
- smb: use getpid replacement for windows UWP builds
- digest_sspi: Handle `stale=TRUE` directive in HTTP digest

## Fixed in 7.52.1 - December 23 2016

7.52.1
7.52.1 changes only

Bugfixes:

- CVE-2016-9594: uninitialized random
- lib557: fix checksrc warnings
- lib: fix MSVC compiler warnings
- lib557.c: use a shorter MAXIMIZE representation
- tests: run checksrc on debug builds

## Fixed in 7.52.0 - December 21 2016

7.52.0
7.52.0 changes only

Changes:

- nss: map CURL_SSLVERSION_DEFAULT to NSS default
- vtls: support TLS 1.3 via CURL_SSLVERSION_TLSv1_3
- curl: introduce the --tlsv1.3 option to force TLS 1.3
- curl: Add --retry-connrefused
- proxy: Support HTTPS proxy and SOCKS+HTTP(s)
- add CURLINFO_SCHEME, CURLINFO_PROTOCOL, and %{scheme}
- curl: add --fail-early

Bugfixes:

- CVE-2016-9586: printf floating point buffer overflow
- CVE-2016-9952: Win CE schannel cert wildcard matches too much
- CVE-2016-9953: Win CE schannel cert name out of buffer read
- msvc: removed a straggling reference to strequal.c
- winbuild: remove strcase.obj from curl build
- examples: bugfixed multi-uv.c
- configure: verify that compiler groks -Werror=partial-availability
- mbedtls: fix build with mbedtls versions < 2.4.0
- dist: add unit test CMakeLists.txt to the tarball
- curl -w: added more decimal digits to timing counters
- easy: Initialize info variables on easy init and duphandle
- cmake: disable poll for macOS
- http2: do not send header fields prohibited by HTTP/2 spec
- ssh: check md5 fingerprints case insensitively (regression)
- openssl: initial TLS 1.3 adaptions
- curl_formadd.3: *_FILECONTENT and *_FILE need the file to be kept
- printf: fix ".*f" handling
- examples/fileupload.c: fclose the file as well
- SPNEGO: Fix memory leak when authentication fails
- realloc: use Curl_saferealloc to avoid common mistakes
- openssl: make sure to fail in the unlikely event that PRNG seeding fails
- URL-parser: for file://[host]/ URLs, the [host] must be localhost
- timeval: prefer time_t to hold seconds instead of long
- Curl_rand: fixed and moved to rand.c
- glob: fix [a-c] globbing regression
- darwinssl: fix SSL client certificate not found on MacOS Sierra
- curl.1: Clarify --dump-header only writes received headers
- http2: Fix address sanitizer memcpy warning
- http2: Use huge HTTP/2 windows
- connects: do not mix unix domain sockets with regular ones
- url: Fix conn reuse for local ports and interfaces
- x509: Limit ASN.1 structure sizes to 256K
- checksrc: add more checks
- winbuild: add config option ENABLE_NGHTTP2
- http2: check nghttp2_session_set_local_window_size exists
- http2: Fix crashes when parent stream gets aborted
- CURLOPT_CONNECT_TO: Skip non-matching "connect-to" entries
- URL parser: reject non-numerical port numbers
- CONNECT: reject TE or CL in 2xx responses
- CONNECT: read responses one byte at a time
- curl: support zero-length argument strings in config files
- openssl: do not use OpenSSL's ERR_PACK
- curl.1: generated with the new man page system
- curl_easy_recv: Improve documentation and example program
- Curl_getconnectinfo: avoid checking if the connection is closed
- CIPHERS.md: attempt to document TLS cipher names

## Fixed in 7.51.0 - November 2 2016

7.51.0
7.51.0 changes only

Changes:

- nss: additional cipher suites are now accepted by CURLOPT_SSL_CIPHER_LIST
- New option: CURLOPT_KEEP_SENDING_ON_ERROR

Bugfixes:

- CVE-2016-8615: cookie injection for other servers
- CVE-2016-8616: case insensitive password comparison
- CVE-2016-8617: OOB write via unchecked multiplication
- CVE-2016-8618: double-free in curl_maprintf
- CVE-2016-8619: double-free in krb5 code
- CVE-2016-8620: glob parser write/read out of bounds
- CVE-2016-8621: curl_getdate read out of bounds
- CVE-2016-8622: URL unescape heap overflow via integer truncation
- CVE-2016-8623: Use-after-free via shared cookies
- CVE-2016-8624: invalid URL parsing with `#`
- CVE-2016-8625: IDNA 2003 makes curl use wrong host
- openssl: fix per-thread memory leak using 1.0.1 or 1.0.2
- http: accept "Transfer-Encoding: chunked" for HTTP/2 as well
- LICENSE-MIXING.md: update with mbedTLS dual licensing
- examples/imap-append: Set size of data to be uploaded
- test2048: fix URL
- darwinssl: disable RC4 cipher-suite support
- CURLOPT_PINNEDPUBLICKEY.3: fix the AVAILABILITY formatting
- openssl: don’t call CRYPTO_cleanup_all_ex_data
- libressl: fix version output
- easy: Reset all statistical session info in curl_easy_reset
- curl_global_cleanup.3: do not unload the lib with sub threads running
- dist: add CurlSymbolHiding.cmake to the tarball
- docs: Remove that --proto is only used for initial retrieval
- configure: Fixed builds with libssh2 in a custom location
- curl.1: --trace supports % for sending to stderr!
- cookies: same domain handling changed to match browser behavior
- formpost: trying to attach a directory no longer crashes
- CURLOPT_DEBUGFUNCTION.3: fixed unused argument warning
- formpost: avoid silent snprintf() truncation
- ftp: fix Curl_ftpsendf
- mprintf: return error on too many arguments
- smb: properly check incoming packet boundaries
- GIT-INFO: remove the Mac 10.1-specific details
- resolve: add error message when resolving using SIGALRM
- cmake: add nghttp2 support
- dist: remove PDF and HTML converted docs from the releases
- configure: disable poll() in macOS builds
- vtls: only reuse session-ids using the same scheme
- pipelining: skip to-be-closed connections when pipelining
- win: fix Universal Windows Platform build
- curl: do not set CURLOPT_SSLENGINE to DEFAULT automatically
- maketgz: make it support "only" generating version info
- Curl_socket_check: add extra check to avoid integer overflow
- gopher: properly return error for poll failures
- curl: set INTERLEAVEDATA too
- polarssl: clear thread array at init
- polarssl: fix unaligned SSL session-id lock
- polarssl: reduce #ifdef madness with a macro
- curl_multi_add_handle: set timeouts in closure handles
- configure: set min version flags for builds on mac
- INSTALL: converted to markdown => INSTALL.md
- curl_multi_remove_handle: fix a double-free
- multi: fix infinite loop in curl_multi_cleanup()
- nss: fix tight loop in non-blocking TLS handhsake over proxy
- mk-ca-bundle: Change URL retrieval to HTTPS-only by default
- mbedtls: stop using deprecated include file
- docs: fix req->data in multi-uv example
- configure: Fix test syntax for monotonic clock_gettime
- CURLMOPT_MAX_PIPELINE_LENGTH.3: Clarify it is not for HTTP/2

## Fixed in 7.50.3 - September 14 2016

7.50.3
7.50.3 changes only

Bugfixes:

- CVE-2016-7167: escape and unescape integer overflows
- mk-ca-bundle.pl: use SHA256 instead of SHA1
- checksrc: detect strtok() use
- errors: new alias CURLE_WEIRD_SERVER_REPLY
- http2: support > 64-bit sized uploads
- openssl: fix bad memory free (regression)
- CMake: hide private library symbols
- http: refuse to pass on response body when NO_NODY is set
- cmake: fix curl-config --static-libs
- mbedtls: switch off NTLM in build if md4 is not available
- curl: --create-dirs on windows groks both forward and backward slashes

## Fixed in 7.50.2 - September 7 2016

7.50.2
7.50.2 changes only

Bugfixes:

- mbedtls: Added support for NTLM
- SSH: fixed SFTP/SCP transfer problems
- multi: make Curl_expire() work with 0 ms timeouts
- mk-ca-bundle.pl: -m keeps ca cert meta data in output
- TFTP: Fix upload problem with piped input
- CURLOPT_TCP_NODELAY: now enabled by default
- mbedtls: set verbose TLS debug when MBEDTLS_DEBUG is defined
- http2: always wait for readable socket
- cmake: Enable win32 large file support by default
- cmake: Enable win32 threaded resolver by default
- winbuild: Avoid setting redundant CFLAGS to compile commands
- curl.h: make CURL_NO_OLDIES define CURL_STRICTER
- docs: make more markdown files use .md extension
- docs: CONTRIBUTE and LICENSE-MIXING were converted to markdown
- winbuild: Allow changing C compiler via environment variable CC
- rtsp: accept any RTSP session id
- HTTP: retry failed HEAD requests on reused connections too
- configure: add zlib search with pkg-config
- openssl: accept subjectAltName iPAddress if no dNSName match
- MANUAL: Remove invalid link to LDAP documentation
- socks: improved connection procedure
- proxy: reject attempts to use unsupported proxy schemes
- proxy: bring back use of "Proxy-Connection:"
- curl: allow "pkcs11:" prefix for client certificates
- spnego_sspi: fix memory leak in case *outlen is zero
- SOCKS: improve verbose output of SOCKS5 connection sequence
- SOCKS: display the hostname returned by the SOCKS5 proxy server
- http/sasl: Query authentication mechanism supported by SSPI before using
- sasl: do not use GSSAPI authentication when domain name not specified
- win: Basic support for Universal Windows Platform apps
- nss: fix incorrect use of a previously loaded certificate from file
- nss: work around race condition in PK11_FindSlotByName()
- ftp: fix wrong poll on the secondary socket
- openssl: build warning-free with 1.1.0 (again)
- HTTP: stop parsing headers when switching to unknown protocols
- test219: Add http as a required feature
- TLS: random file/egd does not have to match for conn reuse
- schannel: Disable ALPN for Wine since it is causing problems
- http2: make sure stream errors do not needlessly close the connection
- http2: return CURLE_HTTP2_STREAM for unexpected stream close
- darwinssl: --cainfo is intended for backward compatibility only
- speed caps: not based on average speeds anymore
- configure: make the cpp -P detection not clobber CPPFLAGS
- http2: use named define instead of magic constant in read callback
- http2: skip the content-length parsing, detect unknown size
- http2: return EOF when done uploading without known size
- darwinssl: test for errSecSuccess in PKCS12 import rather than noErr
- openssl: fix CURLINFO_SSL_VERIFYRESULT

## Fixed in 7.50.1 - August 3 2016

7.50.1
7.50.1 changes only

Bugfixes:

- TLS: switch off SSL session id when client cert is used
- TLS: only reuse connections with the same client cert
- curl_multi_cleanup: clear connection pointer for easy handles
- include the CURLINFO_HTTP_VERSION man page into the release tarball
- include the http2-server.pl script in the release tarball
- test558: fix test by stripping file paths from FD lines
- spnego: Corrected miss-placed * in Curl_auth_spnego_cleanup() declaration
- tests: Fix for http/2 feature
- cmake: Fix for schannel support
- curl.h: make public types void * again
- win32: fix a potential memory leak in Curl_load_library
- travis: fix OSX build by re-installing libtool
- mbedtls: Fix debug function name

## Fixed in 7.50.0 - July 21 2016

7.50.0
7.50.0 changes only

Changes:

- http: add CURLINFO_HTTP_VERSION and %{http_version}

Bugfixes:

- memdebug: fix MSVC crash with -DMEMDEBUG_LOG_SYNC
- openssl: fix build with OPENSSL_NO_COMP
- mbedtls: removed unused variables
- cmake: Added missing mbedTLS support
- URL parser: allow URLs to use one, two or three slashes
- curl: fix -q [regression]
- openssl: Use correct buffer sizes for error messages
- curl: fix SIGSEGV while parsing URL with too many globs
- schannel: add CURLOPT_CERTINFO support
- vtls: fix ssl session cache race condition
- http: Fix HTTP/2 connection reuse [regression]
- checksrc: Add LoadLibrary to the banned functions list
- schannel: Disable ALPN on Windows < 8.1
- configure: occasional ignorance of --enable-symbol-hiding with GCC
- http2: test17xx are the first real HTTP/2 tests
- resolve: add support for IPv6 DNS64/NAT64 Networks on OS X + iOS
- curl_multi_socket_action.3: rewording
- CURLOPT_POSTFIELDS.3: Clarify what happens when set empty
- cmake: Fix build with winldap
- openssl: fix cert check with non-DNS name fields present
- curl.1: mention the units for the progress meter
- openssl: use more `const` to fix build warnings with 1.1.0 branch
- cmake: now using BUILD_TESTING=ON/OFF
- vtls: Only call add/getsession if session id is enabled
- headers: forward declare CURL, CURLM and CURLSH as structs
- configure: improve detection of CA bundle path on FreeBSD
- SFTP: set a generic error when no SFTP one exists
- curl_global_init.3: expand on the SSL and WIN32 bits purpose
- conn: do not free easy handle data in handler->disconnect
- cookie.c: Fix misleading indentation
- library: Fix memory leaks found during static analysis
- CURLMOPT_SOCKETFUNCTION.3: fix typo
- curl_global_init: moved the "IPv6 works" check here
- connect: disable TFO on Linux when using SSL
- vauth: Fixed memory leak due to function returning without free
- winbuild: fix embedded manifest option

## Fixed in 7.49.1 - May 30 2016

7.49.1
7.49.1 changes only

Bugfixes:

- Windows: prevent DLL hijacking, CVE-2016-4802
- dist: include manpage-scan.pl, nroff-scan.pl and CHECKSRC.md
- schannel: fix compile break with MSVC XP toolset
- curlbuild.h.dist: check __LP64__ as well to fix MIPS build
- dist: include curl_multi_socket_all.3
- http2: use HTTP/2 in the HTTP/1.1-alike response
- openssl: ERR_remove_thread_state() is deprecated in latest 1.1.0
- CURLOPT_CONNECT_TO.3: user must not free the list prematurely
- libcurl.m4: Avoid obsolete warning
- winbuild/Makefile.vc: Fix check on SSL, MBEDTLS, WINSSL exclusivity
- curl_multibyte: fix compiler error
- openssl: cleanup must free compression methods (memory leak)
- mbedtls: fix includes so snprintf() works
- checksrc.pl: Added variants of strcat() & strncat() to banned function list
- contributors.sh: better grep pattern and show GitHub username
- ssh: fix build for libssh2 before 1.2.6
- curl_share_setopt.3: Add min ver needed for ssl session lock

## Fixed in 7.49.0 - May 18 2016

7.49.0
7.49.0 changes only

Changes:

- schannel: Add ALPN support
- SSH: support CURLINFO_FILETIME
- SSH: new CURLOPT_QUOTE command "statvfs"
- wolfssl: Add ALPN support
- http2: added --http2-prior-knowledge
- http2: added CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE
- libcurl: added CURLOPT_CONNECT_TO
- curl: added --connect-to
- libcurl: added CURLOPT_TCP_FASTOPEN
- curl: added --tcp-fastopen
- curl: remove support for --ftpport, -http-request and --socks

Bugfixes:

- CVE-2016-3739: TLS certificate check bypass with mbedTLS/PolarSSL
- checksrc.bat: Updated the help to be consistent with generate.bat
- checksrc.bat: Added support for scanning the tests and examples
- openssl: fix ERR_remove_thread_state() for boringssl/libressl
- openssl: boringssl provides the same numbering as openssl
- multi: fix "Operation timed out after" timer
- url: do not use bad offset in tld_check_name to show error
- sshserver.pl: use quotes for given options
- Makefile.am: skip the scripts dir
- curl: warn for --capath use if not supported by libcurl
- http2: fix connection reuse
- GSS: make Curl_gss_log_error more verbose
- build-wolfssl: Allow a broader range of ciphers (Visual Studio)
- wolfssl: Use ECC supported curves extension
- openssl: Fix compilation warnings
- Curl_add_buffer_send: avoid possible NULL dereference
- SOCKS5_gssapi_negotiate: do not assume little-endian ints
- strerror: do not bit shift a signed integer
- url: Corrected get protocol family for FTP and LDAP
- curl/mprintf.h: remove support for _MPRINTF_REPLACE
- upload: missing rewind call could make libcurl hang
- IMAP: check pointer before dereferencing it
- build: Changed the Visual Studio projects warning level from 3 to 4
- checksrc: now stricter, wider checks, code cleaned up
- checksrc: added docs/CHECKSRC.md
- curl_sasl: Fixed potential null pointer utilization
- krb5: Fixed missing client response when mutual authentication enabled
- krb5: Only process challenge when present
- krb5: Only generate a SPN when its not known
- formdata: use appropriate fopen() macros
- curl.1: -w filename_effective was introduced in 7.26.0
- http2: make use of the nghttp2 error callback
- http2: fix connection reuse when PING comes after last DATA
- curl.1: change example for -F
- HTTP2: Add a space character after the status code
- curl.1: use example.com more
- mbedtls.c: changed private prefix to mbed_
- mbedtls: implement and provide *_data_pending() to avoid hang
- mbedtls: fix MBEDTLS_DEBUG builds
- ftp/imap/pop3/smtp: Allow the service name to be overridden
- CURLOPT_SOCKS5_GSSAPI_SERVICE: Merged with CURLOPT_PROXY_SERVICE_NAME
- build: include scripts/ in the dist
- http2: Add handling stream level error
- http2: Improve header parsing
- makefile.vc6: use d suffix on debug object
- configure: remove check for libresolve
- scripts/make: use $(EXEEXT) for executables
- checksrc: got rid of the whitelist files
- sendf: added ability to call recv() before send() as workaround
- NTLM: check for NULL pointer before dereferencing
- openssl: builds with OpenSSL 1.1.0-pre5
- configure: ac_cv_ -> curl_cv_ for all cached vars
- winbuild: add mbedtls support
- curl: make --ftp-create-dirs retry on failure
- PolarSSL: implement public key pinning
- multi: accidentally used resolved hostname instead of proxy
- CURLINFO_TLS_SESSION.3: clarify TLS library support before 7.48.0
- CONNECT_ONLY: do not close connection on GSS 401/407 responses
- opts: Fix some syntax errors in example code fragments
- mbedtls: Fix session resume
- test1139: verifies libcurl option man page presence
- CURLINFO_TLS_SSL_PTR.3: Clarify SSL pointer availability
- curl: make --disable work as long form of -q
- curl: use --telnet-option as documented
- curl.1: document --ftp-ssl-reqd, --krb4 and --ntlm-wb
- curl: -h output lacked --proxy-header and --ntlm-wb
- curl -J: make it work even without http:// scheme on URL
- lib: include curl_printf.h as one of the last headers
- tests: handle path properly on Msys/Cygwin
- curl.1: --mail-rcpt can be used multiple times
- CURLOPT_ACCEPT_ENCODING.3: clarified
- docs: fixed lots of broken man page references
- tls: make setting pinnedkey option fail if not supported
- test1140: run nroff-scan to verify man pages
- http: make sure a blank header overrides accept_decoding
- connections: do not reuse non-HTTP proxies on different ports
- connect: fix invalid "Network is unreachable" errors
- TLS: move the ALPN/NPN enable bits to the connection
- TLS: SSL_peek is not a const operation
- http2: Add space between colon and header value
- darwinssl: fix certificate verification disable on OS X 10.8
- mprintf: Fix processing of width and prec args
- ftp wildcard: segfault due to init only in multi_perform

## Fixed in 7.48.0 - March 23 2016

7.48.0
7.48.0 changes only

Changes:

- configure: --with-ca-fallback: use built-in TLS CA fallback
- TFTP: add --tftp-no-options to expose CURLOPT_TFTP_NO_OPTIONS
- getinfo: CURLINFO_TLS_SSL_PTR supersedes CURLINFO_TLS_SESSION
- added CODE_STYLE.md

Bugfixes:

- Proxy-Connection: stop sending this header by default
- os400: sync ILE/RPG definitions with latest public header files
- cookies: allow spaces in cookie names, cut of trailing spaces
- tool_urlglob: Allow reserved dos device names (Windows)
- openssl: remove most BoringSSL #ifdefs
- tool_doswin: Support for literal path prefix \\?
- mbedtls: fix ALPN usage segfault
- mbedtls: fix memory leak when destroying SSL connection data
- nss: do not count enabled cipher-suites
- examples/cookie_interface.c: add cleanup call
- examples: adhere to curl code style
- curlx_tvdiff: handle 32-bit time_t overflows
- dist: ship buildconf.bat too
- curl.1: --disable-{eprt,epsv} are ignored for IPv6 hosts
- generate.bat: Fix comment bug by removing old comments
- test1604: Add to Makefile.inc so it gets run
- gtls: fix for builds lacking encrypted key file support
- SCP: use libssh2_scp_recv2 to support > 2GB files on windows
- CURLOPT_CONNECTTIMEOUT_MS.3: Fix example to use milliseconds option
- cookie: do not refuse cookies to localhost
- openssl: avoid direct PKEY access with OpenSSL 1.1.0
- http: do not break the header into chunks if HTTP/2
- http2: do not decompress gzip decoding automatically
- curlx.c: i2s_ASN1_IA5STRING() clashes with an openssl function
- curl.1: add a missing dash
- curl.1: HTTP headers for --cookie must be Set-Cookie style
- CURLOPT_COOKIEFILE.3: HTTP headers must be Set-Cookie style
- curl_sasl: Fix memory leak in digest parser
- src/Makefile.m32: add CURL_{LD,C}FLAGS_EXTRAS support
- CURLOPT_DEBUGFUNCTION.3: Fix example
- runtests: Fixed usage of %PWD on MinGW64
- tests/sshserver.pl: use RSA instead of DSA for host auth
- multi_remove_handle: keep the timeout list until after disconnect
- Curl_read: check for activated HTTP/1 pipelining, not only requested
- configure: warn on invalid ca bundle or path
- file: try reading from files with no size
- getinfo: Add support for mbedTLS TLS session info
- formpost: fix memory leaks in AddFormData error branches
- makefile.m32: allow to pass .dll/.exe-specific LDFLAGS
- url: if Curl_done is premature then pipeline not in use
- cookie: remove redundant check
- cookie: do not expire session cookies in remove_expired
- makefile.m32: fix to allow -ssh2-winssl combination
- checksrc.bat: Fixed cannot find perl if installed but not in path
- build-openssl.bat: Fixed cannot find perl if installed but not in path
- mbedtls: fix user-specified SSL protocol version
- makefile.m32: add missing libs for static -winssl-ssh2 builds
- test46: change cookie expiry date
- pipeline: Sanity check pipeline pointer before accessing it
- openssl: use the correct OpenSSL/BoringSSL/LibreSSL in messages
- ftp_done: clear tunnel_state when secondary socket closes
- opt-docs: fix heading macros
- imap/pop3/smtp: Fixed connections upgraded with TLS are not reused
- curl_multi_wait: never return -1 in `numfds`
- url.c: fix clang warning: no newline at end of file
- krb5: improved type handling to avoid clang compiler warnings
- cookies: first n/v pair in Set-Cookie: is the cookie, then parameters
- multi: avoid blocking during CURLM_STATE_WAITPROXYCONNECT
- multi hash: ensure modulo performed on curl_socket_t
- curl: glob_range: no need to check unsigned variable for negative
- easy: add check to malloc() when running event-based
- CURLOPT_SSLENGINE.3: Only for OpenSSL built with engine support
- version: thread-safety
- openssl: verbose: show matching SAN pattern
- openssl: adapt to OpenSSL 1.1.0 API breakage in ERR_remove_thread_state()
- formdata.c: Fixed compilation warning
- configure: use cpp -P when needed
- imap.c: Fixed compilation warning with /Wall enabled
- config-w32.h: Fixed compilation warning when /Wall enabled
- ftp/imap/pop3/smtp: Fixed compilation warning when /Wall enabled
- build: Added missing Visual Studio filter files for VC10 onwards
- easy: Remove poll failure check in easy_transfer
- mbedtls: fix compiler warning
- build-wolfssl: Update VS properties for wolfSSL v3.9.0
- Fixed various compilation warnings when verbose strings disabled
- sshserver: remove use of AuthorizedKeysFile2

## Fixed in 7.47.1 - February 8 2016

7.47.1
7.47.1 changes only

Bugfixes:

- getredirect.c: fix variable name
- tool_doswin: silence unused function warning
- cmake: fixed when OpenSSL enabled on Windows and schannel detected
- curl.1: Explain remote-name behavior if file already exists
- tool_operate: do not sanitize --output path (Windows)
- URLs: change all http:// URLs to https:// in documentation & comments
- sasl_sspi: Fix memory leak in domain populate
- COPYING: clarify that Daniel is not the sole author
- examples/htmltitle: Use _stricmp on Windows
- examples/asiohiper: Avoid function name collision on Windows
- idn_win32: Better error checking
- openssl: Fix signed/unsigned mismatch warning in X509V3_ext
- curl save files: check for backslashes on cygwin

## Fixed in 7.47.0 - January 27 2016

7.47.0
7.47.0 changes only

Changes:

- version: Add flag CURL_VERSION_PSL for libpsl
- http: added CURL_HTTP_VERSION_2TLS to do HTTP/2 for HTTPS only
- curl: use 2TLS by default
- curl --expect100-timeout: added
- Add .dir-locals and set c-basic-offset to 2 (for emacs)

Bugfixes:

- curl: avoid local drive traversal when saving file on Windows
- NTLM: do not reuse proxy connections without diff proxy credentials
- tests: Disable the OAUTHBEARER tests when using a non-default port number
- curl: remove keepalive #ifdef checks done on libcurl's behalf
- formdata: Check if length is too large for memory
- lwip: Fix compatibility issues with later versions
- openssl: BoringSSL does not have CONF_modules_free
- config-win32: Fix warning HAVE_WINSOCK2_H undefined
- build: fix compilation error with CURL_DISABLE_VERBOSE_STRINGS
- http2: Fix hanging paused stream
- scripts/Makefile: fix GNUism and survive no perl
- openssl: adapt to 1.1.0+ name changes
- openssl: adapt to openssl >= 1.1.0 X509 opaque structs
- HTTP2.md: spell fix and remove TODO now implemented
- setstropt: const-correctness
- cyassl: fix compiler warning on type conversion
- gskit: Fix host subject altname verification
- http2: Support trailer fields
- wolfssl: handle builds without SSLv3 support
- cyassl: deal with lack of *get_peer_certificate
- sockfilt: do not wait on unreliable file or pipe handle
- make: build zsh script even in an out-of-tree build
- test 1326: fix getting stuck on Windows
- test 87: fix file check on Windows
- configure: allow static builds on mingw
- configure: detect IPv6 support on Windows
- ConnectionExists: with *PIPEWAIT, wait for connections
- Makefile.inc: s/curl_SOURCES/CURL_FILES
- test 16: fixed for Windows
- test 252-255: use datacheck mode text for ASCII-mode LISTings
- tftpd server: add Windows support by writing files in binary mode
- ftplistparser: fix handling of file LISTings using Windows EOL
- tests first.c: fix calculation of sleep timeout on Windows
- tests (several): use datacheck mode text for ASCII-mode LISTings
- CURLOPT_RANGE.3: for HTTP servers, range support is optional
- test 1515: add MSYS support by passing a relative path
- curl_global_init.3: Add Windows-specific info for init via DLL
- http2: Fix client write for trailers on stream close
- mbedtls: Fix ALPN support
- connection reuse: IDN hostnames fixed
- http2: Fix PUSH_PROMISE headers being treated as trailers
- http2: handle the received SETTINGS frame
- http2: Ensure that http2_handle_stream_close is called
- mbedtls: implement CURLOPT_PINNEDPUBLICKEY
- runtests: Add mbedTLS to the SSL backends
- IDN hostnames: Remove the port number before converting to ACE
- zsh.pl: fail if no curl is found
- scripts: fix zsh completion generation
- scripts: do not generate and install zsh completion when cross-compiling
- lib: Prefix URLs with lower-case protocol names/schemes
- ConnectionExists: only do pipelining/multiplexing when asked
- configure: assume IPv6 works when cross-compiled
- openssl: for 1.1.0+ they now provide a SSLeay() macro of their own
- openssl: improved error detection/reporting
- ssh: CURLOPT_SSH_PUBLIC_KEYFILE now treats "" as NULL again
- mbedtls: Fix pinned key return value on fail
- maketgz: generate date stamp with LC_TIME=C

## Fixed in 7.46.0 - December 2 2015

7.46.0
7.46.0 changes only

Changes:

- configure: build silently by default
- cookies: Add support for Publix Suffix List with libpsl
- vtls: added support for mbedTLS
- Added CURLOPT_STREAM_DEPENDS
- Added CURLOPT_STREAM_DEPENDS_E
- Added CURLOPT_STREAM_WEIGHT
- Added CURLFORM_CONTENTLEN
- oauth2: Added support for OAUTHBEARER SASL mechanism to IMAP, POP3 and SNMP

Bugfixes:

- des: Fix header conditional for Curl_des_set_odd_parity
- ntlm: get rid of unconditional use of long long
- CURLOPT_CERTINFO.3: fix reference to CURLINFO_CERTINFO
- docs: CURLINFO_LASTSOCKET => CURLINFO_ACTIVESOCKET
- http2: Fix http2_recv to return -1 if recv returned -1
- curl_global_init_mem: set function pointers before doing init
- ntlm: error out without 64-bit support as the code needs it
- openssl: Fix set up of pkcs12 certificate verification chain
- acinclude: remove PKGCONFIG override
- test1531: case the size to fix the test on non-largefile builds
- fread_func: move callback pointer from set to state struct
- test1601: fix compilation with --enable-debug and --disable-crypto-auth
- http2: do not pass uninitialized name+len pairs to nghttp2_submit_request
- curlbuild.h: Fix non-configure compiling to mips and sh4 targets
- tool: Generate easysrc with last cache linked-list
- cmake: Fix for add_subdirectory(curl) use-case
- vtls: fix compiler warning for TLS backends without sha256
- build: fix for MSDOS/djgpp
- checksrc: add crude // detection
- http2: on_frame_recv: trust the conn/data input
- ftp: allow CURLOPT_IGNORE_CONTENT_LENGTH to ignore size
- polarssl/mbedtls: fix name space pollution
- build: Fix mingw ssl gdi32 order
- build: Fix support for PKG_CONFIG
- MacOSX-Framework: sdk regex fix for sdk 10.10 and later
- socks: Fix incorrect port numbers in failed connect messages
- curl.1: -E: s/private certificate/client certificate
- curl.h: s/HTTPPOST_/CURL_HTTPOST_
- curl_formadd: support >2GB files on windows
- http redirects: %-encode bytes outside of ascii range
- rawstr: Speed up Curl_raw_toupper by 40%
- curl_ntlm_core: fix 2 curl_off_t constant overflows.
- getinfo: CURLINFO_ACTIVESOCKET: fix bad socket value
- tftp tests: verify sent options too
- imap: do not call imap_atom() when no mailbox specified in LIST command
- imap: Fixed double quote in LIST command when mailbox contains spaces
- imap: do not check for continuation when executing a CUSTOMREQUEST
- acinclude: Remove check for 16-bit curl_off_t
- BoringSSL: Work with stricter BIO_get_mem_data()
- cmake: Add missing feature macros in config header
- sasl_sspi: fixed unicode build for digest authentication
- sasl_sspi: fix identity memory leak in digest authentication
- unit1602: Fixed failure in torture test
- unit1603: Added unit tests for hash functions
- vtls/openssl: remove unused traces of yassl ifdefs
- openssl: remove #ifdefs for < 0.9.7 support
- typecheck-gcc.h: add some missing options
- curl: mark two more options strings for --libcurl output
- openssl: Free modules on cleanup
- CURLMOPT_PUSHFUNCTION.3: *_byname() returns only the first header
- getconnectinfo: do not call recv(2) if socket == -1
- http2: http_done: do not free already-freed push headers
- zsh completion: Preserve single quotes in output
- os400: Provide options for libssh2 use in compile scripts.
- build: Fix theoretical infinite loops
- pop3: Differentiate between success and continuation responses
- examples: Fixed compilation warnings
- schannel: Use GetVersionEx() when VerifyVersionInfo() is not available
- CURLOPT_HEADERFUNCTION.3: fix typo
- curl: expanded the -XHEAD warning text
- done: make sure the final progress update is made
- build: Install zsh completion
- RTSP: do not add if-modified-since without timecondition
- curl: Fixed display of URL index in password prompt for --next
- nonblock: fix setting non-blocking mode for Amiga
- http2 push: add missing inits of new stream
- http2: convert some verbose output into debug-only output
- Curl_read_plain: clean up ifdefs that break statements

## Fixed in 7.45.0 - October 7 2015

7.45.0
7.45.0 changes only

Changes:

- added CURLOPT_DEFAULT_PROTOCOL
- added new tool option --proto-default
- getinfo: added CURLINFO_ACTIVESOCKET
- turned CURLINFO_* option docs as stand-alone man pages
- curl: point out unnecessary uses of -X in verbose mode

Bugfixes:

- curl_global_init_mem.3: Stronger thread-safety warning
- buildconf.bat: Fixed issues when ran in directories with special chars
- cmake: Fix CurlTests check for gethostbyname_r with 5 arguments
- generate.bat: Fixed issues when ran in directories with special chars
- generate.bat: Only call buildconf.bat if it exists
- generate.bat: Added support for generating only the prerequisite files
- curl.1: Document weaknesses in SSLv2 and SSLv3
- CURLOPT_HTTP_VERSION.3: connection reuse goes before version
- docs: Update the redirect protocols disabled by default
- inet_pton.c: Fix MSVC runtime check failure
- CURLMOPT_PUSHFUNCTION.3: fix argument types
- rtsp: support basic/digest authentication
- rtsp: stop reading empty DESCRIBE responses
- travis: Upgrading to container based build
- travis.yml: Add OS X testbot
- FTP: make state machine not get stuck in state
- openssl: handle lack of server cert when strict checking disabled
- configure: change functions to detect openssl (clones)
- configure: detect latest boringssl
- runtests: Allow for spaces in server-verify curl custom path
- http2: on_frame_recv: get a proper `conn` for the debug logging
- ntlm: mark deliberate switch case fall-through
- http2: remove dead code
- curl_easy_{escape,unescape}.3: "char *" vs. "const char *"
- curl: point out the conflicting HTTP methods if used
- cmake: added Windows SSL support
- curl_easy_{escape,setopt}.3: fix example
- curl_easy_escape.3: escape `\n`
- libcurl.m4: Put braces around empty if body
- buildconf.bat: Fixed double blank line in `curl manual` warning output
- sasl: Only define Curl_sasl_digest_get_pair() when CRYPTO_AUTH enabled
- inet_pton.c: Fix MSVC runtime check failure
- CURLOPT_FOLLOWLOCATION.3: mention methods for redirects
- http2: do not pass on Connection: headers
- nss: do not directly access SSL_ImplementedCiphers
- docs: numerous cleanups and spelling fixes
- FTP: do_more: add check for wait_data_conn in upload case
- parse_proxy: reject illegal port numbers
- cmake: IPv6 : disable Unix header check on Windows platform
- winbuild: run buildconf.bat if necessary
- buildconf.bat: fix syntax error
- curl_sspi: fix possibly undefined CRYPT_E_REVOKED
- nss: prevent NSS from incorrectly reusing a session
- libcurl-errors.3: add two missing error codes
- openssl: fix build with < 0.9.8
- openssl: refactor certificate parsing to use OpenSSL memory BIO
- openldap: only part of LDAP query results received
- ssl: add server cert's "sha256//" hash to verbose
- NTLM: Reset auth-done when using a fresh connection
- curl: generate easysrc only on --libcurl
- tests: disable 1801 until fixed
- CURLINFO_TLS_SESSION: always return backend info
- gnutls: Support CURLOPT_KEYPASSWD
- gnutls: Report actual GnuTLS error message for certificate errors
- tests: disable 1510 due to CI-problems on github
- cmake: Put "winsock2.h" before "windows.h" during configure checks
- cmake: Ensure discovered include dirs are considered
- configure: Add missing `)` for CURL_CHECK_OPTION_RT
- build: fix failures with -Wcast-align and -Werror
- FTP: fix uploading ASCII with unknown size
- readwrite_data: set a max number of loops
- http2: avoid superfluous Curl_expire() calls
- http2: set TCP_NODELAY unconditionally
- docs: fix unescaped `\n` in man pages
- openssl: Fix algorithm init to make (gost) engines work
- win32: make recent Borland compilers use long long
- runtests: Fix pid check in checkdied
- gopher: do not send NUL byte
- tool_setopt: fix c_escape truncated octal
- hiperfifo: fix the pointer passed to WRITEDATA
- getinfo: Fix return code for unknown CURLINFO options

## Fixed in 7.44.0 - August 12 2015

7.44.0
7.44.0 changes only

Changes:

- http2: added CURLMOPT_PUSHFUNCTION and CURLMOPT_PUSHDATA
- examples: added http2-serverpush.c
- http2: added curl_pushheader_byname() and curl_pushheader_bynum()
- docs: added CODE_OF_CONDUCT.md
- curl: Add --ssl-no-revoke to disable certificate revocation checks
- libcurl: New value CURLSSLOPT_NO_REVOKE for CURLOPT_SSL_OPTIONS
- makefile: Added support for VC14
- build: Added Visual Studio 2015 (VC14) project files
- build: Added wolfSSL configurations to VC10+ project files

Bugfixes:

- FTP: fix HTTP CONNECT logic regression
- openssl: Fix build with openssl < ~ 0.9.8f
- openssl: fix build with BoringSSL
- curl_easy_setopt.3: option order does not matter
- openssl: fix use of uninitialized buffer
- RTSP: removed dead code
- Makefile.m32: add support for CURL_LDFLAG_EXTRAS
- curl: always provide negotiate/kerberos options
- cookie: Fix bug in export if any-domain cookie is present
- curl_easy_setopt.3: mention CURLOPT_PIPEWAIT
- INSTALL: Advise use of non-native SSL for Windows <= XP
- tool_help: fix --tlsv1 help text to use >= for TLSv1
- HTTP: POSTFIELDSIZE set after added to multi handle
- SSL-PROBLEMS: mention WinSSL problems in WinXP
- setup-vms.h: Symbol case fixups
- SSL: Pinned public key hash support
- libtest: call PR_Cleanup() on exit if NSPR is used
- ntlm_wb: Fix theoretical memory leak
- runtests: Allow for spaces in curl custom path
- http2: add stream != NULL checks for reliability
- schannel: Replace deprecated GetVersion with VerifyVersionInfo
- http2: verify success of strchr() in http2_send()
- configure: add --disable-rt option
- openssl: work around MSVC warning
- HTTP: ignore "Content-Encoding: compress"
- configure: check if OpenSSL linking wants -ldl
- build-openssl.bat: Show syntax if required args are missing
- test1902: attempt to make the test more reliable
- libcurl-thread.3: Consolidate thread-safety info
- maketgz: Fixed some VC makefiles missing from the release tarball
- libcurl-multi.3: mention curl_multi_wait
- ABI doc: use secure URL
- http: move HTTP/2 cleanup code off http_disconnect()
- libcurl-thread.3: Warn memory functions must be thread-safe
- curl_global_init_mem.3: Warn threaded resolver needs thread-safe funcs
- docs: formpost needs the full size at start of upload
- curl_gssapi: remove `const` to fix compiler warnings
- SSH: three state machine fixups
- libcurl.3: fix a single typo
- generate.bat: Only clean prerequisite files when in ALL mode
- curl_slist_append.3: add error checking to the example
- buildconf.bat: Added support for file clean-up via -clean
- generate.bat: Use buildconf.bat for prerequisite file clean-up
- NTLM: handle auth for only a single request
- curl_multi_remove_handle.3: fix formatting
- checksrc.bat: Fixed error when [directory] is not a curl source directory
- checksrc.bat: Fixed error when missing *.c and *.h files
- CURLOPT_RESOLVE.3: Note removal support was added in 7.42
- test46: update cookie expire time
- SFTP: fix range request off-by-one in size check
- CMake: fix GSSAPI builds
- build: refer to fixed libidn versions
- http2: discard frames with no SessionHandle
- curl_easy_recv.3: fix formatting
- libcurl-tutorial.3: fix formatting
- curl_formget.3: correct return code

## Fixed in 7.43.0 - June 17 2015

7.43.0
7.43.0 changes only

Changes:

- Added CURLOPT_PROXY_SERVICE_NAME
- Added CURLOPT_SERVICE_NAME
- New curl option: --proxy-service-name
- New curl option: --service-name
- New curl option: --data-raw
- Added CURLOPT_PIPEWAIT
- Added support for multiplexing transfers using HTTP/2, enable this with the new CURLPIPE_MULTIPLEX bit for CURLMOPT_PIPELINING
- HTTP/2: requires nghttp2 1.0.0 or later
- scripts: add zsh.pl for generating zsh completion
- curl.h: add CURL_HTTP_VERSION_2

Bugfixes:

- CVE-2015-3236: lingering HTTP credentials in connection reuse
- CVE-2015-3237: SMB send off unrelated memory contents
- nss: fix compilation failure with old versions of NSS
- curl_easy_getinfo.3: document `internals` in CURLINFO_TLS_SESSION
- schannel.c: Fix possible SEC_E_BUFFER_TOO_SMALL error
- Curl_ossl_init: load builtin modules
- configure: follow-up fix for krb5-config
- sasl_sspi: Populate domain from the realm in the challenge
- netrc: support `default` token
- README: convert to UTF-8
- cyassl: Implement public key pinning
- nss: implement public key pinning for NSS backend
- mingw build: add arch -m32/-m64 to LDFLAGS
- schannel: Fix out of bounds array
- configure: remove autogenerated files by autoconf
- configure: remove --automake from libtoolize call
- acinclude.m4: fix shell test for default CA cert bundle/path
- schannel: fix regression in schannel_recv
- openssl: skip trace outputs for ssl_ver == 0
- gnutls: properly retrieve certificate status
- netrc: Read in text mode when cygwin
- winbuild: Document the option used to statically link the CRT
- FTP: Make EPSV use the control IP address rather than the original host
- FTP: fix dangling conn->ip_addr dereference on verbose EPSV
- conncache: keep bundles on host+port bases, not only hostnames
- runtests.pl: use `h2c` now, no -14 anymore
- curlver: introducing new version number (checking) macros
- openssl: boringssl build brekage, use SSL_CTX_set_msg_callback
- CURLOPT_POSTFIELDS.3: correct variable names
- curl_easy_unescape.3: update RFC reference
- gnutls: do not fail on non-fatal alerts during handshake
- testcurl.pl: allow source to be in an arbitrary directory
- CURLOPT_HTTPPROXYTUNNEL.3: only works with an HTTP proxy
- SSPI-error: Change SEC_E_ILLEGAL_MESSAGE description
- parse_proxy: switch off tunneling if non-HTTP proxy
- share_init: fix OOM crash
- perl: remove subdir, not touched in 9 years
- CURLOPT_COOKIELIST.3: Add example
- CURLOPT_COOKIE.3: Explain that the cookies are not modified
- CURLOPT_COOKIELIST.3: Explain Set-Cookie without a domain
- FAQ: How do I port libcurl to my OS?
- openssl: Use TLS_client_method for OpenSSL 1.1.0+
- HTTP-NTLM: fail auth on connection close instead of looping
- curl_setup: Add macros for FOPEN_READTEXT, FOPEN_WRITETEXT
- curl_getdate.3: update RFC reference
- curl_multi_info_read.3: added example
- curl_multi_perform.3: added example
- curl_multi_timeout.3: added example
- cookie: Stop exporting any-domain cookies
- openssl: remove dummy callback use from SSL_CTX_set_verify()
- openssl: remove SSL_get_session()-using code
- openssl: removed USERDATA_IN_PWD_CALLBACK kludge
- openssl: removed error string #ifdef
- openssl: Fix verification of server-sent legacy intermediates
- docs: man page indentation and syntax fixes
- docs: Spelling fixes
- fopen.c: fix a few compiler warnings
- CURLOPT_OPENSOCKETFUNCTION: return error at once
- schannel: Add support for optional client certificates
- build: Properly detect OpenSSL 1.0.2 when using configure
- urldata: store POST size in state.infilesize too
- security:choose_mech remove dead code
- rtsp_do: remove dead code
- docs: many HTTP URIs changed to HTTPS
- schannel: schannel_recv overhaul

## Fixed in 7.42.1 - April 29 2015

7.42.1
7.42.1 changes only

Bugfixes:

- CURLOPT_HEADEROPT: default to separate
- dist: include {src,lib}/checksrc.whitelist
- connectionexists: fix build without NTLM
- docs: distribute the CURLOPT_PINNEDPUBLICKEY man page, too
- curl -z: do not write empty file on unmet condition
- openssl: fix serial number output
- curl_easy_getinfo.3: document `internals` in CURLINFO_TLS_SESSION
- sws: init http2 state properly
- curl.1: fix typo

## Fixed in 7.42.0 - April 22 2015

7.42.0
7.42.0 changes only

Changes:

- openssl: show the cipher selection to use in verbose text
- gtls: implement CURLOPT_CERTINFO
- add CURLOPT_SSL_FALSESTART option (darwinssl and NSS)
- curl: add --false-start option
- add CURLOPT_PATH_AS_IS
- curl: add --path-as-is option
- curl: create output file on successful download of an empty file

Bugfixes:

- ConnectionExists: for NTLM reuse, require credentials to match
- cookie: cookie parser out of boundary memory access
- fix_hostname: zero length hostname caused -1 index offset
- http_done: close Negotiate connections when done
- sws: timeout idle CONNECT connections
- nss: improve error handling in Curl_nss_random()
- nss: do not skip Curl_nss_seed() if data is NULL
- curl-config.in: eliminate double quotes around CURL_CA_BUNDLE
- http2: move lots of verbose output to be debug-only
- dist: add extern-scan.pl to the tarball
- http2: return recv error on unexpected EOF
- build: Use default RandomizedBaseAddress directive in VC9+ project files
- build: Removed DataExecutionPrevention directive from VC9+ project files
- tool: Updated the warnf() function to use the GlobalConfig structure
- http2: Return error if stream was closed with other than NO_ERROR
- mprintf.h: remove #ifdef CURLDEBUG
- libtest: fixed linker errors on msvc
- tool: use ENABLE_CURLX_PRINTF instead of _MPRINTF_REPLACE
- curl.1: fix 'the the' typo
- cmake: handle build definitions CURLDEBUG/DEBUGBUILD
- openssl: remove all uses of USE_SSLEAY
- multi: fix memory-leak on timeout (regression)
- curl_easy_setopt.3: added CURLOPT_SSL_VERIFYSTATUS
- metalink: add some error checks
- TLS: make it possible to enable ALPN/NPN without HTTP/2
- http2: use CURL_HTTP_VERSION_* symbols instead of NPN_*
- conncontrol: only log changes to the connection bit
- multi: fix *getsock() with CONNECT
- symbols.pl: handle `-` in the deprecated field
- MacOSX-Framework: use @rpath instead of @executable_path
- GnuTLS: add support for CURLOPT_CAPATH
- GnuTLS: print negotiated TLS version and full cipher suite name
- GnuTLS: do not print double newline after certificate dates
- memanalyze.pl: handle free(NULL)
- proxy: reuse proxy connections (regression)
- mk-ca-bundle: do not report SHA1 numbers with "-q"
- http: always send Host: header as first header
- openssl: sort ciphers to use based on strength
- openssl: use colons properly in the ciphers list
- http2: detect premature close without data transferred
- hostip: Fix signal race in Curl_resolv_timeout
- closesocket: call multi socket cb on close even with custom close
- mksymbolsmanpage.pl: use std header and generate better nroff header
- connect: Fix happy eyeballs logic for IPv4-only builds
- curl_easy_perform.3: remove superfluous close brace from example
- HTTP: do not use Expect: headers when on HTTP/2
- Curl_sh_entry: remove unused `timestamp`
- docs/libcurl: makefile portability fix
- mkhelp: Remove trailing carriage return from every line of input
- nss: explicitly tell NSS to disable NPN/ALPN when libcurl disables it
- curl_easy_setopt.3: added a few missing options
- metalink: fix resource leak in OOM
- axtls: version 1.5.2 now requires that config.h be manually included
- HTTP: do not switch to HTTP/2 from 1.1 until we get the 101
- cyassl: detect the library as renamed wolfssl
- CURLOPT_HTTPHEADER.3: add a "SECURITY CONCERNS" section
- CURLOPT_URL.3: Added SECURITY CONCERNS
- openssl: try to avoid accessing OCSP structs when possible
- test938: added missing closing tags
- testcurl: Allow `=` in values given on command line
- tests/certs: added make target to rebuild certificates
- tests/certs: rebuild certificates with modified key usage bits
- gtls: avoid uninitialized variable
- gtls: dereferencing NULL pointer
- gtls: add check of return code
- test1513: eliminated race condition in test run
- dict: rename byte to avoid compiler shadowed declaration warning
- curl_easy_recv/send: make them work with the multi interface
- vtls: fix compile with --disable-crypto-auth but with SSL
- openssl: adapt to ASN1/X509 things gone opaque in 1.1
- openssl: verifystatus: only use the OCSP work-around <= 1.0.2a
- curl_memory: make curl_memory.h the second-last header file loaded
- testcurl.pl: add the --notes option to supply more info about a build
- cyassl: If wolfSSL then identify as such in version string
- cyassl: Check for invalid length parameter in Curl_cyassl_random
- cyassl: default to highest possible TLS version
- Curl_ssl_md5sum: return CURLcode (fixes OOM)
- polarssl: remove dead code
- polarssl: called mbedTLS in 1.3.10 and later
- globbing: fix step parsing for character globbing ranges
- globbing: fix URL number calculation when using range with step
- multi: on a request completion, check all CONNECT_PEND transfers
- build: link curl to openssl libraries when openssl support is enabled
- url: do not accept CURLOPT_SSLVERSION unless USE_SSL is defined
- vtls: do not accept unknown CURLOPT_SSLVERSION values
- build: Fix libcurl.sln erroneous mixed configurations
- cyassl: remove undefined reference to CyaSSL_no_filesystem_verify
- cyassl: add SSL context callback support for CyaSSL
- tool: only set SSL options if SSL is enabled
- multi: remove_handle: move pending connections
- configure: Use KRB5CONFIG for krb5-config
- axtls: add timeout within Curl_axtls_connect
- CURLOPT_HTTP200ALIASES.3: Mainly SHOUTcast servers use "ICY 200"
- cyassl: Fix library initialization return value
- cookie: handle spaces after the name in Set-Cookie
- http2: Fix missing nghttp2_session_send call in Curl_http2_switched
- cyassl: Fix certificate load check
- build-openssl.bat: Fix mixed line endings
- checksrc.bat: Check lib\vtls source
- DNS: fix refreshing of obsolete dns cache entries
- CURLOPT_RESOLVE: actually implement removals
- checksrc.bat: quotes to support an SRC_DIR with spaces
- cyassl: Remove `Connecting to` message from cyassl_connect_step2
- cyassl: Use CYASSL_MAX_ERROR_SZ for error buffer size
- lib/transfer.c: Remove factor of 8 from sleep time calculation
- lib/makefile.m32: add missing libs to build libcurl.dll
- build: Generate source prerequisites for Visual Studio in generate.bat
- cyassl: Include the CyaSSL build config
- firefox-db2pem: fix wildcard to find Firefox default profile
- BUGS: refer to the github issue tracker now as primary
- vtls_openssl: improve several certificate error messages
- cyassl: Add support for TLS extension SNI
- parsecfg: do not continue past a zero termination
- configure --with-nss=PATH: query pkg-config if available
- configure --with-nss: drop redundant if statement
- cyassl: Fix include order
- HTTP: fix PUT regression with Negotiate
- curl_version_info.3: fixed the `protocols` variable type

## Fixed in 7.41.0 - February 25 2015

7.41.0
7.41.0 changes only

Changes:

- NetWare build: added TLS-SRP enabled build
- winbuild: Added option to build with c-ares
- Added --cert-status
- Added CURLOPT_SSL_VERIFYSTATUS
- sasl: implement EXTERNAL authentication mechanism

Bugfixes:

- sasl_gssapi: Fixed build on NetBSD with built-in GSS-API
- FTP: fix IPv6 host using link-local address
- FTP: if EPSV fails on IPV6 connections, bail out
- gssapi: Remove need for duplicated GSS_C_NT_HOSTBASED_SERVICE definitions
- NSS: fix compiler error when built http2-enabled
- mingw build: allow to pass custom CFLAGS
- add -m64 CFLAGS when targeting mingw64, add -m32/-m64 to LDFLAGS
- curl_schannel.c: mark session as removed from cache if not freed
- Curl_pretransfer: reset expected transfer sizes
- curl.h: remove extra space
- curl_endian: Fixed build when 64-bit integers are not supported
- checksrc.bat: Better detection of Perl installation
- build-openssl.bat: Added check for Perl installation
- http_negotiate: Return CURLcode in Curl_input_negotiate() instead of int
- http_negotiate: Added empty decoded challenge message info text
- vtls: Removed unimplemented overrides of curlssl_close_all()
- sasl_gssapi: Fixed memory leak with local SPN variable
- http_negotiate: Use dynamic buffer for SPN generation
- ldap: Renamed the CURL_LDAP_WIN definition to USE_WIN32_LDAP
- openssl: do public key pinning check independently
- timeval: typecast for better type (on Amiga)
- ipv6: enclose AF_INET6 uses with proper #ifdefs for ipv6
- SASL: common URL option and auth capabilities decoders for all protocols
- BoringSSL: fix build
- BoringSSL: detected by configure, switches off NTLM
- openvms: Handle openssl/0.8.9zb version parsing
- configure: detect libresssl
- configure: remove detection of the old yassl emulation API
- curl_setup: Disable SMB/CIFS support when HTTP only
- imap: remove automatic password setting: it breaks external sasl authentication
- sasl: remove XOAUTH2 from default enabled authentication mechanism
- runtests: identify BoringSSL and libressl
- security: avoid compiler warning
- ldap: build with BoringSSL
- des: Added Curl_des_set_odd_parity()
- CURLOPT_SEEKFUNCTION.3: also when server closes a connection
- CURLOPT_HTTP_VERSION.3: CURL_HTTP_VERSION_2_0 added in 7.33.0
- build: Removed unused Visual Studio bscmake settings
- build: Enabled DEBUGBUILD in Visual Studio debug builds
- build: Renamed top level Visual Studio solution files
- build: Removed Visual Studio SuppressStartupBanner directive for VC8+
- libcurl-symbols: first basic shot for autogenerated docs
- Makefile.am: fix `make distcheck`
- getpass_r: read from stdin, not stdout!
- getpass: protect include with proper #ifdef
- opts: CURLOPT_CAINFO availability depends on SSL engine
- more cleanup of `CURLcode result` return code
- MD4: replace implementation
- MD5: replace implementation
- openssl: SSL_SESSION->ssl_version no longer exist
- md5: use axTLS's own MD5 functions when available
- schannel: Removed curl_ prefix from source files
- curl.1: add warning when using -H and redirects
- curl.1: clarify that -X is used for all requests
- gskit: Fix exclusive SSLv3 option
- polarssl: Fix exclusive SSL protocol version options
- http2: Fix bug that associated stream canceled on PUSH_PROMISE
- ftp: accept all 2xx responses to the PORT command
- configure: allow both --with-ca-bundle and --with-ca-path
- cmake: install the dll file to the correct directory
- nss: fix NPN/ALPN protocol negotiation
- polarssl: fix ALPN protocol negotiation
- cmake: Fix generation of tool_hugehelp.c on windows
- cmake: fix winsock2 detection on windows
- gnutls: fix build with HTTP2
- connect: fix a spurious connect failure on dual-stacked hosts
- test: test 530 is now less timing dependent
- telnet: invalid use of custom read function if not set

## Fixed in 7.40.0 - January 8 2015

7.40.0
7.40.0 changes only

Changes:

- http_digest: Added support for Windows SSPI based authentication
- version info: Added Kerberos V5 to the supported features
- Makefile: Added VC targets for WinIDN
- config-win32: Introduce build targets for VS2012+
- SSL: Add PEM format support for public key pinning
- smtp: Added support for the conversion of Unix newlines during mail send
- smb: Added initial support for the SMB/CIFS protocol
- Added support for HTTP over unix domain sockets, via CURLOPT_UNIX_SOCKET_PATH and --unix-socket
- sasl: Added support for GSS-API based Kerberos V5 authentication

Bugfixes:

- darwinssl: fix session ID keys to only reuse identical sessions
- url-parsing: reject CRLFs within URLs
- OS400: Adjust specific support to last release
- THANKS: Remove duplicate names
- url.c: Fixed compilation warning
- ssh: Fixed build on platforms where R_OK is not defined
- tool_strdup.c: include the tool strdup.h
- build: Fixed Visual Studio project file generation of strdup.[c|h]
- curl_easy_setopt.3: add CURLOPT_PINNEDPUBLICKEY
- curl.1: show zone index use in a URL
- mk-ca-bundle.vbs: switch to new certdata.txt URL
- Makefile.dist: Added some missing SSPI configurations
- build: Fixed no NTLM support for email when CURL_DISABLE_HTTP is defined
- SSH: use the port number as well for known_known checks
- libssh2: detect features based on version, not configure checks
- http2: Deal with HTTP/2 data inside Upgrade response header buffer
- multi: removed Curl_multi_set_easy_connection
- symbol-scan.pl: do not require autotools
- cmake: add ENABLE_THREADED_RESOLVER, rename ARES
- cmake: build libhostname for test suite
- cmake: fix HAVE_GETHOSTNAME definition
- tests: fix libhostname visibility
- tests: fix memleak in server/resolve.c
- vtls.h: Fixed compiler warning when compiled without SSL
- CMake: Restore order-dependent header checks
- CMake: Restore order-dependent library checks
- tool: Removed krb4 from the supported features
- http2: do not send Upgrade headers when we already do HTTP/2
- examples: do not call select() to sleep on windows
- win32: Updated some legacy APIs to use the newer extended versions
- easy.c: Fixed compilation warning when no verbose string support
- connect.c: Fixed compilation warning when no verbose string support
- build: in Makefile.m32 pass -F flag to windres
- build: in Makefile.m32 add -m32 flag for 32-bit
- multi: when leaving for timeout, close accordingly
- CMake: Simplify if() conditions on check result variables
- build: in Makefile.m32 try to detect 64-bit target
- multi: inform about closed sockets before they are closed
- multi-uv.c: close the file handle after download
- examples: Wait recommended 100ms when no file descriptors are ready
- ntlm: Split the SSPI based messaging code from the native messaging code
- cmake: fix NTLM detection when CURL_DISABLE_HTTP defined
- cmake: add Kerberos to the supported feature
- CURLOPT_POSTFIELDS.3: mention the COPYPOSTFIELDS option
- http: Disable pipelining for HTTP/2 and upgraded connections
- ntlm: Fixed static-ness of local decode function
- sasl: Reduced the need for two sets of NTLM messaging functions
- multi.c: Fixed compilation warnings when no verbose string support
- select.c: fix compilation for VxWorks
- multi-single.c: switch to use curl_multi_wait
- curl_multi_wait.3: clarify numfds being used if not NULL
- http.c: Fixed compilation warnings from features being disabled
- NSS: enable the CAPATH option
- docs: Fix FAILONERROR typos
- HTTP: do not abort connections with pending Negotiate authentication
- HTTP: Free (proxy)userpwd for NTLM/Negotiate after sending a request
- http_perhapsrewind: do not abort CONNECT requests
- build: updated dependencies in makefiles
- multi.c: Fixed compilation warning
- ftp.c: Fixed compilation warnings when proxy support disabled
- get_url_file_name: Fixed crash on OOM on debug build
- cookie.c: Refactored cleanup code to simplify
- OS400: enable NTLM authentication
- ntlm: Use Windows Crypt API
- http2: avoid logging neg "failure" if h2 was not requested
- schannel_recv: return the correct code
- VC build: added sspi define for winssl-zlib builds
- Curl_client_write(): chop long data, convert data only once
- openldap: do not ignore Curl_client_write() return code
- ldap: check Curl_client_write() return codes
- parsedate.c: Fixed compilation warning
- url.c: Fixed compilation warning when USE_NTLM is not defined
- ntlm_wb_response: fix "statement not reached"
- telnet: fix "cast increases required alignment of target type"
- smtp: Fixed dot stuffing when EOL characters at end of input buffers
- ntlm: Allow NTLM2Session messages when USE_NTRESPONSES manually defined
- ntlm: Disable NTLM v2 when 64-bit integers are not supported
- ntlm: Use short integer when decoding 16-bit values
- ftp.c: Fixed compilation warning when no verbose string support
- synctime.c: fixed timeserver URLs
- mk-ca-bundle.pl: restored forced run again
- ntlm: Fixed return code for bad type-2 Target Info
- curl_schannel.c: Data may be available before connection shutdown
- curl_schannel: Improvements to memory re-allocation strategy
- darwinssl: aprintf() to allocate the session key
- tool_util.c: Use GetTickCount64 if it is available
- lib: Fixed multiple code analysis warnings if SAL are available
- tool_binmode.c: Explicitly ignore the return code of setmode
- tool_urlglob.c: Silence warning C6293: Ill-defined for-loop
- opts: Warn CURLOPT_TIMEOUT overrides when set after CURLOPT_TIMEOUT_MS
- SFTP: work-around servers that return zero size on STAT
- connect: singleipconnect(): properly try other address families after failure
- IPV6: address scope != scope id
- parseurlandfillconn(): fix improper non-numeric scope_id stripping
- secureserver.pl: make OpenSSL CApath and cert absolute path values
- secureserver.pl: update Windows detection and fix path conversion
- secureserver.pl: clean up formatting of config and fix verbose output
- tests: Added Windows support using Cygwin-based OpenSSH
- sockfilt.c: use non-Ex functions that are available before WinXP
- VMS: Updates for 0740-0D1220
- openssl: warn for SRP set if SSLv3 is used, not for TLS version
- openssl: make it compile against openssl 1.1.0-DEV master branch
- openssl: fix SSL/TLS versions in verbose output
- curl: show size of inhibited data when using -v
- build: Removed WIN32 definition from the Visual Studio projects
- build: Removed WIN64 definition from the libcurl Visual Studio projects
- vtls: Use bool for Curl_ssl_getsessionid() return type
- sockfilt.c: Replace 100ms sleep with thread throttle
- sockfilt.c: Reduce the number of individual memory allocations
- vtls: do not set cert info count until memory allocation is successful
- nss: do not ignore Curl_ssl_init_certinfo() OOM failure
- nss: do not ignore Curl_extract_certinfo() OOM failure
- vtls: Fixed compilation warning and an ignored return code
- sockfilt.c: Fixed compilation warnings
- darwinssl: Fixed compilation warning
- vtls: Use `(void) arg` for unused parameters
- sepheaders.c: Fixed resource leak on failure
- lib1900.c: Fixed cppcheck error
- ldap: Fixed Unicode connection details in Win32 initialization / bind calls
- ldap: Fixed Unicode DN, attributes and filter in Win32 search calls

## Fixed in 7.39.0 - November 5 2014

7.39.0
7.39.0 changes only

Changes:

- SSLv3 is disabled by default
- CURLOPT_COOKIELIST: Added "RELOAD" command
- build: Added WinIDN build configuration options to Visual Studio projects
- ssh: improve key file search
- SSL: public key pinning. Use CURLOPT_PINNEDPUBLICKEY and --pinnedpubkey
- vtls: remove QsoSSL support, use gskit!
- mk-ca-bundle: added SHA-384 signature algorithm
- docs: added many examples for libcurl opts and other doc improvements
- build: Added VC ssh2 target to main Makefile
- MinGW: Added support to build with nghttp2
- NetWare: Added support to build with nghttp2
- build: added Watcom support to build with WinSSL
- build: Added optional specific version generation of VC project files

Bugfixes:

- curl_easy_duphandle: CURLOPT_COPYPOSTFIELDS read out of bounds
- openssl: build fix for versions < 0.9.8e
- newlines: fix mixed newlines to LF-only
- ntlm: Fixed HTTP proxy authentication when using Windows SSPI
- sasl_sspi: Fixed Unicode build
- file: reject paths using embedded %00
- threaded-resolver: revert Curl_expire_latest() switch
- configure: allow --with-ca-path with PolarSSL too
- HTTP/2: Fix busy loop when EOF is encountered
- CURLOPT_CAPATH: return failure if set without backend support
- nss: do not fail if a CRL is already cached
- smtp: Fixed intermittent "SSL3_WRITE_PENDING: bad write retry" error
- fixed 20+ nits/memory leaks identified by Coverity scans
- curl_schannel.c: Fixed possible memory or handle leak
- multi-uv.c: call curl_multi_info_read() better
- cmake: Check for OpenSSL before OpenLDAP
- cmake: Fix library list provided to curl tests
- cmake: Avoid cycle directory dependencies
- cmake: Build with GSS-API libraries (MIT or Heimdal)
- vtls: provide backend defines for internal source code
- nss: fix a connection failure when FTPS handle is reused
- tests/http_pipe.py: Python 3 support
- cmake: build tool_hugehelp (ENABLE_MANUAL)
- cmake: enable IPv6 by default if available
- tests: move TESTCASES to Makefile.inc, add show for cmake
- ntlm: Avoid unnecessary buffer allocation for SSPI based type-2 token
- ntlm: Fixed empty/bad base-64 decoded buffer return codes
- ntlm: Fixed empty type-2 decoded message info text
- cmake: add CMake/Macros.cmake to the release tarball
- cmake: add SUPPORT_FEATURES and SUPPORT_PROTOCOLS
- cmake: use LIBCURL_VERSION from curlver.h
- cmake: generate pkg-config and curl-config
- fixed several superfluous variable assignments identified by cppcheck
- cleanup of `CURLcode result` return code
- pipelining: only output "is not blacklisted" in debug builds
- SSL: Remove SSLv3 from SSL default due to POODLE attack
- gskit.c: remove SSLv3 from SSL default
- darwinssl: detect possible future removal of SSLv3 from the framework
- ntlm: Only define ntlm data structure when USE_NTLM is defined
- ntlm: Return CURLcode from Curl_ntlm_core_mk_lm_hash()
- ntlm: Return all errors from Curl_ntlm_core_mk_nt_hash()
- sspi: Only call CompleteAuthToken() when complete is needed
- http_negotiate: Fixed missing check for USE_SPNEGO
- HTTP: return larger than 3 digit response codes too
- openssl: Check for NPN / ALPN via OpenSSL version number
- openssl: enable NPN separately from ALPN
- sasl_sspi: Allow DIGEST-MD5 to use current windows credentials
- sspi: Return CURLE_LOGIN_DENIED on AcquireCredentialsHandle() failure
- resume: consider a resume from
- sasl: Fixed Kerberos V5 inclusion when CURL_DISABLE_CRYPTO_AUTH is used
- build-openssl.bat: Fix x64 release build
- cmake: drop _BSD_SOURCE macro usage
- cmake: fix gethostby{addr,name}_r in CurlTests
- cmake: clean OtherTests, fixing -Werror
- cmake: fix struct sockaddr_storage check
- Curl_single_getsock: fix hold/pause sock handling
- SSL: PolarSSL default min SSL version TLS 1.0
- cmake: fix ZLIB_INCLUDE_DIRS use
- buildconf: stop checking for libtool

## Fixed in 7.38.0 - September 10 2014

7.38.0
7.38.0 changes only

Changes:

- supports HTTP/2 draft-14
- CURLE_HTTP2 is a new error code
- CURLAUTH_NEGOTIATE is a new auth define
- CURL_VERSION_GSSAPI is a new capability bit
- no longer use fbopenssl for anything
- schannel: use CryptGenRandom for random numbers
- axtls: define curlssl_random using axTLS's PRNG
- cyassl: use RNG_GenerateBlock to generate a good random number
- findprotocol: show unsupported protocol within quotes
- version: detect and show LibreSSL
- version: detect and show BoringSSL
- imap/pop3/smtp: Kerberos (SASL GSSAPI) authentication via Windows SSPI
- http2: requires nghttp2 0.6.0 or later

Bugfixes:

- SECURITY ADVISORY: cookie leak with IP address as domain
- SECURITY ADVISORY: cookie leak for TLDs
- fix a build failure on Debian when NSS support is enabled
- HTTP/2: fixed compiler warnings when built disabled
- cyassl: return the correct error code on no CA cert
- http: Deprecate GSS-Negotiate macros due to bad naming
- http: Fixed Negotiate: authentication
- multi: Improve proxy CONNECT performance (regression)
- ntlm_wb: Avoid invoking ntlm_auth helper with empty username
- ntlm_wb: Fix hard-coded limit on NTLM auth packet size
- url.c: use the preferred symbol name: *READDATA
- smtp: fixed a segfault during test 1320 torture test
- cyassl: made it compile with version 2.0.6 again
- nss: do not check the version of NSS at run time
- c-ares: fix build without IPv6 support
- HTTP/2: use base64url encoding
- SSPI Negotiate: Fix 3 memory leaks
- libtest: fixed duplicated line in Makefile
- conncache: fix compiler warning
- openssl: make ossl_send return CURLE_OK better
- HTTP/2: Support expect: 100-continue
- HTTP/2: Fix infinite loop in readwrite_data()
- parsedate: fix the return code for an overflow edge condition
- darwinssl: do not use strtok()
- http_negotiate_sspi: Fixed specific username and password not working
- openssl: replace call to OPENSSL_config
- http2: show the received header for better debugging
- HTTP/2: Move :authority before non-pseudo header fields
- HTTP/2: Reset promised stream, not its associated stream
- HTTP/2: added some more logging for debugging stream problems
- ntlm: Added support for SSPI package info query
- ntlm: Fixed hard coded buffer for SSPI based auth packet generation
- sasl_sspi: Fixed memory leak with not releasing Package Info struct
- sasl_sspi: Fixed SPN not being converted to wchar under Unicode builds
- sasl: Use a dynamic buffer for DIGEST-MD5 SPN generation
- http_negotiate_sspi: Use a dynamic buffer for SPN generation
- sasl_sspi: Fixed missing free of challenge buffer on SPN failure
- sasl_sspi: Fixed hard coded buffer for response generation
- Curl_poll + Curl_wait_ms: fix timeout return value
- docs/SSLCERTS: update the section about NSS database
- create_conn: prune dead connections
- openssl: fix version report for the 0.9.8 branch
- mk-ca-bundle.pl: switched to using hg.mozilla.org
- http: fix the Content-Range: parser
- Curl_disconnect: do not free the URL
- win32: Fixed WinSock 2 #if
- NTLM: ignore CURLOPT_FORBID_REUSE during NTLM HTTP auth
- curl.1: clarify --limit-rate's effect on both directions
- disconnect: do not touch easy-related state on disconnects
- cmake: big cleanup and numerous fixes
- HTTP/2: supports draft-14 - moved :headers before the non-pseudo headers
- HTTP/2: Reset promised stream, not its associated stream
- configure.ac: Add support for recent GSS-API implementations for HP-UX
- CONNECT: close proxy connections that fail
- CURLOPT_NOBODY.3: clarify this option is for downloads
- darwinssl: fix CA certificate checking using PEM format
- resolve: cache lookup for async resolvers
- low-speed-limit: avoid timeout flood
- polarssl: implement CURLOPT_SSLVERSION
- multi: convert CURLM_STATE_CONNECT_PEND handling to a list
- curl_multi_cleanup: remove superfluous NULL assigns
- polarssl: support CURLOPT_CAPATH / --capath
- progress: size_dl/size_ul are always >= 0, and clear "KNOWN" properly

## Fixed in 7.37.1 - July 16 2014

7.37.1
7.37.1 changes only

Changes:

- bits.close: introduce connection close tracking
- darwinssl: Add support for --cacert
- polarssl: add ALPN support
- docs: Added new option man pages

Bugfixes:

- build: Fixed incorrect reference to curl_setup.h in Visual Studio files
- build: Use $(TargetDir) and $(TargetName) macros for .pdb and .lib output
- curl.1: clarify that -u cannot specify a user with colon
- openssl: Fix uninitialized variable use in NPN callback
- curl_easy_reset: reset the URL
- curl_version_info.3: returns a pointer to a static struct
- url-parser: only use if_nametoindex if detected by configure
- select: with winsock, avoid passing unsupported arguments to select()
- gnutls: do not use deprecated type names anymore
- gnutls: allow building with nghttp2 but without ALPN support
- tests: Fix portability issue with the tftpd server
- curl_sasl_sspi: Fixed corrupt hostname in DIGEST-MD5 SPN
- curl_sasl: extended native DIGEST-MD5 cnonce to be a 32-byte hex string
- random: use Curl_rand() for proper random data
- Curl_ossl_init: call OPENSSL_config for initing engines
- config-win32.h: Updated for VC12
- winbuild: do not USE_WINSSL when WITH_SSL is being used
- getinfo: HTTP CONNECT code not reset between transfers
- Curl_rand: Use a fake entropy for debug builds when CURL_ENTROPY set
- http2: avoid segfault when using the plain-text http2
- conncache: move the connection counter to the cache struct
- http2: better return code error checking
- curlbuild: fix GCC build on SPARC systems without configure script
- tool_metalink: Support polarssl as digest provider
- curl.h: reverse the enum/define setup for old symbols
- curl.h: moved two really old deprecated symbols
- curl.h: renamed CURLOPT_DEPRECATEDx to CURLOPT_OBSOLETEx
- buildconf: do not search tools in current directory.
- OS400: make it compilable again. Make RPG binding up to date
- nss: do not abort on connection failure (failing tests 305 and 404)
- nss: make the fallback to SSLv3 work again
- tool: prevent valgrind from reporting possibly lost memory (nss only)
- progress callback: skip last callback update on errors
- nss: fix a memory leak when CURLOPT_CRLFILE is used
- compiler warnings: potentially uninitialized variables
- url.c: Fixed memory leak on OOM
- gnutls: ignore invalid certificate dates with VERIFYPEER disabled
- gnutls: fix SRP support with versions of GnuTLS from 2.99.0
- gnutls: fixed a couple of uninitialized variable references
- gnutls: fixed compilation against versions < 2.12.0
- build: Fixed overridden compiler PDB settings in VC7 to VC12
- ntlm_wb: Fixed buffer size not being large enough for NTLMv2 sessions
- netrc: do not abort if home directory cannot be found
- netrc: fixed thread-safety problem by using getpwuid_r if available
- cookie: avoid mutex deadlock
- configure: respect host tool prefix for krb5-config
- gnutls: handle IP address in cert name check

## Fixed in 7.37.0 - May 21 2014

7.37.0
7.37.0 changes only

Changes:

- URL parser: IPv6 zone identifiers are now supported
- CURLOPT_PROXYHEADER: set headers for proxy-only
- CURLOPT_HEADEROPT: added
- curl: add --proxy-header
- sasl: Added support for DIGEST-MD5 via Windows SSPI
- sasl: Added DIGEST-MD5 qop-option validation in native challenge handling
- imap: Expanded mailbox SEARCH support to use URL query strings
- imap: Extended FETCH support to include PARTIAL URL specifier
- nss: implement non-blocking SSL handshake
- build: Reworked Visual Studio project files
- poll: enable poll on darwin13
- mk-ca-bundle: added -p
- libtests: add a wait_ms() function

Bugfixes:

- mkhelp: generate code for --disable-manual as well
- hostcheck: added a system include to define struct in_addr
- winbuild: added warnless.c to fix build
- Makefile.vc6: added warnless.c to fix build
- smtp: Fixed login denied when server does not support AUTH capability
- smtp: Fixed login denied with a RFC-821 based server
- curl: stop interpreting IPv6 literals as glob patterns
- http2: remove _DRAFT09 from the NPN_HTTP2 enum
- http2: let openssl mention the exact protocol negotiated
- http2+openssl: fix compiler warnings in ALPN using code
- ftp: in passive data connect wait for happy eyeballs sockets
- HTTP: do not send Content-Length: 0 _and_ Expect: 100-continue
- http2: Compile with current nghttp2, which supports h2-11
- http_negotiate_sspi: Fixed compilation when USE_HTTP_NEGOTIATE not defined
- strerror: fix comment about vxworks' strerror_r buffer size
- url: only use if_nametoindex() if IFNAMSIZ is available
- imap: Fixed untagged response detection when no data after command
- various: fix possible dereference of null pointer
- various: fix use of uninitialized variable
- various: fix use of non-null-terminated strings
- telnet.c: check sscanf results before passing them to snprintf
- parsedate.c: check sscanf result before passing it to strlen
- sockfilt.c: free memory in case of memory allocation errors
- sockfilt.c: ignore non-key-events and continue waiting for input
- sockfilt.c: properly handle disk files, pipes and character input
- sockfilt.c: fixed getting stuck waiting for MinGW stdin pipe
- sockfilt.c: clean up threaded approach and add documentation
- configure: use the nghttp2 path correctly with pkg-config
- curl_global_init_mem: bump initialized even if already initialized
- gtls: fix NULL pointer dereference
- cyassl: Use error-ssl.h when available
- handler: make `protocol` always specified as a single bit
- INFILESIZE: fields in UserDefined must not be changed runtime
- openssl: biomem->data is not null-terminated
- config-win32.h: Fixed HAVE_LONGLONG for Visual Studio .NET 2003 and up
- curl_ntlm_core: Fixed use of long long for VC6 and VC7
- SNI: strip off a single trailing dot from hostname
- curl: bail on cookie use when built with disabled cookies
- curl_easy_setopt.3: added the proto for CURLOPT_SSH_KNOWNHOSTS
- curl_multi_cleanup: ignore SIGPIPE better
- schannel: do not use the connect-timeout during send
- mprintf: allow %.s with data not being null-terminated
- tool_help: Fixed missing --login-options option
- configure: do not set LD_LIBRARY_PATH when cross-compiling
- http: auth failure on duplicated `WWW-Authenticate: Negotiate` header
- cacertinmem: fix memory leak
- lib1506: make sure the transfers are not within the same ms
- Makefile.b32: Fixed for vtls changes
- sasl: Fixed missing qop in the client's challenge-response message
- openssl: unbreak PKCS12 support
- darwinssl: fix potential crash with a P12 file
- timers: fix timer regression involving redirects / reconnects
- CURLINFO_SSL_VERIFYRESULT: made more reliable
- HTTP: fixed connection reuse
- configure: add SPNEGO to supported features
- configure: add GSS-API to supported features
- ALPN: fix typo in http/1.1 identifier
- http2: make connection reuse work

## Fixed in 7.36.0 - March 26 2014

7.36.0
7.36.0 changes only

Changes:

- ntlm: Added support for NTLMv2
- tool: Added support for URL specific options
- openssl: add ALPN support
- gtls: add ALPN support
- nss: add ALPN and NPN support
- added CURLOPT_EXPECT_100_TIMEOUT_MS
- tool: add --no-alpn and --no-npn
- added CURLOPT_SSL_ENABLE_NPN and CURLOPT_SSL_ENABLE_ALPN
- winssl: enable TLSv1.1 and TLSv1.2 by default
- winssl: TLSv1.2 disables certificate signatures using MD5 hash
- winssl: enable hostname verification of IP address using SAN or CN
- darwinssl: do not omit CN verification when an IP address is used
- http2: build with current nghttp2 version
- polarssl: dropped support for PolarSSL < 1.3.0
- openssl: info message with SSL version used

Bugfixes:

- SECURITY ADVISORY: wrong reuse of connections
- SECURITY ADVISORY: IP address wildcard certificate validation
- SECURITY ADVISORY: not verifying certs for TLS to IP address / Darwinssl
- SECURITY ADVISORY: not verifying certs for TLS to IP address / Winssl
- nss: allow to use ECC ciphers if NSS implements them
- netrc: Fixed a memory leak in an OOM condition
- ftp: fixed a memory leak on wildcard error path
- pipeline: Fixed a NULL pointer dereference on OOM
- nss: prefer highest available TLS version
- 100-continue: fix timeout condition
- ssh: Fixed a NULL pointer dereference on OOM condition
- formpost: use semicolon in multipart/mixaed
- --help: add missing --tlsv1.x options
- formdata: Fixed memory leak on OOM condition
- ConnectionExists: reusing possible HTTP+NTLM connections better
- mingw32: fix compilation
- chunked decoder: track overflows correctly
- curl_easy_setopt.3: add CURL_HTTP_VERSION_2_0
- dict: fix memory leak in OOM exit path
- valgrind: added suppression on optimized code
- curl: output protocol headers using binary mode
- tool: Added URL index to password prompt for multiple operations
- ConnectionExists: reuse non-NTLM connections better
- axtls: call ssl_read repeatedly
- multi: make MAXCONNECTS default 4 x number of easy handles function
- configure: Fix the --disable-crypto-auth option
- multi: ignore SIGPIPE internally
- curl.1: update the description of --tlsv1
- SFTP: skip reading the diectoryr when NOBODY=1
- easy: Fixed a memory leak on OOM condition
- tool: Fixed incorrect return code when setting HTTP request fails
- configure: Tiny fix to honor POSIX
- tool: Do not output libcurl source for the information only parameters
- Rework Open Watcom make files to use standard Wmake features
- x509asn: moved out Curl_verifyhost from NSS builds
- configure: call it GSS-API
- hostcheck: Curl_cert_hostcheck is not used by NSS builds
- multi_runsingle: move timestamp into INIT
- remote_port: allow connect to port 0
- parse_remote_port: error out on illegal port numbers better
- ssh: Pass errors from libssh2_sftp_read up the stack
- docs: remove documentation on setting up krb4 support
- polarssl: build fixes to work with PolarSSL 1.3.x
- polarssl: fix possible handshake timeout issue in multi
- nss: allow to enable/disable cipher-suites better
- ssh: prevent a logic error that could result in an infinite loop
- http2: free resources on disconnect
- polarssl: avoid extra newlines in debug messages
- rtsp: parse "Session:" header properly
- trynextip: do not store `ai` on failed connects
- Curl_cert_hostcheck: strip trailing dots in hostname and wildcard

## Fixed in 7.35.0 - January 29 2014

7.35.0
7.35.0 changes only

Changes:

- imap/pop3/smtp: Added support for SASL authentication downgrades
- imap/pop3/smtp: Extended the login options to support multiple auth mechanisms
- TheArtOfHttpScripting: major update, converted layout and more
- mprintf: Added support for I, I32 and I64 size specifiers
- makefile: Added support for VC7, VC11 and VC12

Bugfixes:

- SECURITY ADVISORY: reuse of wrong HTTP NTLM connection
- curl_easy_setopt: Fixed OAuth 2.0 Bearer option name
- pop3: Fixed APOP being determined by CAPA response rather than by timestamp
- Curl_pp_readresp: null-terminate line
- FILE: do not wait due to CURLOPT_MAX_RECV_SPEED_LARGE
- docs: mention CURLOPT_MAX_RECV/SEND_SPEED_LARGE do not work for FILE://
- pop3: Fixed auth preference not being honored when CAPA not supported
- imap: Fixed auth preference not being honored when CAPABILITY not supported
- threaded resolver: Use pthread_t * for curl_thread_t
- FILE: we do not support paused transfers using this protocol
- connect: Try all addresses in first connection attempt
- curl_easy_setopt.3: Added SMTP information to CURLOPT_INFILESIZE_LARGE
- OpenSSL: Fix forcing SSLv3 connections
- openssl: allow explicit sslv2 selection
- FTP parselist: fix "total" parser
- conncache: fix possible dereference of null pointer
- multi.c: fix possible dereference of null pointer
- mk-ca-bundle: introduces -d and warns about using this script
- ConnectionExists: fix NTLM check for new connection
- trynextip: fix build for non-IPV6 capable systems
- Curl_updateconninfo: do not do anything for UDP "connections"
- darwinssl: un-break Leopard build after PKCS#12 change
- threaded-resolver: never use NULL hints with getaddrinf
- multi_socket: remind app if timeout did not run
- OpenSSL: deselect weak ciphers by default
- error message: Sensible message on timeout when transfer size unknown
- curl_easy_setopt.3: mention how to unset CURLOPT_INFILESIZE*
- win32: Fixed use of deprecated function `GetVersionInfoEx` for VC12
- configure: fix gssapi linking on HP-UX
- chunked-parser: abort on overflows, allow 64-bit chunks
- chunked parsing: relax the CR strictness
- cookie: max-age fixes
- progress bar: always update when at 100%
- progress bar: increase update frequency to 10Hz
- tool: Fixed incorrect return code if command line parser runs out of memory
- tool: Fixed incorrect return code if password prompting runs out of memory
- HTTP POST: omit Content-Length if data size is unknown
- GnuTLS: disable insecure ciphers
- GnuTLS: honor --slv2 and the --tlsv1[.N] switches
- multi: Fixed a memory leak on OOM condition
- netrc: Fixed a memory and file descriptor leak on OOM
- getpass: fix password parsing from console
- TFTP: fix crash on time-out
- hostip: do not remove DNS entries that are in use
- tests: lots of tests fixed to pass the OOM torture tests

## Fixed in 7.34.0 - December 17 2013

7.34.0
7.34.0 changes only

Changes:

- SSL: protocol version can be specified more precisely
- imap/pop3/smtp: Added graceful cancellation of SASL authentication
- Add "Happy Eyeballs" for IPv4/IPv6 dual connect attempts
- base64: Added validation of base64 input strings when decoding
- curl_easy_setopt: Added the ability to set the login options separately
- smtp: Added support for additional SMTP commands
- curl_easy_getinfo: Added CURLINFO_TLS_SESSION for accessing TLS internals
- nss: allow to use TLS > 1.0 if built against recent NSS
- SECURITY-PROCESS: added this document to describe our security processes
- parseconfig: warn if unquoted white spaces are detected

Bugfixes:

- SECURITY VULNERABILITY: libcurl cert name check ignore with GnuTLS
- darwinssl: un-break iOS build after PKCS#12 feature added
- tool: use XFERFUNCTION to save some casts
- usercertinmem: fix memory leaks
- ssh: Handle successful SSH_USERAUTH_NONE
- NSS: acknowledge the --no-sessionid/CURLOPT_SSL_SESSIONID_CACHE option
- test906: Fixed failing test on some platforms
- sasl: initialize NSS before using NTLM crypto
- sasl: Fixed memory leak in OAUTH2 message creation
- imap/pop3/smtp: Fixed QUIT / LOGOUT being sent when SSL connect fails
- cmake: unbreak for non-Windows platforms
- ssh: initialize per-handle data in ssh_connect()
- glob: fix broken URLs
- configure: check for long long when building with cyassl
- CURLOPT_RESOLVE: mention they do not time-out
- docs/examples/httpput.c: fix build for MSVC
- FTP: make the data connection work when going through proxy
- NSS: support for CERTINFO feature
- curl_multi_wait: accept 0 from multi_timeout() as valid timeout
- glob_range: pass the closing bracket for a-z ranges
- tool_help: Updated --list-only description to include POP3
- Curl_ssl_push_certinfo_len: do not %.*s non-zero-terminated string
- cmake: fix Windows build with IPv6 support
- ares: Fixed compilation under Visual Studio 2012
- curl_easy_setopt.3: clarify CURLOPT_SSL_VERIFYHOST documentation
- curl.1: mention that -O does no URL decoding
- darwinssl: PKCS#12 import feature now requires Lion or later
- darwinssl: check for SSLSetSessionOption() presence when toggling BEAST
- configure: Fix test with -Werror=implicit-function-declaration
- sigpipe: factor out sigpipe_reset from easy.c
- curl_multi_cleanup: ignore SIGPIPE
- globbing: curl glob counter mismatch with {} list use
- parseconfig: dash options cannot specified with colon or equals
- digest: fix CURLAUTH_DIGEST_IE
- curl.h: <sys/select.h> for OpenBSD
- darwinssl: Fix #if 10.6.0 for SecKeychainSearch
- TFTP: fix return codes for connect timeout
- login options: remove the ;[options] support from CURLOPT_USERPWD
- imap: Fixed incorrect fallback to clear text authentication
- parsedate: avoid integer overflow
- curl.1: document -J does not %-decode
- multi: add timer inaccuracy margin to timeout/connecttimeout

## Fixed in 7.33.0 - October 14 2013

7.33.0
7.33.0 changes only

Changes:

- test code for testing the event based API
- CURLM_ADDED_ALREADY: new error code
- test TFTP server: support "writedelay" within <servercmd>
- krb4 support has been removed
- imap/pop3/smtp: added basic SASL XOAUTH2 support
- darwinssl: add support for PKCS#12 files for client authentication
- darwinssl: enable BEAST workaround on iOS 7 & later
- Pass password to OpenSSL engine by user interface
- c-ares: Add support for various DNS binding options
- cookies: add expiration
- curl: added --oauth2-bearer option

Bugfixes:

- nss: make sure that NSS is initialized
- curl: make --no-[option] work properly for several options
- FTP: with socket_action send better socket updates in active mode
- curl: fix the --sasl-ir in the --help output
- tests 2032, 2033: do not hardcode port in expected output
- urlglob: better detect unclosed braces, empty lists and overflows
- urlglob: error out on range overflow
- imap: Fixed response check for SEARCH, EXPUNGE, LSUB, UID and NOOP commands
- handle arbitrary-length username and password
- TFTP: make the CURLOPT_LOW_SPEED* options work
- curl.h: name space pollution by "enum type"
- multi: move on from STATE_DONE faster
- FTP: 60 secs delay if aborted in the CURLOPT_HEADERFUNCTION callback
- multi_socket: improved 100-continue timeout handling
- curl_multi_remove_handle: allow multiple removes
- FTP: fix getsock during DO_MORE state
- -x: rephrased the --proxy section somewhat
- acinclude: fix --without-ca-path when cross-compiling
- LDAP: fix bad free() when URL parsing failed
- --data: mention CRLF treatment when reading from file
- curl_easy_pause: suggest one way to unpause
- imap: Fixed calculation of transfer when partial FETCH received
- pingpong: Check SSL library buffers for already read data
- imap/pop3/smtp: Speed up SSL connection initialization
- libcurl.3: for multi interface connections are held in the multi handle
- curl_easy_setopt.3: mention RTMP URL quirks
- curl.1: detail how short/long options work
- curl.1: Added information about optional login options to --user option
- curl: Added clarification to the --mail options in the --help output
- curl_easy_setopt.3: clarify that TIMEOUT and TIMEOUT_MS set the same value
- openssl: use correct port number in error message
- darwinssl: block TLS_RSA_WITH_NULL_SHA256 cipher
- OpenSSL: acknowledge CURLOPT_SSL_VERIFYHOST without VERIFYPEER
- xattr: add support for FreeBSD xattr API
- win32: fix Visual Studio 2010 build with WINVER >= 0x600
- configure: use icc options without space
- test1112: Increase the timeout from 7s to 16s
- SCP: upload speed on a fast connection limited to 16384 B/s
- curl_setup_once: fix errno access for lwip on Windows
- HTTP: Output http response 304 when modified time is too old

## Fixed in 7.32.0 - August 12 2013

7.32.0
7.32.0 changes only

Changes:

- curl: allow timeouts to accept decimal values
- OS400: add slist and certinfo EBCDIC support
- OS400: new SSL backend GSKit
- CURLOPT_XFERINFOFUNCTION: introducing a new progress callback
- LIBCURL-STRUCTS: new document

Bugfixes:

- dotdot: introducing dot file path cleanup
- docs: fix typo in curl_easy_getinfo man page
- test1230: avoid using hard-wired port number
- test1396: invoke the correct test tool
- SIGPIPE: ignored while inside the library
- darwinssl: fix crash that started happening in Lion
- OpenSSL: check for read errors, do not assume
- c-ares: improve error message on failed resolve
- printf: make sure %x are treated unsigned
- formpost: better random boundaries
- url: restore the functionality of `curl -u :`
- curl.1: fix typo in --xattr description
- digest: improve nonce generation
- configure: automake 1.14 compatibility tweak
- curl.1: document the --post303 option in the man page
- curl.1: document the --sasl-ir option in the man page
- setup-vms.h: sk_pop symbol tweak
- tool_paramhlp: try harder to catch negatives
- cmake: Fix for MSVC2010 project generation
- asyn-ares: do not blank ares servers if none configured
- curl_multi_wait: set revents for extra fds
- Reinstate WIN32 MemoryTracking: track wcsdup() _wcsdup() and _tcsdup()
- ftp_do_more: consider DO_MORE complete when server connects back
- curl_easy_perform: gradually increase the delay time
- curl: fix symbolic names for CURLUSESSL_* enum in --libcurl output
- curl: fix upload of a zip file in OpenVMS
- build: fix linking on Solaris 10
- curl_formadd: CURLFORM_FILECONTENT wrongly rejected some option combos
- curl_formadd: fix file upload on VMS
- curl_easy_pause: on unpause, trigger multi-socket handling
- md5 & metalink: use better build macros on Apple operating systems
- darwinssl: fix build error in crypto authentication under Snow Leopard
- curl: make --progress-bar update the line less frequently
- configure: do not error out on variable confusions (CFLAGS, LDFLAGS etc)
- mk-ca-bundle: skip more untrusted certificates
- formadd: wrong pointer for filename when CURLFORM_BUFFERPTR used
- FTP: when EPSV gets a 229 but fails to connect, retry with PASV
- mk-ca-bundle.1: do not install on make install
- VMS: lots of updates and fixes of the build procedure
- global dns cache: did not work (regression)
- global dns cache: fix memory leak

## Fixed in 7.31.0 - June 22 2013

7.31.0
7.31.0 changes only

Changes:

- darwinssl: add TLS session resumption
- darwinssl: add TLS crypto authentication
- imap/pop3/smtp: Added support for ;auth=<mech> in the URL
- imap/pop3/smtp: Added support for ;auth=<mech> to CURLOPT_USERPWD
- usercertinmem.c: add example showing user cert in memory
- url: Added smtp and pop3 hostnames to the protocol detection list
- imap/pop3/smtp: Added support for enabling the SASL initial response
- curl -E: allow to use `:` in certificate nicknames

Bugfixes:

- SECURITY VULNERABILITY: curl_easy_unescape() may parse data beyond the end of the input buffer
- FTP: access files in root directory correctly
- configure: try pthread_create without -lpthread
- FTP: handle a 230 welcome response
- curl-config: do not output static libs when they are disabled
- CURL_CHECK_CA_BUNDLE: do not check for paths when cross-compiling
- Various documentation updates
- getinfo.c: reset timecond when clearing session-info variables
- FILE: prevent an artificial timeout event due to stale speed-check data
- ftp_state_pasv_resp: connect through proxy also when set by env
- sshserver: disable StrictHostKeyChecking
- ftpserver: Fixed imap logout confirmation data
- curl_easy_init: use less mallocs
- smtp: Fixed unknown percentage complete in progress bar
- smtp: Fixed sending of double CRLF caused by first in EOB
- bindlocal: move brace out of #ifdef
- winssl: Fixed invalid memory access during SSL shutdown
- OS X framework: fix invalid symbolic link
- OpenSSL: allow empty server certificate subject
- axtls: prevent memleaks on SSL handshake failures
- cookies: only consider full path matches
- Revert win32 MemoryTracking: wcsdup() _wcsdup() and _tcsdup()
- Curl_cookie_add: handle IPv6 hosts
- ossl_send: SSL_write() returning 0 is an error too
- ossl_recv: SSL_read() returning 0 is an error too
- Digest auth: escape usernames with backslash or " in them
- curl_formadd.3: fixed wrong "end-marker" syntax
- libcurl-tutorial.3: fix incorrect backslash
- curl_multi_wait: reduce timeout if the multi handle wants to
- tests/Makefile: typo in the perlcheck target
- axtls: honor disabled VERIFYHOST
- OpenSSL: avoid double free in the PKCS12 certificate code
- multi_socket: reduce timeout inaccuracy margin
- digest: support auth-int for empty entity body
- axtls: now done non-blocking
- lib1900: use tutil_tvnow instead of gettimeofday
- curl_easy_perform: avoid busy-looping
- CURLOPT_COOKIELIST: take cookie share lock
- multi_socket: react on socket close immediately

## Fixed in 7.30.0 - April 12 2013

7.30.0
7.30.0 changes only

Changes:

- imap: Changed response tag generation to be completely unique
- imap: Added support for SASL-IR extension
- imap: Added support for the list command
- imap: Added support for the append command
- imap: Added custom request parsing
- imap: Added support to the fetch command for UID and SECTION properties
- imap: Added parsing and verification of the UIDVALIDITY mailbox attribute
- darwinssl: Make certificate errors less techy
- imap/pop3/smtp: Added support for the STARTTLS capability
- checksrc: ban use of sprintf, vsprintf, strcat, strncat and gets
- curl_global_init() now accepts the CURL_GLOBAL_ACK_EINTR flag
- Added CURLMOPT_MAX_HOST_CONNECTIONS, CURLMOPT_MAX_TOTAL_CONNECTIONS for new multi interface connection handling
- Added CURLMOPT_MAX_PIPELINE_LENGTH, CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, CURLMOPT_PIPELINING_SITE_BL and CURLMOPT_PIPELI NING_SERVER_BL for new pipelining control

Bugfixes:

- SECURITY ADVISORY: cookie tailmatching to avoid cross-domain leakage
- darwinssl: Fix build under Leopard
- DONE: consider callback-aborted transfers premature
- ntlm: Fixed memory leaks
- smtp: Fixed an issue when processing EHLO failure responses
- pop3: Fixed incorrect return value from pop3_endofresp()
- pop3: Fixed SASL authentication capability detection
- pop3: Fixed blocking SSL connect when connecting via POP3S
- imap: Fixed memory leak when performing multiple selects
- nss: fix misplaced code enabling non-blocking socket mode
- AddFormData: prevent only directories from being posted
- darwinssl: fix infinite loop if server disconnected abruptly
- metalink: fix improbable crash parsing metalink filename
- show proper hostname on failed resolve
- MacOSX-Framework: Make script work in Xcode 4.0 and later
- strlcat: remove function
- darwinssl: Fix send glitchiness with data > 32 or so KB
- polarssl: better 1.1.x and 1.2.x support
- various documentation improvements
- multi: NULL pointer reference when closing an unused multi handle
- SOCKS: fix socks proxy when noproxy matched
- install-sh: updated to support multiple source files as arguments
- PolarSSL: added human readable error strings
- resolver_error: remove wrong error message output
- docs: updates HTML index and general improvements
- curlbuild.h.dist: enhance non-configure GCC ABI detection logic
- sasl: Fixed null pointer reference when decoding empty digest challenge
- easy: do not ignore poll() failures other than EINTR
- darwinssl: disable ECC ciphers under Mountain Lion by default
- CONNECT: count received headers
- build: fixes for VMS
- CONNECT: clear `rewindaftersend` on success
- HTTP proxy: insert slash in URL if missing
- hiperfifo: updated to use current libevent API
- getinmemory.c: abort the transfer nicely if not enough memory
- improved win32 memorytracking
- corrected proxy header response headers count
- FTP quote operations on reused connection
- tcpkeepalive on win32
- tcpkeepalive on Mac OS X
- easy: acknowledge the CURLOPT_MAXCONNECTS option properly
- easy interface: restore default MAXCONNECTS to 5
- win32: do not set SO_SNDBUF for windows vista or later versions
- HTTP: made cookie sort function more deterministic
- winssl: Fixed memory leak if connection was not successful
- FTP: wait on both connections during active STOR state
- connect: treat a failed local bind of an interface as a non-fatal error
- darwinssl: disable insecure ciphers by default
- FTP: handle "rubbish" in front of directory name in 257 responses
- mk-ca-bundle: Fixed lost OpenSSL output with "-t"

## Fixed in 7.29.0 - February 6 2013

7.29.0
7.29.0 changes only

Changes:

- test: offer "automake" output and check for perl better
- always-multi: always use non-blocking internals
- imap: Added support for sasl digest-md5 authentication
- imap: Added support for sasl cram-md5 authentication
- imap: Added support for sasl ntlm authentication
- imap: Added support for sasl login authentication
- imap: Added support for sasl plain text authentication
- imap: Added support for login disabled server capability
- mk-ca-bundle: add -f, support passing to stdout and more
- writeout: -w now supports remote_ip/port and local_ip/port

Bugfixes:

- SECURITY ADVISORY: SASL buffer overflow vulnerability
- nss: prevent NSS from crashing on client auth hook failure
- darwinssl: Fixed inability to disable peer verification on Snow Leopard and Lion
- curl_multi_remove_handle: fix memory leak triggered with CURLOPT_RESOLVE
- SCP: relative path did not work as documented
- setup_once.h: HP-UX <sys/socket.h> issue workaround
- configure: fix cross pkg-config detection
- runtests: Do not add undefined values to @INC
- build: fix compilation with CURL_DISABLE_CRYPTO_AUTH flag
- multi: fix re-sending request on early connection close
- HTTP: remove stray CRLF in chunk-encoded content-free request bodies
- build: fix AIX compilation and usage of events/revents
- VC Makefiles: add missing hostcheck
- nss: clear session cache if a client certificate from file is used
- nss: fix error messages for CURLE_SSL_{CACERT,CRL}_BADFILE
- fix HTTP CONNECT tunnel establishment upon delayed response
- --libcurl: fix for non-zero default options
- FTP: reject illegal port numbers in EPSV 229 responses
- build: use per-target `_CPPFLAGS` for those currently using default
- configure: fix automake 1.13 compatibility
- curl: ignore SIGPIPE
- pop3: Added support for non-blocking SSL upgrade
- pop3: Fixed default authentication detection
- imap: Fixed usernames and passwords that contain escape characters
- packages/DOS/common.dj: remove COFF debug info generation
- imap/pop3/smtp: Fixed failure detection during TLS upgrade
- pop3: Fixed no known authentication mechanism when fallback is required
- formadd: reject trying to read a directory where a file is expected
- formpost: support quotes, commas and semicolon in filenames
- docs: update the comments about loading CA certs with NSS
- docs: fix typos in man pages
- darwinssl: Fix bug where packets were sometimes transmitted twice
- winbuild: include version info for .dll .exe
- schannel: Removed extended error connection setup flag
- VMS: fix and generate the VMS build config

## Fixed in 7.28.1 - November 20 2012

7.28.1
7.28.1 changes only

Changes:

- metalink/md5: Use CommonCrypto on Apple operating systems
- href_extractor: new example code extracting href elements
- NSS can be used for metalink hashing

Bugfixes:

- Fix broken libmetalink-aware OpenSSL build
- gnutls: fix the error is fatal logic
- darwinssl: un-broke iOS build, fix error on server disconnect
- asyn-ares: restore functionality with c-ares < 1.6.1
- tlsauthtype: deal with the string case insensitively
- Fixed MSVC libssh2 static build
- evhiperfifo: fix the pointer passed to WRITEDATA
- BUGS: fix the bug tracker URL
- winbuild: Use machine type of development environment
- FTP: prevent the multi interface from blocking
- uniformly use AM_CPPFLAGS, avoid deprecated INCLUDES
- httpcustomheader.c: free the headers after use
- fix >2000 bytes POST over NTLM-using proxy
- redirects to URLs with fragments
- do not send `#` fragments when using proxy
- OpenSSL: show full issuer string
- fix HTTP auth regression
- CURLOPT_SSL_VERIFYHOST: stop supporting the 1 value
- ftp: EPSV-disable fix over SOCKS
- Digest: Add microseconds into nounce calculation
- SCP/SFTP: improve error code used for send failures
- SSL: Several SSL-backend related fixes
- removed the notorious "additional stuff not fine" debug output
- OpenSSL: Disable SSL/TLS compression - avoid the "CRIME" attack
- FILE: Make upload-writes unbuffered
- custom memory callbacks failure with HTTP proxy (and more)
- TFTP: handle resends
- autoconf: do not force-disable compiler debug option
- winbuild: Fix PDB file output
- test2032: spurious failure caused by premature termination
- memory leak: CURLOPT_RESOLVE with multi interface

## Fixed in 7.28.0 - October 10 2012

7.28.0
7.28.0 changes only

Changes:

- SSH: added agent based authentication
- ftp: active conn, allow application to set sockopt after accept() call with CURLSOCKTYPE_ACCEPT
- multi: add curl_multi_wait()
- metalink: Added support for Microsoft Windows CryptoAPI
- md5: Added support for Microsoft Windows CryptoAPI
- parse_proxy: treat "socks://x" as a socks4 proxy
- socks: Added support for IPv6 connections through SOCKSv5 proxy

Bugfixes:

- WSAPoll disabled on Windows builds due to its bugs
- segfault on request retries
- curl-config: parentheses fix
- VC build: add define for openssl
- globbing: fix segfault when >9 globs were used
- fixed a few clang-analyzer warnings
- metalink: change code order to build with gnutls-nettle
- gtls: fix build failure by including nettle-specific headers
- change preferred HTTP auth on a handle previously used for another auth
- file: use fdopen() to avoid race condition
- Added DWANT_IDN_PROTOTYPES define for MSVC too
- verbose: fixed (nil) output of hostnames in reused connections
- metalink: Un-broke the build when building --with-darwinssl
- curl man page cleanup
- Avoid leak of local device string when reusing connection
- Curl_socket_check: fix return code for timeout
- nss: do not print misleading NSS error codes
- configure: remove the --enable/disable-nonblocking options
- darwinssl: add TLS 1.1 and 1.2 support, replace deprecated functions
- NTLM: reuse existing connection better
- schannel crash on multi and easy handle cleanup
- SOCKS: truly disable it if CURL_DISABLE_PROXY is defined
- mk-ca-bundle: detect start of trust section better
- gnutls: do not fail on non-fatal handshake errors
- SMTP: only send SIZE if supported
- ftpserver: respond with a 250 to SMTP EHLO
- ssh: do not crash if MD5 fingerprint is not provided by libssh2
- winbuild: Added support for building with SPNEGO enabled
- metalink: Fixed validation of binary files containing EOF
- setup.h: fixed for MS VC10 build
- cmake: use standard findxxx modules for cmake v2.8+
- HTTP_ONLY: disable more protocols
- Curl_reconnect_request: clear pointer on failure
- https.c example: remember to call curl_global_init()
- metalink: Filter resource URLs by type
- multi interface: CURLOPT_LOW_SPEED_* fix during rate limitation
- curl_schannel: Removed buffer limit and optimized buffer strategy

## Fixed in 7.27.0 - July 27 2012

7.27.0
7.27.0 changes only

Changes:

- nss: use human-readable error messages provided by NSS
- added --metalink for metalink download support
- pop3: Added support for sasl plain text authentication
- pop3: Added support for sasl login authentication
- pop3: Added support for sasl ntlm authentication
- pop3: Added support for sasl cram-md5 authentication
- pop3: Added support for sasl digest-md5 authentication
- pop3: Added support for apop authentication
- Added support for Schannel (Native Windows) SSL/TLS encryption
- Added support for Darwin SSL (Native Mac OS X and iOS)
- http: print reason phrase from HTTP status line on error

Bugfixes:

- pop3: Fixed the issue of having to supply the username for all requests
- configure: fix LDAPS disabling related misplaced closing parenthesis
- cmdline: made -D option work with -O and -J
- configure: Fix libcurl.pc and curl-config generation for static MingW* cross builds
- ssl: fix duplicated SSL handshake with multi interface and proxy
- winbuild: Fix Makefile.vc ignoring USE_IPV6 and USE_IDN flags
- OpenSSL: support longer certificate subject names
- openldap: OOM fixes
- log2changes.pl: fix the Version output
- lib554.c: use curl_formadd() properly
- urldata.h: fix cyassl build clash with wincrypt.h
- cookies: changed the URL in the cookiejar headers
- http-proxy: keep CONNECT connections alive (for NTLM)
- NTLM SSPI: fixed to work with unicode usernames and passwords
- OOM fix in the curl tool when cloning cmdline options
- fixed some examples to use curl_global_init() properly
- cmdline: stricter numerical option parser
- HTTP HEAD: do not force-close after response-headers
- test231: fix wrong -C use
- docs: switch to proper UTF-8 for text file encoding
- keepalive: DragonFly uses milliseconds
- HTTP Digest: Client's "qop" value should not be quoted
- make distclean works again

## Fixed in 7.26.0 - May 24 2012

7.26.0
7.26.0 changes only

Changes:

- nss: the minimal supported version of NSS bumped to 3.12.x
- nss: human-readable names are now provided for NSS errors if available
- add a manual page for mk-ca-bundle
- added --post303 and the CURL_REDIR_POST_303 option for CURLOPT_POSTREDIR
- smtp: Add support for DIGEST-MD5 authentication
- pop3: Added support for additional pop3 commands
- curl: -w now supports `filename_effective`

Bugfixes:

- nss: libcurl now uses NSS_InitContext() to prevent collisions if available
- URL parse: reject numerical IPv6 addresses outside brackets
- MD5: fix OOM memory leak
- OpenSSL cert: provide more details when cert check fails
- HTTP: empty chunked POST ended up in two zero size chunks
- fixed a regression when curl resolved to multiple addresses and the first is not supported [7]
- -# progress meter: avoid superfluous updates and duplicate lines
- headers: surround GCC attribute names with double underscores
- PolarSSL: correct return code for CRL matches
- PolarSSL: include version number in version string
- PolarSSL: add support for asynchronous connect
- mk-ca-bundle: revert the LWP usage
- IPv6 cookie domain: get rid of the first bracket before the second
- connect.c: return changed to CURLE_COULDNT_CONNECT when opensocket fails
- OpenSSL: Made cert hostname check conform to RFC 6125
- HTTP: reset expected DL/UL sizes on redirects
- CMake: fix Windows LDAP/LDAPS option handling
- CMake: fix MS Visual Studio x64 unsigned long long literal suffix
- configure: update detection logic of getaddrinfo() thread-safeness
- configure: check for gethostbyname in the watt lib
- curl-config.1: fix curl-config usage in example
- smtp: Fixed non-escaping of dot character at beginning of line
- MakefileBuild.vc: use the correct IDN variable
- autoconf: improve handling of versioned symbols
- curl.1: clarify -x usage
- curl: shorten user-agent
- smtp: issue with the multi-interface always sending postdata
- compile error with GnuTLS+Nettle fixed
- winbuild: fix IPv6 enabled build

## Fixed in 7.25.0 - March 22 2012

7.25.0
7.25.0 changes only

Changes:

- configure: add option disable --libcurl output
- --ssl-allow-beast and CURLOPT_SSL_OPTIONS added
- Added CURLOPT_TCP_KEEPALIVE, CURLOPT_TCP_KEEPIDLE, CURLOPT_TCP_KEEPINTVL
- curl: use new library-side TCP_KEEPALIVE options
- Added a new CURLOPT_MAIL_AUTH option
- Added support for --mail-auth
- --libcurl now also works with -F and more!

Bugfixes:

- --max-redirs: allow negative numbers as option value
- parse_proxy: bail out on zero-length proxy names
- configure: do not modify LD_LIBRARY_PATH for cross compiles
- curl_easy_reset: reset the referer string
- curl tool: do not abort glob-loop due to failures
- CONNECT: send correct Host: with IPv6 numerical address
- Explicitly link to the nettle/gcrypt libraries
- more resilient connection times among IP addresses
- winbuild: fix IPV6 and IDN options
- SMTP: Fixed error when using CURLOPT_CONNECT_ONLY
- cyassl: update to CyaSSL 2.0.x API
- smtp: Fixed an issue with the EOB checking
- pop3: Fixed drop of final CRLF in EOB checking
- smtp: Fixed an issue with writing postdata
- smtp: Added support for returning SMTP response codes
- CONNECT: fix ipv6 address in the Request-Line
- curl-config: only provide libraries with --libs
- LWIP: do not consider HAVE_ERRNO_H to be winsock
- ssh: tunnel through HTTP proxy if requested
- cookies: strip off [brackets] from numerical ipv6 hostnames
- libcurl docs: version corrections
- cmake: list_spaces_append_once failure
- resolve with c-ares: do not resolve IPv6 when not working
- smtp: changed error code for EHLO and HELO responses
- parsedate: fix a numeric overflow

## Fixed in 7.24.0 - January 24 2012

7.24.0
7.24.0 changes only

Changes:

- CURLOPT_QUOTE: SFTP supports the `*`-prefix now
- CURLOPT_DNS_SERVERS: set name servers if possible
- Add support for using nettle instead of gcrypt as gnutls backend
- CURLOPT_INTERFACE: avoid resolving interfaces names with magic prefixes
- Added CURLOPT_ACCEPTTIMEOUT_MS
- configure: add symbols versioning option --enable-versioned-symbols

Bugfixes:

- curl was vulnerable to a data injection attack for certain protocols CVE-2012-0036
- curl was vulnerable to a SSL CBC IV vulnerability when built to use OpenSSL
- SSL session share: move the age counter to the share object
- -J -O: use -O name if no Content-Disposition header comes!
- protocol_connect: show verbose connect and set connect time
- query-part: ignore the URI part for given protocols
- gnutls: only translate winsock errors for old versions
- POP3: fix end of body detection
- POP3: detect when LIST returns no mails
- TELNET: improved treatment of options
- configure: add support for pkg-config detection of libidn
- CyaSSL 2.0+ library initialization adjustment
- multi interface: only use non-NULL socker function pointer
- call opensocket callback properly for active FTP
- do not call close socket callback for sockets created with accept()
- differentiate better between host/proxy errors
- SSH: fix CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 and --hostpubmd5
- multi: handle timeouts on DNS servers by checking for new sockets
- CURLOPT_DNS_SERVERS: fix return code
- POP3: fixed escaped dot not being stripped out
- OpenSSL: check for the SSLv2 function in configure
- MakefileBuild: fix the static build
- create_conn: do not switch to HTTP protocol if tunneling is enabled
- multi interface: fix block when CONNECT_ONLY option is used
- Fix connection reuse for TLS upgraded connections
- multiple file upload with -F and custom type
- multi interface: active FTP connections are no longer blocking
- Android build fix
- timer: restore PRETRANSFER timing
- libcurl.m4: Fix quoting arguments of AC_LANG_PROGRAM
- appconnect time fixed for non-blocking connect ssl backends
- do not include SSL handshake into time spent waiting for 100-continue
- handle dns cache case insensitive
- use new hostname casing for subsequent HTTP requests
- CURLOPT_RESOLVE: avoid adding already present hostnames
- SFTP mkdir: use correct permission
- resolve: do not leak pre-populated dns entries
- --retry: Retry transfers on timeout and DNS errors
- negotiate with SSPI backend: use the correct buffer for input
- SFTP dir: increase buffer size counter to avoid cut off filenames
- TFTP: fix resending (again)
- c-ares: do not include getaddrinfo-using code
- FTP: CURLE_PARTIAL_FILE does not close the control channel
- win32-threaded-resolver: stop using a dummy socket
- OpenSSL: remove reference to openssl internal struct
- OpenSSL: SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG option no longer enabled
- OpenSSL: fix PKCS#12 certificate parsing related memory leak
- OpenLDAP: fix LDAP connection phase memory leak
- Telnet: Use correct file descriptor for telnet upload
- Telnet: Remove bogus optimization of telnet upload
- URL parse: username with ipv6 numerical address
- polarssl: show cipher suite name correctly with 1.1.0
- polarssl: havege_rand is not present in version 1.1.0 WARNING, we still use the old API which is said to be insecure
- gnutls: enforced use of SSLv3

## Fixed in 7.23.1 - November 17 2011

7.23.1
7.23.1 changes only

Bugfixes:

- Windows: curl would fail if it found no CA cert, unless -k was used. Even if a non-SSL protocol URL was used

## Fixed in 7.23.0 - November 15 2011

7.23.0
7.23.0 changes only

Changes:

- Empty headers can be sent in HTTP requests by terminating with a semicolon
- SSL session sharing support added to curl_share_setopt()
- Added support to MAIL FROM for the optional SIZE parameter
- smtp: Added support for NTLM authentication
- curl tool: code split into tool_*.[ch] files

Bugfixes:

- handle HTTP redirects to "https://hostname/path"
- SMTP without --mail-from caused segfault
- prevent extra progress meter headers between multiple files
- allow Content-Length to be replaced when sending HTTP requests
- curl now always sets postfieldsize to allow --data-binary and --data to be mixed in the same command line
- curl_multi_fdset: avoid FD_SET out of bounds
- lots of MinGW build tweaks
- Curl_gethostname: return un-qualified machine name
- fixed the openssl version number configure check
- nss: certificates from files are no longer looked up by file base names
- returning abort from the progress function when using the multi interface would not properly cancel the transfer and close the connection
- fix libcurl.m4 to not fail with modern gcc versions
- ftp: improved the failed PORT hostname resolved error message
- TFTP timeout and unexpected block adjustments
- HTTP and GOPHER test server-side connection closing adjustments
- fix endless loop upon transport connection timeout
- do not clobber errno on failed connect
- typecheck: allow NULL to unset CURLOPT_ERRORBUFFER
- formdata: ack read callback abort
- make --show-error properly position independent
- set the ipv6-connection boolean correctly on connect
- SMTP: fix end-of-body string escaping
- gtls: only call gnutls_transport_set_lowat with < gnutls-2.12.0
- HTTP: handle multiple auths in a single WWW-Authenticate line
- curl_multi_fdset: correct fdset with FTP PORT use
- windbuild: fix the static build
- fix builds with GnuTLS version 3
- fix calling of OpenSSL's ERR_remove_state(0)
- HTTP auth: fix proxy Negotiate bug when Negotiate not requested
- ftp PORT: do not hang if bind() fails
- -# would crash on terminals wider than 256 columns

## Fixed in 7.22.0 - September 13 2011

7.22.0
7.22.0 changes only

Changes:

- Added CURLOPT_GSSAPI_DELEGATION
- Added support for NTLM delegation to Samba's winbind daemon helper ntlm_auth
- Display notes from setup file in testcurl.pl
- BSD-style lwIP TCP/IP stack experimental support on Windows
- OpenSSL: Use SSL_MODE_RELEASE_BUFFERS if available
- --delegation was added to set CURLOPT_GSSAPI_DELEGATION
- nss: start with no database if the selected database is broken
- telnet: allow programmatic use on Windows

Bugfixes:

- curl_getdate: detect some illegal dates better
- when sending a request and an error is received before the (entire) request body is sent, stop sending the request and close the connection after having received the entire response. This is equally true if an Expect: 100-continue header was used.
- When using both -J and a single -O with multiple URLs, a missing init could cause a segfault
- -J fixed for escaped quotes
- -J fixed for filenames with semicolons
- progress: reset flags at transfer start to avoid wrong CURLINFO_CONTENT_LENGTH_DOWNLOAD
- curl_gssapi: Guard files with HAVE_GSSAPI and rename private header
- silence picky compilers: mark unused parameters
- help output: more gnu like output
- libtests: stop checking for CURLM_CALL_MULTI_PERFORM
- setting a non-HTTP proxy with an environment variable or with CURLOPT_PROXY / --proxy (without specifying CURLOPT_PROXYTYPE) would still make it do proxy-like HTTP requests
- CURLFORM_BUFFER: insert filename as documented (regression)
- SOCKS: fix the connect timeout
- ftp_doing: bail out on error properly while multi interfacing
- improved Content-Encoded decoding error message
- asyn-thread: check for dotted addresses before thread starts
- cmake: find winsock when building on windows
- Curl_retry_request: check return code
- cookies: handle `secure=` as if it was `secure`
- tests: break busy loops in tests 502, 555, and 573
- FTP: fix proxy connect race condition with multi interface and SOCKS proxy
- RTSP: GET_PARAMETER requests have a body
- fixed several memory leaks in OOM situations
- bad expire(0) caused multi_socket API to hang
- Avoid ftruncate() static define with mingw64
- mk-ca-bundle.pl: ignore untrusted certs
- builds with PolarSSL 1.0.0

## Fixed in 7.21.7 - June 23 2011

7.21.7
7.21.7 changes only

Changes:

- recognize the [protocol]:// prefix in proxy hosts where the protocol is one of socks4, socks4a, socks5 or socks5h.
- Added CURLOPT_CLOSESOCKETFUNCTION and CURLOPT_CLOSESOCKETDATA

Bugfixes:

- SECURITY ADVISORY: inappropriate GSSAPI delegation
- NTLM: work with unicode
- fix connect with SOCKS proxy when using the multi interface
- anyauthput.c: stdint.h must not be included unconditionally
- CMake: improved build
- SCP/SFTP enable non-blocking earlier
- GnuTLS handshake: fix timeout
- cyassl: build without filesystem
- HTTPS over HTTP proxy using the multi interface
- speedcheck: invalid timeout event on a reused handle
- Force connection close for HTTP 200 OK when time condition matched
- curl_formget: fix FILE * leak
- configure: improved OpenSSL detection
- Android build: support gingerbread
- CURLFORM_STREAM: acknowledge CURLFORM_FILENAME
- windows build: use correct MS CRT
- pop3: remove extra space in LIST command

## Fixed in 7.21.6 - April 22 2011

7.21.6
7.21.6 changes only

Changes:

- Added --tr-encoding and CURLOPT_TRANSFER_ENCODING

Bugfixes:

- curl-config: fix --version
- curl_easy_setopt.3: CURLOPT_PROXYTYPE clarification
- use HTTPS properly after CONNECT
- SFTP: close file before post quote operations

## Fixed in 7.21.5 - April 17 2011

7.21.5
7.21.5 changes only

Changes:

- SOCKOPTFUNCTION: callback can say already-connected
- Added --netrc-file
- Added (new) support for cyassl
- TLS-SRP: enabled with OpenSSL
- Added CURLE_NOT_BUILT_IN and CURLE_UNKNOWN_OPTION

Bugfixes:

- nss: avoid memory leak on SSL connection failure
- nss: do not ignore failure of SSL handshake
- multi: better failed connect handling when using FTP, SMTP, POP3 and IMAP
- runtests.pl: fix pid number concatenation that prevented it from killing the correct process at times
- PolarSSL: Return 0 on receiving TLS CLOSE_NOTIFY alert
- curl_easy_setopt.3: Removed wrong reference to CURLOPT_USERPASSWORD
- multi: close connection on timeout
- IMAP in multi mode does SSL connections non-blocking
- honours the --disable-ldaps configure option
- Force setopt constants written by --libcurl to be long
- ssh_connect: treat libssh2 return code better
- SFTP upload could stall the state machine when the multi_socket API was used
- SFTP and SCP could leak memory when used with the multi interface and the connection was closed
- Added missing file to repair the MSVC makefiles
- Fixed detection of recvfrom arguments on Android/bionic
- GSS: handle reuse fix
- transfer: avoid insane conversion of time_t
- nss: do not ignore value of CURLOPT_SSL_VERIFYPEER in certain cases
- SMTP-multi: non-blocking connect
- SFTP-multi: set cselect for sftp and scp to fix "stall" risk
- configure: removed wrongly claimed default paths
- pop3: fixed torture tests to succeed
- symbols-in-versions: many corrections
- if an HTTP request gets retried because the connection was dead, rewind if any data was sent as part of it
- only probe for working ipv6 once and then reuse that info for further requests
- requests that are asked to bound to a local interface/port no longer wrongly reuses connections that are not
- libcurl.m4: Add missing quotes in AC_LINK_IFELSE
- progress output: do not print the last update on a separate line
- POP3: the command to send is STLS, not STARTTLS
- POP3: PASS command was not sent after upgrade to TLS
- configure: fix libtool warning
- nss: allow to use multiple client certificates for a single host
- HTTP pipelining: Fix handling of zero-length responses
- do not list NTLM in curl-config when HTTP is disabled
- curl_easy_setopt.3: CURLOPT_RESOLVE typo version
- OpenSSL: build fine with no-sslv2 versions
- checkconnection: do not call with NULL pointer with RTSP and multi interface
- Borland makefile updates
- configure: libssh2 link fix without pkg-config
- certinfo crash
- CCC crash

## Fixed in 7.21.4 - February 17 2011

7.21.4
7.21.4 changes only

Changes:

- CURLINFO_FTP_ENTRY_PATH now supports SFTP
- introduced new framework for unit-testing
- IDN: use win32 API if told to
- ares: ask for both IPv4 and IPv6 addresses
- HTTP: do Negotiate authentication using SSPI on windows
- Windows build: alternative makefile
- TLS-SRP: support added when using GnuTLS
- added support for axTLS

Bugfixes:

- SMTP: add brackets for MAIL FROM
- ossl_seed: no more RAND_screen (on Windows)
- multi: connect fail => use next IP address
- use the timeout when using multiple IP addresses similar to how the easy interface does it
- cookies: tricked dotcounter fixed
- pubkey_show: allocate buffer to fit any-size result
- Curl_nss_connect: avoid PATH_MAX
- Curl_do: avoid using stale conn pointer
- tftpd test server: avoid buffer overflow report from glibc
- nss: avoid CURLE_OUT_OF_MEMORY given a filename without any slash
- nss: fix a bug in handling of CURLOPT_CAPATH
- CMake: Use upstream CheckTypeSize module
- OpenSSL get_cert_chain: support larger data sets
- SCP/SFTP transfers: acknowledge speedcheck
- GnuTLS builds: fix memory leak
- connect problem: use UDP correctly
- Borland C++ makefile tweaks
- OpenSSL: improved error message on SSL_CTX_new failures
- HTTP: memory leak on multiple Location:
- ares_query_completed_cb: do not touch invalid data
- ares: memory leak fix
- mk-ca-bundle: use new cacert URL
- Curl_gmtime: added a portable gmtime and check for NULL
- curl.1: typo in -v description
- CURLOPT_SOCKOPTFUNCTION: return proper error code
- --keepalive-time: warn if not supported properly
- file: add support for CURLOPT_TIMECONDITION
- nss: avoid memory leaks and failure of NSS shutdown
- multi: fix CURLM_STATE_TOOFAST for multi_socket

## Fixed in 7.21.3 - December 15 2010

7.21.3
7.21.3 changes only

Changes:

- Added --noconfigure switch to testcurl.pl
- Added --xattr option
- Added CURLOPT_RESOLVE and --resolve
- Added CURLAUTH_ONLY
- Added version-check.pl to the examples dir

Bugfixes:

- check for libcurl features for some command line options
- Curl_setopt: disallow CURLOPT_USE_SSL without SSL support
- http_chunks: remove debug output
- URL-parsing: consider ? a divider
- SSH: avoid using the libssh2_ prefix
- SSH: use libssh2_session_handshake() to work on win64
- ftp: prevent server from hanging on closed data connection when stopping a transfer before the end of the full transfer (ranges)
- LDAP: detect non-binary attributes properly
- ftp: treat server's response 421 as CURLE_OPERATION_TIMEDOUT
- gnutls->handshake: improved timeout handling
- security: Pass the right parameter to init
- krb5: Use GSS_ERROR to check for error
- TFTP: resend the correct data
- configure: fix autoconf 2.68 warning: no AC_LANG_SOURCE call detected
- GnuTLS: now detects socket errors on Windows
- symbols-in-versions: updated en masse
- added a couple examples that were missing from the tar ball
- Curl_send/recv_plain: return errno on failure
- Curl_wait_for_resolv (for c-ares): correct timeout
- ossl_connect_common: detect connection reuse
- configure: Prevent link errors with --librtmp
- openldap: use remote port in URL passed to ldap_init_fd()
- url: provide dead_connection flag in Curl_handler::disconnect
- lots of compiler warning fixes
- ssh: fix a download resume point calculation
- fix getinfo CURLINFO_LOCAL* for reused connections
- multi: the returned running handles conuter could turn negative
- multi: only ever consider pipelining for connections doing HTTP(S)

## Fixed in 7.21.2 - October 13 2010

7.21.2
7.21.2 changes only

Changes:

- curl -T: ignore file size of special files
- Added GOPHER protocol support
- Added mk-ca-bundle.vbs script
- c-ares build now requires c-ares >= 1.6.0

Bugfixes:

- --remote-header-name security vulnerability fixed
- multi: support the timeouts correctly, fixes known bug #62
- multi: use timeouts properly for MAX_RECV/SEND_SPEED
- negotiation: Wrong proxy authorization
- multi: avoid sending multiple complete messages
- cmdline: make -F type= accept ;charset=
- RESUME_FROM: clarify what ftp uploads do
- http: handle trailer headers in all chunked responses
- Curl_is_connected: use correct errno
- Added SSPI build to Watcom makefile
- progress: callback for POSTs less than MAX_INITIAL_POST_SIZE
- linking problem on Fedora 13
- Link curl and the test apps with -lrt explicitly when necessary
- chunky parser: only rewind stream internally if needed
- remote-header-name: do not output filename when NULL
- Curl_timeleft: avoid returning "no timeout" by mistake
- timeout: use the correct start value as offset
- FTP: fix wrong timeout trigger
- buildconf got better output on failures
- rtsp: avoid SIGSEGV on malformed header
- LDAP: Support for tunnelling queries through HTTP proxy
- configure's --enable-werror had a bashism
- test565: do not hardcode IP:PORT
- configure: check for gcrypt if using GnuTLS
- configure: do not enable RTMP if the lib detect fails
- curl_easy_duphandle: clone the c-ares handle correctly
- MacOSX-Framework: updates for Snowleopard
- support URL containing colon without trailing port number
- parsedate: allow time specified without seconds
- curl_easy_escape: do not escape "unreserved" characters
- SFTP: avoid downloading negative sizes
- Lots of GSS/KRB FTP fixes
- TFTP: Work around tftpd-hpa upload bug
- libcurl.m4: several fixes
- HTTP: remove special case for 416
- examples: use example.com in example URLs
- globbing: fix crash on unballanced open brace
- cmake: build fixed

## Fixed in 7.21.1 - August 11 2010

7.21.1
7.21.1 changes only

Changes:

- maketgz: produce CHANGES automatically
- added support for NTLM authentication when compiled with NSS
- build: Enable configure --enable-werror
- curl-config: --built-shared returns shared info

Bugfixes:

- configure: spell --disable-threaded-resolver correctly
- multi: call the progress callback in all states
- multi: unmark handle as used when no longer head of pipeline
- sendrecv: treat all negative values from send/recv as errors
- ftp-wildcard: avoid tight loop when used without any pattern
- multi_socket: reuse of same socket without notifying app
- ftp wildcard: FTP LIST parser FIX
- urlglobbing backslash escaping bug
- build: add enable IPV6 option for the VC makefiles
- multi: CURLINFO_LASTSOCKET does not work after remove_handle
- --libcurl: use *_LARGE options with typecasted constants
- --libcurl: hide setopt() calls setting default options
- curl: avoid setting libcurl options to its default
- --libcurl: list the tricky options instead of using [REMARK]
- http: do not enable chunked during authentication negotiations
- upload: warn users trying to upload from stdin with anyauth
- configure: allow environments variable to override internals
- threaded resolver: fix timeout issue
- multi: fix condition that remove timers before trigger
- examples: add curl_multi_timeout
- --retry: access violation with URL part sets continued
- ssh: Fix compile error on 64-bit systems.
- remote-header-name: chop filename at next semicolon
- ftp: response timeout bug in "quote" sending
- CUSTOMREQUEST: should not be disabled when HTTP is disabled
- Watcom makefiles overhaul.
- NTLM tests: boost coverage by forcing the hostname
- multi: fix FTPS connecting the data connection with OpenSSL
- retry: consider retrying even if -f is used
- fix SOCKS problem when using multi interface
- typecheck-gcc: add checks for recently added options
- SCP: send large files properly with new enough libssh2
- multi_socket: set timeout for 100-continue
- ";type=" URL suffix over HTTP proxy
- acknowledge progress callback error returns during connect
- Watcom makefile fixes
- runtests: clear old setenv remainders before test

## Fixed in 7.21.0 - June 16 2010

7.21.0
7.21.0 changes only

Changes:

- added the --proto and -proto-redir options
- new configure option --enable-threaded-resolver
- improve TELNET ability with libcurl
- added support for PolarSSL
- added support for FTP wildcard matching and downloads
- added support for RTMP
- introducing new LDAP code for new enough OpenLDAP
- OpenLDAP support enabled for cygwin builds
- added CURLINFO_PRIMARY_PORT, CURLINFO_LOCAL_IP and CURLINFO_LOCAL_PORT

Bugfixes:

- prevent needless reverse name lookups
- detect GSS on ancient Linux distros
- GnuTLS: EOF caused error when it was not
- GnuTLS: SSL handshake phase is non-blocking
- -J/--remote-header-name strips CRLF
- MSVC makefiles now use ws2_32.lib instead of wsock32.lib
- -O crash on windows
- SSL handshake timeout underflow in libcurl-NSS
- multi interface missed storing connection time
- broken CRL support in libcurl-NSS
- ignore response-body on redirect even if compressed
- OpenSSL handshake state-machine for multi interface
- TFTP timeout option sent correctly
- TFTP block id wrap
- curl_multi_socket_action() timeout handles inaccuracy in timers better
- SCP/SFTP failure to respect the timeout
- spurious SSL connection aborts with OpenSSL

## Fixed in 7.20.1 - April 14 2010

7.20.1
7.20.1 changes only

Changes:

- The `ares` subtree has been removed from the source repository
- smoother rate limiting
- allow user+password in the URL for all protocols
- POP3: Get message listing if no mailbox in URL

Bugfixes:

- VMS builder bad behavior when used in a batch job
- multiple recipients with SMTP
- fixed the CURL_FORMAT_* defines when building with cmake
- missing quote in libcurl.m4
- SMTP: now waits for 250 after the DATA transfer
- SMTP: use angle brackets in RCPT TO
- curl --trace-time not using local time
- off-by-one in the chunked encoding trailer parser
- superfluous blocking for OpenSSL-based SSL connects and multi interface
- TFTP upload
- FTP timeouts after file transferred completely
- skip poll() on Interix
- CURLOPT_CERTINFO memory leak
- sub-second timeouts improvements
- configure fixes for GSSAPI
- threaded resolver double free when closing curl handle
- configure fixes for building with the clang compiler
- easy interix rate limiting logic
- curl_multi_remove_handle() caused use after free
- TFTP improved error codes
- TFTP fixed TSIZE handling for uploads
- SSL possible double free when reusing curl handle
- alarm()-based DNS timeout bug
- reused FTP connection multi interface crash
- chunked-encoding with Content-Length: header problem
- multi interface HTTP POST over a proxy using PROXYTUNNEL
- RTSP GET_PARAMETER
- timeout after last data chunk was handled
- SFTP download hang
- FTP quote commands prefixed with `*` now can fail without aborting

## Fixed in 7.20.0 - February 9 2010

7.20.0
7.20.0 changes only

Changes:

- support SSL_FILETYPE_ENGINE for client certificate
- curl-config can now show the arguments used when building curl
- non-blocking TFTP
- send Expect: 100-continue for POSTs with unknown sizes
- added support for IMAP(S), POP3(S), SMTP(S) and RTSP
- added new curl_easy_setopt() options for SMTP and RTSP
- added --mail-from and --mail-rcpt for SMTP
- VMS build system enhancements
- added support for the PRET ftp command
- curl supports --ssl and --ssl-reqd
- added -J/--remote-header-name for using server-provided filename with -O
- enhanced asynchronous DNS lookups
- symbol CURL_FORMAT_OFF_T is obsoleted

Bugfixes:

- progress meter percentage and transfer time estimates fixes
- portability enhancement for OSes without orthogonal directory tree structure
- progress meter/callback during FTP connection
- DNS cache timeout while transfer in progress
- compilation when configured --with-gssapi having GNU GSS installed
- SSL connection reused with mismatched protection level
- configure --with-nss is set but not "yes"
- do not store LDFLAGS in pkg-config file
- never-pruned DNS cached entries
- HTTP proxy tunnel reused connection even if tunnel got disabled
- SSL lib post-close write
- curl failed to report write errors for tiny failed downloads
- TFTP BLKSIZE
- Expect: 100-continue handling when set by the application
- multi interface with OpenSSL read already freed memory when closing down
- --retry did not do right for FTP transient errors
- some *_proxy environment variables did not function
- libcurl-OpenSSL engine cleanup
- header include fix for FreeBSD versions before v8
- fragment part of URLs are no longer sent to the server
- progress callback called repeatedly with c-ares for resolving
- OpenSSL session id ref count leak
- progress callback called repeatedly during slow connects
- curl_multi_fdset() would return -1 too often during SCP/SFTP transfers
- FTP file size checks with ASCII transfers
- HTTP Cookie: headers sort cookies based on specified path lengths
- CURLM_CALL_MULTI_PERFORM fix for multi socket timeout calls
- libcurl data callback excessive length

## Fixed in 7.19.7 - November 4 2009

7.19.7
7.19.7 changes only

Changes:

- -T. is now for non-blocking uploading from stdin
- SYST handling on FTP for OS/400 FTP server cases
- libcurl refuses to read a single HTTP header longer than 100K
- added the --crlfile option to curl

Bugfixes:

- The windows makefiles work again
- libcurl-NSS acknowledges verifyhost
- SIGSEGV when pipelined pipe unexpectedly breaks
- data corruption issue with re-connected transfers
- use after free if we are completed but easy_conn not NULL (pipelined)
- missing strdup() return code check
- CURLOPT_PROXY_TRANSFER_MODE could pass along wrong syntax
- configure --with-gnutls=PATH fixed
- ftp response reader bug on failed control connections
- improved NSS error message on failed hostname verifications
- ftp NOBODY on reused connection hang
- configure uses pkg-config for cross-compiles as well
- improved NSS detection in configure
- cookie expiry date at 1970-jan-1 00:00:00
- libcurl-OpenSSL failed to verify some certs with Subject Alternative Name
- libcurl-OpenSSL can load CRL files with more than one certificate inside
- received cookies without explicit path got saved wrong if the URL had a query part
- do not shrink SO_SNDBUF on windows for those who have it set large already
- connect next bug
- invalid filename characters handling on Windows
- double close() on the primary socket with libcurl-NSS
- GSS negotiate infinite loop on bad credentials
- memory leak in SCP/SFTP connections
- use pkg-config to find out libssh2 installation details in configure
- unparsable cookie expire dates make cookies get treated as session coookies
- POST with Digest authentication and "Transfer-Encoding: chunked"
- SCP connection reuse with wrong auth
- CURLINFO_CONTENT_LENGTH_DOWNLOAD for 0 bytes transfers
- CURLINFO_SIZE_DOWNLOAD for ldap transfers (-w size_download)

## Fixed in 7.19.6 - August 12 2009

7.19.6
7.19.6 changes only

Changes:

- CURLOPT_FTPPORT (and curl's -P/--ftpport) support port ranges
- Added CURLOPT_SSH_KNOWNHOSTS, CURLOPT_SSH_KEYFUNCTION, CURLOPT_SSH_KEYDATA
- CURLOPT_QUOTE, CURLOPT_POSTQUOTE and CURLOPT_PREQUOTE can be told to ignore error responses when used with FTP

Bugfixes:

- crash on bad socket close with FTP
- leaking cookie memory when duplicate domains or paths were used
- build fix for Symbian
- CURLOPT_USERPWD set to NULL clears auth credentials
- libcurl-NSS build fixes
- configure script fixed for VMS
- set Content-Length: with POST and PUT failed with NTLM auth
- allow building libcurl for VxWorks
- curl tool exit codes fixed for VMS
- --no-buffer treated correctly
- djgpp build fix
- configure detection of GnuTLS now based on pkg-config as well
- libcurl-NSS client cert handling segfaults
- curl uploading from stdin/pipes now works in non-blocking way so that it continues the downloading even when the read stalls
- ftp credentials are added to the URL if needed for http proxies
- curl -o - sends data to stdout using binary mode on windows
- fixed the separators for "array" style string that CURLINFO_CERTINFO returns
- auth problem over several hosts with reused connection
- improved the support for client certificates in libcurl+NSS
- fix leak in gtls code
- missing algorithms in libcurl+OpenSSL
- with noproxy set you could still get a proxy if a proxy env was set
- rand seeding on libcurl on windows built with OpenSSL was not thread-safe
- fixed the zero byte inserted in cert name flaw in libcurl+OpenSSL
- do not try SNI with SSLv2 or SSLv3 (OpenSSL and GnuTLS builds)
- libcurl+OpenSSL would wrongly acknowledge a cert if CN matched but subjectAltName did not
- TFTP upload sent illegal TSIZE packets

## Fixed in 7.19.5 - May 18 2009

7.19.5
7.19.5 changes only

Changes:

- libcurl now closes all dead connections whenever you attempt to open a new connection
- libssh2's version number can now be figured out runtime instead of using the build-time fixed number
- CURLOPT_SEEKFUNCTION may now return CURL_SEEKFUNC_CANTSEEK
- curl can now upload with resume even when reading from a pipe
- a build-time configured curl_socklen_t is now used instead of socklen_t

Bugfixes:

- NTLM authentication memory leak on SSPI enabled Windows builds
- fixed the GnuTLS-using code to do correct return code checks
- an alloc-related call in the OpenSSL-using code did not check the return value
- curl_easy_duphandle() failed to duplicate cookies at times
- missing TELNET timeout support in Windows builds
- missing Curl_read() and write callback result checking in TELNET transfers
- more ciphers enabled in libcurl built to use NSS
- properly return an error code in curl_easy_recv
- Sun compilers specific preprocessor block removed from curlbuild.h.dist
- allow creation of four way fat libcurl Mac OS X Framework
- several memory leaks in libcurl+NSS
- improved the CURLOPT_NOBODY set to 0 confusions
- persistent connections when doing FTP over an HTTP proxy
- --libcurl bogus strings where other data was pointed to
- crash related to FTP and "Reused connection seems dead, get a new one"
- CURLINFO_APPCONNECT_TIME with the multi interface
- Enhanced upload speeds on Windows
- TFTP problems after a failed transfer to the same host
- improved out of the box TPF compatibility
- HTTP PUT protocol line endings portions mangled from CRLF to CRCRLF
- Rejected SSL session ids are killed properly (for OpenSSL and GnuTLS builds)
- Deal with the TFTP OACK packet
- fixed roff mistakes in man pages
- use SOCKS proxy with the multi interface
- fixed the Curl_getoff_all_pipelines SIGSEGV
- POST, NTLM and following a redirect hang
- libcurl+NSS endless loop on incorrect password for private key
- gzip decompression memory leak
- no_proxy flaw with username in URL

## Fixed in 7.19.4 - March 3 2009

7.19.4
7.19.4 changes only

Changes:

- Added CURLOPT_NOPROXY and the corresponding --noproxy
- the OpenSSL-specific code disables TICKET (rfc5077) which is enabled by default in openssl 0.9.8j
- Added CURLOPT_TFTP_BLKSIZE
- Added CURLOPT_SOCKS5_GSSAPI_SERVICE and CURLOPT_SOCKS5_GSSAPI_NEC - with the corresponding curl options --socks5-gssapi-service and --socks5-gssapi-nec
- Improved IPv6 support when built with c-ares >= 1.6.1
- Added CURLPROXY_HTTP_1_0 and --proxy1.0
- Added docs/libcurl/symbols-in-versions
- Added CURLINFO_CONDITION_UNMET
- Added support for Digest and NTLM authentication using GnuTLS
- CURLOPT_FTP_CREATE_MISSING_DIRS can now be set to 2 to retry the CWD even when MKD fails
- GnuTLS initing moved to curl_global_init()
- Added CURLOPT_REDIR_PROTOCOLS and CURLOPT_PROTOCOLS, see also the security advisory

Bugfixes:

- missing ssh.obj in VS makefiles
- FTP ;type=i URLs now work with CURLOPT_PROXY_TRANSFER_MODE in Turkish locale
- realms with quoted quotation marks in HTTP Digest headers
- VC9 makefiles are now really included
- multi interface memory leak with CURLMOPT_MAXCONNECTS set
- CURLINFO_CONTENT_LENGTH_DOWNLOAD size from file:// "transfers" with CURLOPT_NOBODY set true
- memory leak on some libz errors for content encodings
- NSS-enabled build is repaired
- superfluous wait in SFTP downloads removed
- FTP with the multi interface no longer kills the control connection as easily on transfer failures
- compilation halting when using VS2008 to build a Windows 2000 target
- ease creation of libcurl Mac OS X Framework
- CURLINFO_CONTENT_LENGTH_DOWNLOAD and CURLINFO_CONTENT_LENGTH_UPLOAD are -1 if unknown
- Negotiate proxy authentication
- CURLOPT_INTERFACE and CURLOPT_LOCALPORT used together

## Fixed in 7.19.3 - January 19 2009

7.19.3
7.19.3 changes only

Changes:

- CURLAUTH_DIGEST_IE bit added for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH
- VC9 Makefiles were added to the release package

Bugfixes:

- build failure when disabling FTP but enabling GSS
- fixed several calls to memory functions that did not check return codes
- memory leak for SSL connects with libcurl/NSS when CURLOPT_ISSUERCERT was used
- reuse of connections with the multi interface when multiple handles used the same server
- memory leak with HTTP GSS/kerberos authentication
- removed the default use of "Pragma: no-cache"
- fix SCP/SFTP busyloop by using a new libssh2 1.0 function
- bad fclose() after a fatal error in cookie code
- curl_multi_remove_handle() when the handle was in use in an HTTP pipeline
- GSS authentication infinite loop problem
- 550 response from SIZE no longer treated as missing file
- ftps:// control connections now use explicit protection level
- dotted IPv6 addresses longer than 39 bytes failed
- curl_easy_duphandle() does not try to duplicate the connection cache pointer
- build failure on OS/400 when enabling IPv6
- better detection of SFTP failures
- improved connection reuse for subsequent SCP and SFTP transfers
- multi interface does less busy-loops for SCP and SFTP transfers with libssh2 1.0 or later
- curl_multi_timeout() no longer returns timeout 0 when there is still more than 0 but less than 999 microseconds left
- the multi_socket API and HTTP pipelining now work a lot better when combined
- SFTP seek/resume beyond 32-bit file sizes
- fixed breakage with --with-ssl --disable-verbose
- TTL "leak" in the DNS cache
- improved NSS initing
- curl_easy_reset now resets more options
- rare Location: follow bug with the multi interface
- the configure script can now detect gnutls with pkg-config
- curlbuild.h was adjusted for SunPro compilers
- CURLOPT_COOKIELIST set to "SESS" on an easy handle with no cookies data
- fixed timeouts for TFTP
- fixed PPC builds

## Fixed in 7.19.2 - November 13 2008

7.19.2
7.19.2 changes only

Bugfixes:

- build failure when using MSVC 6 makefile and on four platforms more
- crash when using --interface name on Linux systems with a TEQL device
- using the multi interface to download an HTTPS page with libcurl built powered by OpenSSL could download "rubbish" instead of actual content

## Fixed in 7.19.1 - November 5 2008

7.19.1
7.19.1 changes only

Changes:

- pkg-config can now show supported_protocols and supported_features
- Added CURLOPT_CERTINFO and CURLINFO_CERTINFO
- Added CURLOPT_POSTREDIR
- Better detect HTTP 1.0 servers and do not do HTTP 1.1 requests on them
- configure --disable-proxy disables proxy support
- Added CURLOPT_USERNAME and CURLOPT_PASSWORD
- --interface now works with IPv6 connections on glibc systems
- Added CURLOPT_PROXYUSERNAME and CURLOPT_PROXYPASSWORD

Bugfixes:

- MingW32 non-configure builds are now largefile feature enabled by default
- NetWare LIBC builds are now largefile feature enabled by default
- curl_easy_pause() could behave wrongly on unpause
- cookies with invalid expire dates are now considered expired
- HTTP pipelining over proxy
- fix regression in configure script which affected OpenSSL builds on MSYS
- GnuTLS-based multi interface doing HTTPS over proxy failed
- recv() failures cause CURLE_RECV_ERROR
- SFTP over SOCKS crash fixed
- thread-safety issues addressed for NSS-powered libcurls
- removed the use of mktime() and gmtime(_r)() in date parsing and conversions
- HTTP Digest with a blank realm did wrong
- CURLINFO_REDIRECT_URL did not work with the multi interface
- CURLOPT_RANGE now works for SFTP downloads
- FTP SIZE response 550 now causes CURLE_REMOTE_FILE_NOT_FOUND
- CURLINFO_PRIMARY_IP fixed for persistent connection reuse cases
- remove_handle/add_handle multi interface timer callback flaw
- CURLINFO_REDIRECT_URL memory leak and wrong-doing
- case insensitive string matching works in Turkish too
- Solaris builds get _REENTRANT defined properly and work again
- Garbage sent on chunky upload after curl_easy_pause()
- ipv4 name resolves when libcurl is built with ipv6-enabled c-ares
- undersized IPv6 address internal buffer truncated long IPv6 addresses
- CURLINFO_FILETIME works for file:// transfers as well

## Fixed in 7.19.0 - September 1 2008

7.19.0
7.19.0 changes only

Changes:

- curl_off_t gets its size/typedef somewhat differently than before. This _may_ cause an ABI change for you. See lib/README.curl_off_t for a full explanation.
- Added CURLINFO_PRIMARY_IP
- Added CURLOPT_CRLFILE and CURLE_SSL_CRL_BADFILE
- Added CURLOPT_ISSUERCERT and CURLE_SSL_ISSUER_ERROR
- curl's option parser for boolean options reworked
- Added --remote-name-all
- Now builds for the INTEGRITY operating system
- Added CURLINFO_APPCONNECT_TIME
- Added test selection by key word in runtests.pl
- the curl tool's -w option support the %{ssl_verify_result} variable
- Added CURLOPT_ADDRESS_SCOPE and scope parsing of the URL according to RFC4007
- Support --append on SFTP uploads (not with OpenSSH, though)
- Added curlbuild.h and curlrules.h to the external library interface

Bugfixes:

- Fixed curl-config --ca
- Fixed the multi interface connection reuse with NSS-built libcurl
- connection reuse when using the multi interface with pipelining enabled
- curl_multi_socket() socket callback fix for close/re-create sockets case
- SCP or SFTP over socks proxy crashed
- RC4-MD5 cipher now works with NSS-built libcurl
- range requests with --head are now done correctly
- fallback to gettimeofday when monotonic clock is unavailable at runtime
- range numbers could be made to wrongly get output as signed
- unexpected 1xx responses hung transfers
- FTP transfers segfault when using different CURLOPT_FTP_FILEMETHOD
- c-ares powered libcurls can resolve/use IPv6 addresses
- poll not working on Windows Vista due to POLLPRI being incorrectly used
- user-agent in CONNECT with non-HTTP protocols
- CURL_READFUNC_PAUSE problems fixed
- --use-ascii now works on Symbian OS, MS-DOS and OS/2
- CURLINFO_SSL_VERIFYRESULT is fixed
- FTP URLs and IPv6 URLs mangled when sent to proxy with CURLOPT_PORT set
- a username in a proxy URL without a password was parsed incorrectly
- library is now built with _REENTRANT symbol defined only if needed
- no longer link with gdi32 on Windows cross-compiled targets
- HTTP PUT with -C - sent bad Content-Range: header
- HTTP PUT or POST with redirect could lead to hang
- reuse of connections with failed SSL connects in the multi interface
- NTLM over proxy state was wrongly cleared when host connection was closed
- Windows SSPI DLL loading is now done in curl_global_init()
- runtests.pl has an improved find-stunnel-and-invoke
- FTP sessions could go out of sync on a long header boundary condition
- potential buffer overflows in the MS-DOS command-line port fixed
- --stderr is now honoured with the -v option
- memory leak in libcurl on Windows built with OpenSSL
- improved curl_m*printf() integral data type size and signedness handling
- error when --dump-header - used with more than one URL
- proxy closing connect during CONNECT with auth with the multi interface
- CURLOPT_UPLOAD sets HTTP method back to GET or HEAD when passed in a 0
- shared cookies could get locked twice
- deal with closed connection while doing POST/PUT

## Fixed in 7.18.2 - June 4 2008

7.18.2
7.18.2 changes only

Changes:

- CURLFORM_STREAM was added
- CURLOPT_NOBODY is now supported over SFTP
- curl can now run on Symbian OS
- curl -w redirect_url and CURLINFO_REDIRECT_URL
- added curl_easy_send() and curl_easy_recv()

Bugfixes:

- CURLOPT_NOBODY first set to TRUE and then FALSE for HTTP no longer causes the confusion that could lead to a hung transfer
- curl_easy_reset() resets the max redirect limit properly
- configure now correctly recognizes Heimdal and MIT gssapi libraries
- malloc() failure check in Negotiate
- -i and -I together now work the same no matter what order they are used
- the typechecker can be bypassed by defining CURL_DISABLE_TYPECHECK
- a pointer mixup could make the FTP code send bad user+password under rare circumstances (found when using curlftpfs)
- CURLOPT_OPENSOCKETFUNCTION can now be used to create a unix domain socket
- CURLOPT_TCP_NODELAY crash due to getprotobyname() use
- libcurl sometimes sent body twice when using CURLAUTH_ANY
- configure detecting debug-enabled c-ares
- microsecond resolution keys for internal splay trees
- krb4 and krb5 ftp segfault
- multi interface busy loop for CONNECT requests
- internal time differences now use monotonic time source if available
- several curl_multi_socket() fixes
- builds fine for Haiku OS
- follow redirect with only a new query string
- SCP and SFTP memory leaks on aborted transfers
- curl_multi_socket() and HTTP pipelining transfer stalls
- lost telnet data on an EWOULDBLOCK condition

## Fixed in 7.18.1 - March 30 2008

7.18.1
7.18.1 changes only

Changes:

- added support for HttpOnly cookies
- `make ca-bundle` downloads and generates an updated ca bundle file
- we no longer distribute or install a ca cert bundle
- SSLv2 is now disabled by default for SSL operations
- the test509-style setting URL in callback is officially no longer supported
- support a full chain of certificates in a given PKCS12 certificate
- resumed transfers work with SFTP
- added type checking macros for curl_easy_setopt() and curl_easy_getinfo(), watch out for new warnings in code using libcurl (needs gcc-4.3 and currently only works in C mode)
- curl_easy_setopt(), curl_easy_getinfo(), curl_share_setopt() and curl_multi_setopt() uses are now checked to use exactly three arguments
- --with-ca-path=DIR configure option allows to set an openSSL CApath instead of a default ca bundle.
- supports server name indication (RFC 4366), aka SNI

Bugfixes:

- improved pipelining
- improved strdup replacement
- GnuTLS-built libcurl failed when doing global cleanup and reinit
- error message problem when unable to resolve a host on Windows
- Accept: header replacing
- not verifying server certs with GnuTLS still failed if gnutls had problems with the cert
- when using the multi interface and a handle is removed while still having a transfer going on, the connection is now closed by force
- bad reuse of SSL connections in non-complete state
- test case 405 failures with GnuTLS builds
- crash when connection cache size is 1 and Curl_do() failed
- GnuTLS-built libcurl can now be forced to prefer SSLv3
- crash when doing Negotiate again on a reused connection
- select/poll regression
- better MIT kerberos configure check
- curl_easy_reset() + SFTP reused connection download crash
- SFTP non-existing file + SFTP existing file error
- sharing DNS cache between easy handles running in multiple threads could lead to crash
- SFTP upload with CURLOPT_FTP_CREATE_MISSING_DIRS on reused connection
- SFTP infinite loop when given an invalid quote command
- curl-config erroneously reported LDAPS support with missing LDAP libraries
- SCP infinite loop when downloading a zero byte file
- setting the CURLOPT_SSL_CTX_FUNCTION with libcurl built without OpenSSL now makes curl_easy_setopt() properly return failure
- configure --with-libssh2 (with no given path)

## Fixed in 7.18.0 - January 28 2008

7.18.0
7.18.0 changes only

Changes:

- --data-urlencode
- CURLOPT_PROXY_TRANSFER_MODE
- --no-keepalive - now curl does connections with keep-alive enabled by default
- --socks4a added (proxy type CURLPROXY_SOCKS4A for libcurl)
- --socks5-hostname added (CURLPROXY_SOCKS5_HOSTNAME for libcurl)
- curl_easy_pause()
- CURLOPT_SEEKFUNCTION and CURLOPT_SEEKDATA
- --keepalive-time
- curl --help output was re-ordered

Bugfixes:

- curl-config --features and --protocols show the correct output when built with NSS, and also when SCP, SFTP and libz are not available
- free problem in the curl tool for users with empty home dir
- curl.h version 7.17.1 problem when building C++ apps with MSVC
- SFTP and SCP use persistent connections
- segfault on bad URL
- variable wrapping when using absolutely huge send buffer sizes
- variable wrapping when using debug callback and the HTTP request was not sent in one go
- SSL connections with NSS done with the multi-interface
- setting a share no longer activates cookies
- Negotiate now works on auth and proxy simultanouesly
- support HTTP Digest nonces up to 1023 letters
- resumed ftp upload no longer requires the read callback to return full buffers
- no longer default-appends ;type= on FTP URLs through proxies
- SSL session id caching
- POST with callback over proxy requiring NTLM or Digest
- Expect: 100-continue flaw on reused connection with POSTs
- build fix for MSVC 9.0 (VS2008)
- Windows curl builds failed file truncation when retry downloading
- SSL session ID cache memory leak
- bad connection reuse check with environment variable-activated proxy use
- --libcurl now generates a return statement as well
- socklen_t is no longer used in the public includes
- time zone offsets from -1400 to +1400 are now accepted by the date parser
- allows more spaces in WWW/Proxy-Authenticate: headers
- curl-config --libs skips /usr/lib64
- range support for file:// transfers
- libcurl hang with huge POST request and request-body read from callback
- removed extra newlines from many error messages
- improved pipelining
- improved OOM handling for data URL encoded HTTP POSTs when read from a file
- test suite could pick wrong tool(s) if more than one existed in the PATH
- curl_multi_fdset() failed to return socket while doing CONNECT over proxy
- curl_multi_remove_handle() on a handle that is in used for a pipeline now break that pipeline
- CURLOPT_COOKIELIST memory leaks
- progress meter/callback during http proxy CONNECT requests
- auth for http proxy when the proxy closes connection after first response

## Fixed in 7.17.1 - October 29 2007

7.17.1
7.17.1 changes only

Changes:

- automatically append ";type=<a|i>" when using HTTP proxies for FTP URLs
- improved NSS support
- added --proxy-negotiate
- added --post301 and CURLOPT_POST301
- builds with c-ares 1.5.0
- added CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 and --hostpubmd5
- renamed CURLE_SSL_PEER_CERTIFICATE to CURLE_PEER_FAILED_VERIFICATION
- added CURLOPT_OPENSOCKETFUNCTION and CURLOPT_OPENSOCKETDATA
- CULROPT_COOKIELIST supports "FLUSH"
- added CURLOPT_COPYPOSTFIELDS
- added --static-libs to curl-config

Bugfixes:

- curl-config --protocols now properly reports LDAPS, SCP and SFTP
- ldapv3 support on Windows
- ldap builds with the MSVC makefiles
- no HOME and no key given caused SSH auth failure
- Negotiate authentication over proxy
- --ftp-method nocwd on directory listings
- FTP, CURLOPT_NOBODY enabled and CURLOPT_HEADER disabled now does TYPE before SIZE
- reused handle transfers with SFTP
- curl_easy_escape() problem with byte values >= 128
- handles chunked-encoded CONNECT responses
- misuse of ares_timeout() result
- --local-port on TFTP transfers
- CURLOPT_POSTFIELDS could fail to send binary data
- specifying a proxy with a trailing slash did not work (unless it also contained a port number)
- redirect from HTTP to FTP or TFTP memory problems and leaks
- reused connections a bit too much when using non-SSL protocols tunneled over an HTTP proxy
- embed the manifest in VC8 builds
- use valgrind in the tests even when the lib is built shared with libtool
- libcurl built with NSS can now ignore the peer verification even when the ca cert bundle is absent

## Fixed in 7.17.0 - September 13 2007

7.17.0
7.17.0 changes only

Changes:

- support for OS/400 Secure Sockets Layer library
- curl_easy_setopt() now allocates strings passed to it
- SCP and SFTP support now requires libssh2 0.16 or later
- LDAP libraries are now linked "regularly" and not with dlopen
- HTTP transfers have the download size info "available" earlier
- FTP transfers have the download size info "available" earlier
- builds and runs on OS/400
- several error codes and options were marked as obsolete and subject to future removal (set CURL_NO_OLDIES to see if your application is using them)
- SFTP errors can return more specific error codes

Bugfixes:

- test cases 31, 46, 61, 506, 517 now work in time zones that use leap seconds
- problem with closed proxy connection during HTTP CONNECT auth negotiation
- transfer-encoding skipping did not ignore the 407 response bodies properly
- CURLOPT_SSL_VERIFYHOST set to 1
- CONNECT endless loop
- krb5 support builds with Heimdal
- added returned error string for connection refused case
- reuse of dead FTP control connections
- login to FTP servers that do not require (nor understand) PASS after the USER command
- bad free of memory from libssh2
- the SFTP PWD command works
- HTTP Digest auth on a reused connection
- FTPS data connection close
- AIX 4 and 5 get to use non-blocking sockets
- small POST with NTLM
- resumed file:// transfers
- CURLOPT_DNS_CACHE_TIMEOUT and CURLOPT_DNS_USE_GLOBAL_CACHE are 64-bit "clean"
- memory leak when handling compressed data streams from broken servers
- no NTLM unicode response
- resume HTTP PUT using Digest authentication
- FTP NOBODY requests on directories sent "SIZE (null)"
- FTP NOBODY request on file crash
- excessively long FTP server responses and response lines
- file:// upload then FTP:// upload crash
- TFTP error 0 is no longer treated as success
- uploading empty file over FTP on reused connection
- superfluous CWD command on reused FTP connections without subdirs used

## Fixed in 7.16.4 - July 10 2007

7.16.4
7.16.4 changes only

Changes:

- added CURLOPT_NEW_FILE_PERMS and CURLOPT_NEW_DIRECTORY_PERMS
- improved hashing of sockets for the multi_socket API
- ftp kerberos5 support added

Bugfixes:

- adjusted how libcurl treats HTTP 1.1 responses without content-length or chunked encoding
- fixed the 10-at-a-time.c example
- FTP over SOCKS proxy
- improved error messages on SCP upload failures
- security flaw in which libcurl failed to properly reject some outdated or not yet valid server certificates when built with GnuTLS

## Fixed in 7.16.3 - June 25 2007

7.16.3
7.16.3 changes only

Changes:

- added curl_multi_socket_action()
- deprecated curl_multi_socket()
- uses less memory in non-pipelined use cases
- CURLOPT_HTTP200ALIASES matched transfers assume HTTP 1.0 compliance
- more than one test harness can run at the same time without conflict
- SFTP now supports quote commands before a transfer
- CURLMOPT_MAXCONNECTS added to curl_multi_setopt()
- upload resume works for file:// URLs
- asynchronous name resolves now require c-ares 1.4.0 or later
- added SOCKS test cases
- CURLOPT_FTP_CREATE_MISSING_DIRS and --ftp-create-dirs now work for SFTP operations as well

Bugfixes:

- if2up too long interface name memory leak
- test case 534 started to fail 2007-04-13 due to the existence of a new host on the net with the same silly domain the test was using for a host which was supposed not to exist.
- test suite SSL certificate works better with newer stunnel
- internal progress meter update frequency back to once per second
- avoid some unnecessary calls to function gettimeofday
- a double-free in the SSL-layer
- GnuTLS free of NULL credentials
- NSS-fix for closing down SSL
- bad warning from configure when gnutls was selected
- compilation on VMS 64-bit mode
- SCP/SFTP downloads could hang on the last bytes of a transfer
- curl_easy_duphandle() crash
- curl -V / curl_version*() works even when GnuTLS is used on a system without a good random source
- curl_multi_socket() not "noticing" newly added handles
- lack of Content-Length and chunked encoding now requires HTTP 1.1 as well to be treated as without response body
- connection cache growth in multi handles
- better handling of out of memory conditions
- overwriting an uploaded file with sftp now truncates it first
- SFTP quote commands chmod, chown, chgrp can now set a value of 0
- TFTP connect timeouts less than 5 seconds
- improved curl -w for TFTP transfers
- memory leak when failed OpenSSL certificate CN field checking
- memory leak when OpenSSL failed PKCS #12 parsing
- FTP-SSL when built with NSS
- out-of-boundary write in Curl_select()
- -s/--silent can now be used to toggle off the silence again
- builds fine on 64-bit HP-UX
- multi interface HTTP CONNECT glitch
- list FTP root directories when login directory is not root
- no longer slows down when getting many URLs on the same command line
- lock share before decreasing dirty counter
- no-body FTP requests on reused connections

## Fixed in 7.16.2 - April 11 2007

7.16.2
7.16.2 changes only

Changes:

- added CURLOPT_TIMEOUT_MS and CURLOPT_CONNECTTIMEOUT_MS
- added CURLOPT_HTTP_CONTENT_DECODING, CURLOPT_HTTP_TRANSFER_DECODING and --raw
- added support for using the NSS library for TLS/SSL
- changed default anonymous FTP password
- changed the CURLOPT_FTP_SSL_CCC option to handle active and passive CCC shutdown
- added the --ftp-ssl-ccc-mode command line option
- includes VC8 Makefiles in the release archive
- --ftp-ssl-control is now honoured on ftps:// URLs
- added experimental CURL_ACKNOWLEDGE_EINTR symbol definition check
- --key and new --pubkey options for SSH public key file logins
- --pass now works for a SSH public key file, too
- select (2) support no longer needed to build the library if poll() used
- CURLOPT_POSTQUOTE works for SFTP

Bugfixes:

- in testsuite, update test cookies expiration from 2007-Feb-1 to year 2035
- socks5 works
- builds fine with VC2005
- CURLOPT_RANGE set to NULL resets the range for FTP
- curl_multi_remove_handle() rare crash
- passive FTP transfers work with SOCKS
- multi interface HTTPS connection reuse memory leak
- libcurl.m4's --with-libcurl is improved
- curl-config --libs and libcurl.pc no longer list unnecessary dependencies
- fixed an issue with CCC not working on some servers
- several HTTP pipelining problems
- HTTP CONNECT through a proxy is now less blocking when the multi interface is used
- HTTP Digest header parsing fix for unquoted last word ending with CRLF
- CURLOPT_PORT, HTTP proxy, reusing connections and non-HTTP protocols
- CURLOPT_INTERFACE for ipv6
- use-after-free issue with HTTP transfers with the multi interface
- the progress callback can get called more frequently
- timeout would restart when signal caught while awaiting socket events
- curl -f with user+password embedded in the URL
- 26 flaws identified by coverity.com
- builds on QNX 6 again

## Fixed in 7.16.1 - January 29 2007

7.16.1
7.16.1 changes only

Changes:

- Support for SCP and SFTP were added (powered by libssh2)
- CURLOPT_CLOSEPOLICY is now deprecated
- --ftp-ssl-ccc and CURLOPT_FTP_SSL_CCC were added
- HTTP support for non-ASCII platforms
- --libcurl was added

Bugfixes:

- proxy close during CONNECT authentication is now dealt with nicely
- the CURLOPT_DEBUGFUNCTION was sometimes called even when CURLOPT_VERBOSE was not enabled
- multiple TFTP transfers on the same (easy or multi) handle could cause a crash
- SIGSEGV when disconnecting on a transfer on a reused handle when the hostname did not resolve
- stack overwrite on 64-bit Windows in the chunked decoding department
- HTTP responses on persistent connections without Content-Length nor chunked encoding are now considered to be without response body
- Content-Range: header parsing improved
- CPU 100% load when HTTP upload connection broke
- active FTP did not work with multi interface
- curl_getdate() could be off one hour for TZ time zones with DST, on windows
- CURLOPT_FORBID_REUSE works again
- CURLOPT_MAXCONNECTS set to zero caused libcurl to SIGSEGV
- rate limiting works better
- getting FTP response code errors when using the multi-interface caused libcurl to leak memory
- no more SIGPIPE when GnuTLS is used
- FTP downloading 2 zero byte files in a row
- using proxy and URLs without protocol prefixes
- first using a proxy and then accessing a site that `no_proxy` matched, would still make libcurl use the proxy...
- curl_easy_duphandle() now makes a handle that is valid for the multi interface since the magic number is set fine
- libcurl.pc now uses Libs.private for "private" libs
- --limit-rate (CURLOPT_MAX_SEND_SPEED_LARGE and CURLOPT_MAX_RECV_SPEED_LARGE) now work on windows again
- improved download performance by avoiding the unconditional "double copying"
- base64 encoding/decoding works on non-ASCII platforms
- large file downloads
- CURLOPT_COOKIELIST set to "ALL" crash
- easy handle removal from multi handle before completion
- TFTP upload memory leak
- curl_easy_reset() now resets the CA bundle path correctly
- two User-Agent headers in CONNECT requests with custom User-Agent

## Fixed in 7.16.0 - October 30 2006

7.16.0
7.16.0 changes only

Changes:

- the SONAME on the shared library was bumped from 3 to 4
- Added CURLE_SSL_CACERT_BADFILE
- Added CURLMOPT_TIMERFUNCTION and CURLMOPT_TIMERDATA
- (FTP) the CURLOPT_SOURCE_* options are removed and so are the --3p* command line options
- curl_multi_socket() and family are suitable to start using
- uses WSAPoll() on Windows Vista
- (FTP) --ftp-ssl-control was added
- CURLOPT_SSL_SESSIONID_CACHE and --no-sessionid added
- CURLMOPT_PIPELINING added for enabling HTTP pipelined transfers
- multi handles now have a shared connection cache
- Added support for other MS-DOS compilers (besides djgpp)
- CURLOPT_SOCKOPTFUNCTION and CURLOPT_SOCKOPTDATA were added
- (FTP) libcurl avoids sending TYPE if the desired type was already set
- (FTP) CURLOPT_PREQUOTE works even when CURLOPT_NOBODY is set true

Bugfixes:

- (HTTP) CURLOPT_FAILONERROR (-f) covers a few more response cases
- curl_multi_socket() and the LOW_SPEED options
- curl_multi_socket() expire timer during c-ares name resolves
- curl_multi_add_handle on an already added handle now fails gracefully
- multi interface crash if bad function call order was used for cleanup
- put a new URL in saved cookie jar files
- configure --with-gssapi-libs
- SOCKS proxy connection fixes
- (FTP) a failed upload does not invalidate the control connection
- proxy URL with username and empty password or no password at all now work
- fixed a socket state problem with *multi_socket()
- (HTTP) NTLM hostname fix
- getsockname usage fixes
- SOCKS5 proxy connects can now time-out
- SOCKS5 connects that require auth no longer segfaults when auth not given
- multi interface using asynch resolves could get stuck in wrong state
- the `running_handles` counter was not always updated properly when curl_multi_remove_handle() was used
- (FTP) EPRT transfers with IPv6 did not work properly
- (FTP) SINGLECWD mode and using files in the root dir
- (HTTP) Expect: header disabling work better
- (HTTP) "Expect: 100-continue" disable on second POST on reused connection
- src/config.h.in is fixed
- (HTTP) POST data logged to the debug callback function is now correctly tagged as data, not header

## Fixed in 7.15.5 - August 7 2006

7.15.5
7.15.5 changes only

Changes:

- added --ftp-ssl-reqd
- modified the prototype for the socket callback set with CURLMOPT_SOCKETFUNCTION
- added curl_multi_assign()
- added CURLOPT_FTP_ALTERNATIVE_TO_USER and --ftp-alternative-to-user
- added a vcproj file for building libcurl
- added curl_formget()
- added CURLOPT_MAX_SEND_SPEED_LARGE and CURLOPT_MAX_RECV_SPEED_LARGE
- added configure --enable-hidden-symbols
- Made -K on a file that could not be read cause a warning to be displayed

Bugfixes:

- chunked encoding when custom header "Transfer-Encoding: chunked" is set
- Curl_strerror() crash on unknown errors
- changing Content-Type when doing formposts
- added CURL_EXTERN to a few recent multi functions that lacked them
- splay-tree related problems for internal expire time handling
- FTP ASCII CRLF counter reset
- cookie parser now compares paths case sensitive
- an easy handle with shared DNS cache added to a multi handle caused a crash
- could not override the Proxy-Connection: header for non-CONNECT requests
- curl_multi_fdset() could wrongly return -1 as max_fd value

## Fixed in 7.15.4 - June 12 2006

7.15.4
7.15.4 changes only

Changes:

- NTLM2 session response support
- CURLOPT_COOKIELIST set to "SESS" clears all session cookies
- CURLINFO_LASTSOCKET returned sockets are now checked more before returned
- curl-config got a --checkfor option to compare version numbers
- line end conversions for FTP ASCII transfers
- curl_multi_socket() API added (still mostly untested)
- conversion callback options for EBCDIC <=> ASCII conversions
- added CURLINFO_FTP_ENTRY_PATH
- less blocking for the multi interface during (Open)SSL connect negotiation

Bugfixes:

- builds fine on cygwin
- md5-sess with Digest authentication
- dict with letters such as space in a word
- dict with URL-encoded words in the URL
- libcurl.m4 when default=yes but no libcurl was found
- numerous bugs fixed in the TFTP code
- possible memory leak when adding easy handles to multi stack
- TFTP works in a more portable fashion (== on more platforms)
- WSAGetLastError() is now used (better) on Windows
- GnuTLS non-block case that could cause data trashing
- deflate code survives lack of zlib header
- CURLOPT_INTERFACE works with hostname
- configure runs fine with ICC
- closed control connection with FTP when easy handle was removed from multi
- curl --trace crash when built with VS2005
- SSL connect time-out
- improved NTLM functionality
- following redirects with more than one question mark in source URL
- fixed debug build crash with -d
- generates a fine AIX Toolbox RPM spec
- treat FTP AUTH failures properly
- TFTP transfers could trash data
- -d + -G combo crash

## Fixed in 7.15.3 - March 20 2006

7.15.3
7.15.3 changes only

Changes:

- added docs for --ftp-method and CURLOPT_FTP_FILEMETHOD

Bugfixes:

- TFTP Packet Buffer Overflow Vulnerability
- properly detecting problems with sending the FTP command USER
- wrong error message shown when certificate verification failed
- multi-part formpost with multi interface crash
- the CURLFTPSSL_CONTROL setting for CURLOPT_FTP_SSL is acknowledged
- "SSL: could not set callback" is now treated as a less serious problem
- Interix build fix
- fixed curl "hang" when out of file handles at start
- prevent FTP uploads to URLs with trailing slash

## Fixed in 7.15.2 - February 27 2006

7.15.2
7.15.2 changes only

Changes:

- Support for SOCKS4 proxies (added --socks4)
- CURLOPT_CONNECT_ONLY and CURLINFO_LASTSOCKET added
- CURLOPT_LOCALPORT and CURLOPT_LOCALPORTRANGE (--local-port) added
- Dropped support for the LPRT ftp command
- Gopher is now officially abandoned as a protocol (lib)curl tries to support
- curl_global_init() and curl_global_cleanup() are now using a refcount so that it is now legal to call them multiple times. See updated info for details

Bugfixes:

- two bugs concerning using curl_multi_remove_handle() before the transfer was complete
- multi-pass authentication and compressed content
- minor format string mistake in the GSS/Negotiate code
- cached DNS entries could remain in the cache too long
- improved GnuTLS check in configure
- reused FTP connections when the second request did not do a transfer
- plain --limit-rate [num] means bytes
- re-creating a dead connection is no longer counted internally as a followed redirect and thus prevents a weird error that would occur if an FTP connection died on an attempted reuse
- Try PASV after failing to connect to the port the EPSV response contained
- -P [IP] with non-local address with ipv6-enabled curl
- -P [hostname] with ipv6-disabled curl
- libcurl.m4 was updated
- configure no longer warns if the current path contains a space
- test suite kill race condition
- FTP_SKIP_PASV_IP and FTP_USE_EPSV when doing FTP over HTTP proxy
- Doing a second request with FTP on the same bath path, would make libcurl confuse what current working directory it had
- FTP over HTTP proxy now sends the second CONNECT properly
- numerous compiler warnings and build quirks for various compilers have been addressed
- supports name and passwords up to 255 bytes long, embedded in URLs
- the HTTP_ONLY define disables the TFTP support

## Fixed in 7.15.1 - December 7 2005

7.15.1
7.15.1 changes only

Changes:

- the libcurl.pc pkgconfig file now gets installed on make install
- URL globbing now offers "range steps": [1-100:10]
- LDAPv3 is now the preferred LDAP protocol version
- --max-redirs and CURLOPT_MAXREDIRS set to 0 limits redirects
- improved MSVC makefile

Bugfixes:

- URL buffer overflow problem
- using file:// on non-existing files are properly handled
- builds fine on DJGPP
- CURLOPT_ERRORBUFFER is now always filled in on errors
- curl outputs error on bad --limit-rate units
- fixed libcurl's use of poll() on cygwin
- the GnuTLS code did not support client certificates
- TFTP over IPv6 works
- no reverse lookups on IP addresses when ipv6-enabled
- SSPI compatibility fix: using the proper DLLs
- binary LDAP properties are now shown base64 encoded
- Windows uploads from stdin using curl can now contain ctrl-Z bytes
- -r [num] would produce an invalid HTTP Range: header
- multi interface with multi IP hosts could leak socket descriptors
- the GnuTLS code did not handle rehandshakes
- reuse of a dead FTP connection
- name resolve error codes fixed for Windows builds
- double WWW-Authenticate Digest headers are now handled
- curl-config --vernum fixed

## Fixed in 7.15.0 - October 13 2005

7.15.0
7.15.0 changes only

Changes:

- --ftp-skip-pasv-ip / CURLOPT_FTP_SKIP_PASV_IP (sponsored by CU*Answers)
- TFTP support added

Bugfixes:

- user+domain name buffer overflow in the NTLM code (security flaw)
- -z over FTP now considers equal timestamps "not modified since"
- Weird characters removed from the configure script
- Fixed time zone offsets for MEST and CEST for the time parser
- HTTP Content-Range header parser crash
- FTPS negotiation timeouts/errors
- SSPI works even for Windows 9x
- crash in --dump-header on FTP
- test 56 runs better

## Fixed in 7.14.1 - September 1 2005

7.14.1
7.14.1 changes only

Changes:

- GNU GSS support
- --ignore-content-length and CURLOPT_IGNORE_CONTENT_LENGTH added
- negotiates data connection SSL earlier when doing FTPS with PASV
- CURLOPT_COOKIELIST and CURLINFO_COOKIELIST
- trailer support for chunked encoded data streams
- -x/CURL_PROXY strings may now contain user+password
- --trace-time now outputs the full microsecond, all 6 digits

Bugfixes:

- MSVC build problem with the DSP file
- windows threaded resolver access violation with multi interface
- test suite works with valgrind 3
- CA cert verification with GnuTLS builds
- handles expiry times in cookie files that go beyond 32 bits in size
- several client problems with files, such as doing -d @file when the file is not readable now gets a warning displayed
- write callback abort did not always "take"
- the curl -z "bad syntax" warning is now hidden when -s is used
- curl -d @nonexisting no longer makes a GET
- minor debug callback data size
- date parsing of dates including daylight savings time zone names
- using NTLM over proxy with an FTP URL
- curl-config --features now displays SSL when built with GnuTLS too
- CURLOPT_HTTPGET, CURLOPT_POST and CURLOPT_HTTPPOST reset CURLOPT_NOBODY
- builds fine on AmigaOS again
- corrected date parsing on Windows with auto-DST-adjust enabled
- treats CONNECT 407 responses with bodies better during Digest/NTLM auth
- improved strerror_r() API guessing when cross-compiling
- debug builds work on Tru64
- improved libcurl.m4
- possible memory leak in windows name resolves
- c-ares enabled build with mingw
- proxy host set with numerical IPv6 address
- better treatment of binary zeroes in HTTP response headers
- fixed the notorious FTP server failure in the test suite
- better checking of text output in the test suite on windows
- FTP servers' TYPE command response check made less strict
- URL-without-slash as in http://example?data
- strerror_r() configure check for HP-UX 10.20 (and others)
- time parse work-around on HP-UX 10.20 since its gmtime_r() is broken

## Fixed in 7.14.0 - May 16 2005

7.14.0
7.14.0 changes only

Changes:

- modified default HTTP request headers
- curl --trace-time added for time stamping trace logs
- curl now respects the SSL_CERT_DIR and SSL_CERT_PATH environment variables
- more search paths for curl's default .curlrc config file check
- GnuTLS support, use configure --with-gnutls. Work on this was sponsored by The Written Word.

Bugfixes:

- uses select() instead of poll() even on Mac OS X 10.4
- reconnected proxy use with NTLM auth on the same handle
- warns about bad -z date syntax
- docs/THANKS now contains all known contributors
- builds out-of-the-box on (presumably ipv6-enabled) AIX 4.3 hosts
- curl --head could wrongly complain on bad chunked-encoding
- --interface SIGSEGVed on a bad address
- kill the HTTPS server better when stopping the test suite
- builds fine with VS2005 on x64
- auth fix for HTTP redirects and .netrc usage
- FTP uploads show the progress meter easier
- MSVC makefile fixes for static libcurl builds
- configure fix for static libcurl build on Windows
- --retry-delay
- POST with read callback now uses Expect: 100-continue
- CURLOPT_PORT did not actually use the set port number
- HTTP 304 response with Content-Length: header
- time-conditioned FTP uploads

## Fixed in 7.13.2 - April 4 2005

7.13.2
7.13.2 changes only

Changes:

- Added --form-string
- libcurl can be built with SSPI support. curl_version_info() then returns a new feature bit: CURL_VERSION_SSPI. configure --enable-sspi added
- Added --proxy-anyauth
- Added runtests.1 and testcurl.1 man pages

Bugfixes:

- the MSVC libcurl Makefile was fixed
- libcurl on Windows crash if resolver was active when easy handle was killed
- HTTP POST with auth and an initial 100 response before the 401/407
- configure's SSL-detection for msys/mingw
- better connection keep-alive when POSTing with HTTP Digest
- FTP-SSL
- reading FTP server response in multiple reads
- picking one out of multiple proxy auth methods
- inet_ntoa_r() when built with uClibc
- the so name issue for the LDAP library dynamic load
- crash when using SOCKS4 proxy
- a debug printf() was removed
- CURLOPT_FILETIME when downloading FTP corrupted data
- FTP upload resume now works even if no file is present on the site
- SSL seeding no longer attempts to read the whole random file

## Fixed in 7.13.1 - March 4 2005

7.13.1
7.13.1 changes only

Changes:

- CURLOPT_COOKIEFILE set to "" is now activating the cookie engine
- FTP code overhaul => multi interface much less blocking
- Added CURLE_LOGIN_DENIED to be returned when curl is denied login to FTP servers

Bugfixes:

- -# crash when more data than expected was retrieved
- NTLM/krb4 buffer overflow fixed
- proxy auth bug when following redirects to another host
- socket leak when local bind failed
- HTTP POST with --anyauth picking NTLM
- SSL problems when downloading exactly 16KB data
- out of memory conditions preserve error codes better
- a few crashes at out of memory
- inflate buffer usage bugfix
- better DICT protocol adherence
- disable valgrind-checking while testing if libcurl is built shared
- locale names in some date strings

## Fixed in 7.13.0 - February 1 2005

7.13.0
7.13.0 changes only

Changes:

- added --ftp-account and CURLOPT_FTP_ACCOUNT
- added CURLOPT_SOURCE_URL and CURLOPT_SOURCE_QUOTE
- obsoleted CURLOPT_SOURCE_HOST, CURLOPT_SOURCE_PATH, CURLOPT_SOURCE_PORT and CURLOPT_PASV_HOST
- added --3p-url, --3p-user and --3p-quote
- -Q "+[command]" was added
- src/getpass.c license issue sorted (code was rewritten)
- curl -w now supports `http_connect` for the proxy's response to CONNECT
- introducing "curl-config --protocols"

Bugfixes:

- re-sending a request when retrying on a fresh connection with multi interface
- improved valgrind report parser in the test suite
- several valgrind reports
- CURLOPT_FTPPORT and -P work when built ipv6-enabled
- FTP third party transfers was much improved
- proxy environment variables are now ignored when built HTTP-disabled
- CURLOPT_PROXY can now disable HTTP proxy even when built HTTP-disabled
- "curl dictionary.com" no longer assumes DICT protocol
- re-invoke some system calls on EINTR
- duplicate Host: when failed connection reuse
- SOCKS5 version check
- memory problem with cleaning up multi interface
- SSL certificate name memory leak
- -d with -G to multiple URLs crashed
- double va_list access crash fixed
- minor memory leak when "version" is set in a cookie header
- builds fine on BeOS and NetBSD
- builds and runs fine on FreeBSD

## Fixed in 7.12.3 - December 20 2004

7.12.3
7.12.3 changes only

Changes:

- PKCS12 certificate support added
- added CURLINFO_SSL_ENGINES (and "--engine list")
- new configure options: --disable-cookies, --disable-crypto-auth and --disable-verbose
- persistent ftp request improvements
- CURLOPT_IOCTLFUNCTION and CURLOPT_IOCTLDATA added. If your app uses HTTP Digest, NTLM or Negotiate authentication, you most likely want to use these
- -w time_redirect and num_redirects
- no longer uses libcurl.def for building on Windows, OS/2 and Netware
- builds on Windows CE
- request retrying, --retry and family added
- FTP 3rd party transfers with source and dest on the same host now works
- added CURLINFO_NUM_CONNECTS

Bugfixes:

- curl -E on windows accepts "c:/path" with forward-slash
- several improvements for large file support on windows
- file handle leak in aborted multipart formpost file upload
- -T upload multiple files with backslashes in filenames
- modified credentials between two requests on a persistent http connection
- large file file:// resumes on Windows
- URLs with username and IPv6 numerical addresses
- configure works better with SSL libs in a "non-standard ld.so dir"
- curl-config --vernum zero prefixed
- bad memory access in the NTLM code
- EPSV on multi-homed servers now works correctly
- chunked-encoded transfers could get closed pre-maturely without error
- proxy CONNECT now default timeouts after 3600 seconds
- disabling EPSV or EPRT is ignored when connecting to an IPv6 FTP server
- no extra progress meter newline output after each Location: followed
- HTTP PUT/POST with Digest, NTLM or Negotiate no longer uses HEAD
- works with or gracefully bails out when exceeding FD_SETSIZE file descriptors
- CURLINFO_REDIRECT_TIME works
- building with gssapi libs and hdeaders in the default dirs
- curl_getdate() parsing of dates later than year 2037 with 32-bit time_t
- curl -v when stderr is closed wrote debug messages to the network socket
- build failure with libidn 0.3.X or older
- huge POSTs on VMS
- configure no longer uses pkg-config on cross-compiles
- potential gzip decompress memory leak
- "-C - --fail" on an HTTP page already downloaded
- formposting a zero byte file
- use setlocale() for better IDN functionality by default

## Fixed in 7.12.2 - October 18 2004

7.12.2
7.12.2 changes only

Changes:

- the IDN code now verifies that only TLD-legitimate letters are used in the name or a warning is displayed (when verbose is enabled)
- provides error texts for IDN errors
- file upload parts in formposts now get their directory names cut off
- added CURLINFO_OS_ERRNO
- added CURLOPT_FTPSSLAUTH to allow ftp connects to attempt "AUTH TLS" instead before "AUTH SSL"
- curl_getdate() completely rewritten: may affect rare curl -z use cases

Bugfixes:

- CURLOPT_FTP_CREATE_MISSING_DIRS works for third party transfers
- memory leak for cookies received with max-age set
- potential memory leaks in the window name resolver
- URLs with ?-letters in the username or password fields
- libcurl error message is now provided when send() fails
- no more SIGPIPE on Mac OS X and other SO_NOSIGPIPE-supporting platforms
- HTTP resume was refused if redirected
- configure's gethostbyname check when both nsl and socket libs are required
- configure --with-libidn now checks the given path before defaults
- a race condition sometimes resulting in CURLE_COULDNT_RESOLVE_HOST in the windows threaded name resolver code
- isspace() invokes with negative values in the cookie code
- a case of read-already-freed-data when CURLOPT_VERBOSE is used and a persistent connection
- now includes descriptive error messages for IDN errors
- more forgivning PASS response code check for better working with proftpd
- curl/multi.h works better included in winsock-using apps
- curl_easy_reset() no longer enables the progress meter
- build fix for SSL disabled curl with SSL Engine support present
- configure --with-ssl=PATH now ignores pkg-config path info
- CURLOPT_SSLENGINE can be set to NULL even if no engine support is available
- LDAP crash when more than one record was received
- connect failures properly stores an error message in the errorbuffer
- Rare Location:-following problem with bad original URL
- -F can now add Content-Type on non-file sections
- double Host: header when following Location: with replaced Host:
- curl_multi_add_handle() return code
- "Proxy-Connection: close" is now understood and properly dealt with
- curl_getdate() crash
- downloading empty files now calls the write callback properly
- no reverse DNS lookups for ip-only addresses with ipv6-enabled libcurl
- file handler leak when getting an empty file:// URL
- libcurl works better multi-threaded on AIX (when built with xlc)
- cookies over proxy did not match the path properly
- MSVC makefile fixes to build better
- FTP response 530 on `PASS` now sends back a better error message

## Fixed in 7.12.1 - August 10 2004

7.12.1
7.12.1 changes only

Changes:

- the version string now only contains info about (sub) package versions, while for example krb4 and ipv6 now only are available as `features`
- added curl_easy_reset()
- socks proxy support even when libcurl is built ipv6-enabled
- read callbacks can stop the transfer by returning CURL_READFUNC_ABORT
- libcurl-tutorial.3 is the new man page formerly known as libcurl-the-guide
- additional SSL trace data might be sent to the debug callback using two new types: CURLINFO_SSL_DATA_IN and CURLINFO_SSL_DATA_OUT
- multipart formposts can upload files larger than system memory
- the curl tool continues with the next URL even if one transfer fails
- FTP 3rd party transfer support - seven new setopt() options

Bugfixes:

- UTF-8 encoded certificate names can now be verified properly
- krb4 link problem
- HTTP Negotiate service name now provided in uppercase
- no longer accepts any cookies with domain set to a bare TLD
- HTTP Digest properties without quotes in the header
- bad Host: header case on reused connections over proxy
- duplicate Host: header case on reused connections
- curl -o name#[num] now works when no globbing for [num] exists
- test suite runs fine with valgrind 2.1.x
- negative Content-Length is ignored
- test 505 runs fine on windows
- curl_share_cleanup() crash
- --trace files now get the final info lines too
- multi interface connects fine to multi-IP resolving hosts
- --limit-rate works on Mac OS X (and other systems with bad poll()s)
- cookies can now hold 4999 bytes of content
- HTTP POST/PUT with NTLM/Digest/Negotiate to a URL returning 3XX
- HTTPS POST/PUT over a proxy requiring NTLM/Digest/Negotiate
- less restrictive libidn requirements, 0.4.1 or later is fine
- HTTP POST or PUT with Digest/Negotiate/NTLM selected but the server did not require any authentication
- win32 file:// transfer free memory bug
- configure --disable-http builds a libcurl without HTTP support
- CURLOPT_FILETIME had wrong type in curl.h, it expects a long argument
- builds fine with Borland on Windows
- the msvc curllib.dsp now builds the libcurl.lib file
- builds fine on VMS
- builds fine on NetWare
- HTTP Digest authentication with proxies uses correct username + password
- builds fine with lcc-win32

## Fixed in 7.12.0 - June 2 2004

7.12.0
7.12.0 changes only

Changes:

- added ability to "upload" to file:// URLs
- added curl_global_init_mem()
- removed curl_formparse()
- the MSVC project file in the release archive is automatically built
- curl --proxy-digest is a new command line option
- the Windows version of libcurl can use wldap32.dll for LDAP
- added curl_easy_strerror(), curl_multi_strerror() and curl_share_strerror()
- IPv6-enabled Windows hosts now resolves names threaded/asynch as well
- configure --with-libidn can be used to point out the root directory of a libidn installation (version 0.4.5 or later) for curl to use, then libcurl can resolve and use IDNA names (domain names with "international" letters)

Bugfixes:

- incoming cookies with domains set with a prefixed dot now works better
- CURLOPT_COOKIEFILE and CURLOPT_COOKIE can be used in the same request
- improved peer certificate name verification
- allocation failures cause no leaks nor crashes
- the progress meter display now handles file sizes up to full 8 exabytes (which is as high a signed 64-bit number can reach)
- general HTTP authentication improvements
- HTTP Digest authentication with the proxy works
- multipart formposting with -F and filenames with spaces work again
- curl_easy_duphandle() now works when ares-enabled
- HTTP Digest authentication works a lot more like the RFC says
- curl works with telnet and stdin properly on Windows
- configure --without-ssl works even when pkg-config has OpenSSL details
- src/hugehelp.c builds correct again in non-configure build environments

## Fixed in 7.11.2 - April 26 2004

7.11.2
7.11.2 changes only

Changes:

- removed maximum user+password+hostname size limit
- removed maximum directory depth limit for FTP
- the ares build now requires c-ares 1.2.0 or later
- --tcp-nodelay and CURLOPT_TCP_NODELAY were added
- curl/curlver.h contains the libcurl version info now

Bugfixes:

- configure --disable-manual works better
- removed a memory leak when doing a windows threaded resolve and it failed
- --proxy-ntlm now checks if libcurl supports NTLM before using it
- minor --fail with authentication bugfix
- CURLOPT_IPRESOLVE set to CURL_IPRESOLVE_V6 now causes a returned error if the host only can resolve ipv4 addresses
- curl -4/-6 now actually sets the requested option in libcurl
- multi interface on Windows without ares works again
- improved resolution for the CURLINFO_*_TIME info variables
- getting only a 100 Continue response and nothing else, when talking HTTP, is now treated as an error by libcurl
- fixed minor memory leak in libcurl for Windows when statically linked
- POST/PUT using Digest/NTLM/Negotiate (including anyauth) now work better
- --limit-rate with high speed rates is a lot more accurate now, and supports limiting to speeds >2GB/sec on systems with Large File support.
- curl_strnqual.3 "refer-to" man page fix
- fixed a minor old progress meter final update bug
- added checks for a working NI_WITHSCOPEID before that is used
- fixed a flaw that prevented ares name resolve timeouts to occur
- getting username from http_proxy env variable works now
- fixed too early name resolve timeouts with ares
- HTTP Digest "re-negotiation" works now
- CURLOPT_FAILONERROR (-f/--fail) works with all kinds of authentication
- better thread-safety thanks to the internal strerror() replacement
- better thread-safety on AIX thanks to better function detection
- minor ipv6 build fix for windows
- the test suite runs fine with mingw-built curl
- the postit2.c example works now
- better error message when --interface fails on windows
- the progress meter now displays long times better
- CURLINFO_CONTENT_LENGTH_DOWNLOAD with CURLOPT_NOBODY set TRUE now works
- passwords longer than 14 letters work with NTLM
- `make netware` in the root directory works now
- builds fine on VMS again and even nicer than before

## Fixed in 7.11.1 - March 19 2004

7.11.1
7.11.1 changes only

Changes:

- CURLOPT_POSTFIELDSIZE_LARGE added to offer POSTs larger than 2GB
- CURL_VERSION_LARGEFILE is a feature bit returned by libcurls that feature large file support
- libcurl only requires winsock 1.1 on windows now
- when doing FTP, curl now sends QUIT before disconnecting
- name resolves can now timeout on windows too
- $HOME is now recognized better when looking for .netrc files
- now reuses the ares handle when reusing curl handles
- SO_BINDTODEVICE is used for network interface binding
- configure --disable-manual disables the built-in huge manual from the command line tool
- the default Accept: header used in HTTP requests changed
- asynch dns lookups now require the c-ares library
- curl --socks can be used to set a SOCKS5 proxy to use
- response-headers received after a (proxy) CONNECT request are now passed to the header callback like other headers

Bugfixes:

- builds and runs on Novell NetWare
- Windows builds now report OS as "i386-pc-win32"
- received signals during SSL connect is handled better
- improved PUT/POST with NTLM/Digest authentication
- following redirects and doing NTLM/Digest (where the first connection gets closed) with the multi interface work better now
- file: progress meter and getinfo variables work now
- CURLOPT_FRESH_CONNECT and CURLAUTH_NTLM now work when set together
- share interface usage without (un)lock functions segfaulted
- --limit-rate no longer cripples the --speed-limit feature
- fixed verbose output problem with ipv6-enabled reused connections
- fixed the socks5 code to check version in the socks response properly
- dns cache bug - fixed the `inuse` counter
- large file fix for Content-Length
- better docs for the share interface
- several configure fixes for mingw/msys
- setting a Host: header is no longer affecting the Host: header used when libcurl follows a Location:
- fixed numerous compiler warnings on several operating systems and compilers
- PUTting from stdin could not disable chunked transfer-encoding
- corrected the mingw makefiles
- improved the configure libz detection
- fixed EPRT/PORT use when doing FTP on ipv6-enabled AIX hosts
- *nroff commands that only support -mandoc and not -man are now supported (for the built-in manual text in the command line tool)
- fixed the unconditional #include of config.h in hugehelp.c
- builds fine on MPE/iX
- upload using chunked transfer-encoding now sends the last chunk properly teriminated with an extra CRLF
- Fixed the progress meter display for files >2GB
- persistent connections over a proxy messed up the proxy name/password
- the socks5 code segfaulted if no username/password was set
- the *_LARGE options now take curl_off_t types as parameters and this makes it possible to handle large files on windows too
- builds with large file support even on systems without strtoll()

## Fixed in 7.11.0 - January 22 2004

7.11.0
7.11.0 changes only

Changes:

- allows the URL to be set by a callback when using the multi interface
- large file support was added. Use one of the new options: INFILESIZE_LARGE, RESUME_FROM_LARGE and MAXFILESIZE_LARGE
- the new --ftp-pasv overrides a previous --ftpport
- CURLOPT_FTPSSL and ftps:// now do ssl over FTP "The Right Way" (the curl tool now features the --ftp-ssl option)
- The Windows DLLs are built with an added "resource file"
- New LIBCURL_VERSION_* defines for easier checking version number
- Included Mac OS X `framework` makefile in the release archive
- Removed the TRUE and FALSE #defines from the public curl header file
- Added CURLOPT_NETRC_FILE

Bugfixes:

- improved config file parsing for options with required parameters
- using --trace with a bad filename could crash
- release archive contains compressed help text
- the win32 password prompting supports backspace
- builds natively on AmigaOS (without unix emulation)
- ftps:// now uses port 990 by default
- the "configure --with-spnego" action was improved
- fixed a rare follow-redirect problem
- curl-config --feature now outputs AsynchDNS if enabled
- occasional reuse of freed-memory problem fixed
- curl-config --libs now include the ares link directory
- configure --enable-ares now accepts a given path
- -lz no longer appear twice on the link line
- more descriptive error message if the FTP response reader fails
- curl-config --feature now shows `AsynchDNS` when built with ares
- VMS build up-to-date and clarified source code
- resolve bug caused socks5 to fail
- Content-Length: is ignored when getting chunked Transfer-Encoding
- POST over proxy to https server failed
- improved how libcurl deals with persistent connections over FTP when a transfer fails
- accessing a proxy that requires Basic auth without password caused a hang
- a free free-twice problem in the server certificate code
- minor memory leak when using ranges on persistent connections
- formpost parts sending files with .html extensions now use "Content-Type: text/html"
- formpost parts now default to "Content-Type: application/octet-stream"
- --progress-bar was slightly improved
- Failing to connect to localhost, using the multi interface on Solaris showed a connect problem now fixed.
- The generated ca-bundle.h file is now generated in the build dir, not the source dir
- The FTP-EPSV response parser for the 229 code was fixed
- curl finds the user's home directory slightly different and hopefully better on Windows
- testcurl.sh can now be used to autotest daily tarballs
- a couple of command line options now check that the underlying library actually supports the features before trying to enable them
- uninitialized variable fix
- better html versions of the man pages

## Fixed in 7.10.8 - November 1 2003

7.10.8
7.10.8 changes only

Changes:

- --head now works on file:// URLs too
- file: URLs with only one initial slash now works too
- RELEASE-NOTES document added to the release archive to summarize the big and visible changes and bugfixes
- CURLOPT_MAXFILESIZE was added, and --max-filesize
- CURLOPT_PASSWDFUNCTION and CURLOPT_PASSWDDATA are no longer supported
- IPv6 is now supported on Windows builds too
- CURLOPT_IPRESOLVE lets you select pure IPv6 or IPv4 resolved addresses (offers the command line options -4/--ipv4 and -6/--ipv6)
- GSS-Negotiate works fine with the MIT kerberos library
- SPNEGO support added, if libcurl is built with the FBopenssl libraries, curl_version_info() can return a feature bit for it and curl -V displays SPNEGO as a feature if libcurl is built with it enabled
- easy handles added to a multi handle now share DNS cache automatically
- CURLINFO_HTTPAUTH_AVAIL and CURLINFO_PROXYAUTH_AVAIL were added
- CURLOPT_FTP_RESPONSE_TIMEOUT was added
- NTLM, Digest and GSS-Negotiate authentications also work for HTTPS over proxies
- curl supports multiple -T flags to allow several uploaded files using a single command line
- CURLINFO_RESPONSE_CODE can return the last FTP response code

Bugfixes:

- added work-around for a name resolve problem on some glibc versions
- a rare ERRORBUFFER single-byte overflow was fixed
- HTTP-resuming an already downloaded file works better
- builds better on Solaris 8+ with gcc
- --disable-eprt works now
- improved CA cert verification
- --anyauth could bug when the first response had no body contents
- double password prompting when doing NTLM fixed
- improved performance when used multi-threaded on windows
- share-locking during DNS lookups was modified
- resume was not possible to switch off properly once enabled
- fixed the ipv4 connect code when a DNS entry has multiple IPs
- now checks subjectAltNames when matching certs
- HTTP POST using read callback works again
- builds fine on BeOS now
- CURLOPT_COOKIE set to NULL no longer sends the previously set cookie
- if an FTP transfer used a bad path, the next transfer could fail too
- ares-built libcurl resolves IP-only names properly
- changed the curl_lock_function proto to prevent warnings on some compilers
- builds fine on QNX 6.2.x now
- PUT with --digest works now
- --anyauth that picks NTLM and then follows a redirect (and does NTLM again) works now
- asynch resolves now work on NT4 too
- a DNS cache trash (possible segfault) was fixed
- runtests.pl clears all proxy environment variables before the test is run
- Microsoft's "Negotiate" authentication is now supported by the existing GSSNEGOTIATE option
- A set zero-length proxy name confused libcurl
- Digest authentication works again without OpenSSL on 64-bit architectures
- configure --enable-thread works now
- buffer problems in the test suite's web server were fixed
- improved proxy password handling
- LDAP is again working nicely with the current OpenLDAP
- asynch name lookup for non-resolving hosts now return a proper error message
- CURLOPT_SSL_VERIFYHOST set to 1 no longer aborts if no CN field is obtainable, it merely warns about it
- name resolve segfault with uClibc fixed
- multi interface and multi-part/formpost could end in segfault
- curl_multi_info_read() sets the msgs_in_queue to 0 when returning NULL
- multi interface, ares and non-resolving host caused a segfault
- minor single SSL memory leak fixed
- Setting CURLOPT_WRITEFUNCTION or CURLOPT_READFUNCTION to NULL resets them to default

## Fixed in 7.10.7 - August 15 2003

7.10.7
7.10.7 changes only

Changes:

- CURLOPT_PROXYAUTH was added to allow different authentication methods on proxies (--proxy-ntlm was added to the curl tool).
- --ftp-create-dirs and CURLOPT_FTP_CREATE_MISSING_DIRS were added
- optional and still experimental asynch name resolve support
- getting headers-only and no-body from FTP can now reply "Accept-Ranges" if the server seems to support REST.

Bugfixes:

- fixed a memory leak on reused connections with proxy-authentication
- cookies with no contents are sent off too now
- 64-bit-related bugfix for uploads
- file:// URLs with drive letters now work on windows and OS/2
- The output numbering (#[num]) on URL globbing did not work due to a bug in curl_msprintf()
- FTP persistent download directory reuse problem fixed
- cookie parser now only requires two dots in cookie domain
- FOLLOWLOCATION (or -L) did not always ignore the redirect page properly
- information leak fixed. When proxy authentication is used in a CONNECT request (as used for all SSL connects and otherwise enforced tunnel-thru-proxy requests), the same authentication header was also wrongly sent to the remote host.
- the VC++ Makefiles were updated
- builds better on VMS
- src/hugehelp.c is now distributed uncompressed in the source package
- the mkhelp script now compresses properly on DOS/Windows

## Fixed in 7.10.6 - July 28 2003

7.10.6
7.10.6 changes only

Changes:

- CURLOPT_SSL_CTX_FUNCTION allows a custom callback for SSL connections
- multiple patches lets curl build and run on DOS
- libcurl now deals with spaces in Location: redirects and URLifies them
- curl --version shows more detailed info
- curl_version_info() now returns info on NTLM, GSS-Negotiate and Debug
- curl_version() includes "GSS" in the string if built with GSSAPI available
- Pick-best-authentication option added (--anyauth, using the CURLOPT_HTTPAUTH set to CURLAUTH_ANY)
- NTLM authentication support (--ntlm and CURLAUTH_NTLM)
- GSS-Negotiate authentication support (--negotiate and CURLAUTH_GSSNEGOTIATE)
- Digest authentication support added (--digest and CURLAUTH_DIGEST)
- Allow curl to switch (back to) to Basic authentication (--basic)
- libcurl supports name and password in proxy environment variables

Bugfixes:

- double slash after the hostname on an FTP URL again points out the root dir
- obscure and rare DNS cache problem was fixed
- multiple FTP connections to the same host with different usernames did not work properly
- no more CWD commands without arguments for ftp connections
- curl no longer uses setvbuf() due to portability problems
- VMS build fixes
- the curl tool has the -M manual compressed internally if built with libz
- URL globbing syntax error could cause segfault
- Huge (>40-60KB) GET requests over HTTPS failed.
- Content-Length now overrides socket-closed as a means of knowing when the response body is complete.
- --progress-bar takes the initial size into account when doing resumed downloads
- work around SSL bugs better
- libcurl typically issues POST requests with less send() calls
- better main makefile
- external headers improved portability
- Listing FTP directories without contents could leak a socket
- Getting HTTP contents in one line without headers failed
- bugfixed the socks5-proxy usage (twice)
- h_aliases name-lookup rare crash fixed
- improved curl -M output
- curl_unescape() now only unescapes valid %HH codes

## Fixed in 7.10.5 - May 19 2003

7.10.5
7.10.5 changes only

Changes:

- support for Content-Encoding: gzip was added
- test cases modified to include server requirement in each test case file
- CURLOPT_FTP_USE_EPRT was added, --disable-eprt with the tool
- setting CURLOPT_ENCODING to "" automatically enables all supported encodings

Bugfixes:

- libcurl now calls the progress meter during slow ftp responses as well
- a write loop resulting in badly updated progress meter was fixed
- non-blocking sockets fix for PORT ftp downloads
- CURLOPT_INTERFACE performance fix on Linux
- EAGAIN-fix improves HPUX (at least) functionality
- configure script fix for the writable argv check and cross-compiles
- features more verbose error message when some OpenSSL read errors occur
- improved ftp compliance with RFC1738, now performs individual CWD commands for each path part in the URL
- cookie overhaul: fixed jarsaving, improved path treatment and stricter cookie receiving, adjusts to Hosts: headers
- CURLINFO_CONNECT_TIME works with the multi interface too
- curl_easy_setopt() now returns correct error codes
- formposting .html files set Content-Type text/html now
- curl reports a new huge and verbose error message on CA cert problems
- libcurl now returns CURLE_SSL_CACERT on CA cert problems
- chunked-transfer deflate downloads work
- FTP-server responses to CWD are now more liberally treated
- fixed URL parsing when `?` is used after the hostname without `/`.
- curl -I on ftp files outputs the date with correct time zone (GMT)
- curl -z now works for FTP files (CURLOPT_TIMECONDITION)
- the default DEBUGFUNCTION outputs incoming headers as well
- Content-Type extraction did wrong if there was no space after the colon
- the MSVC project file was fixed
- no longer installs the ca bundle when built --without-ssl
- the boundary strings in formposts now look similar to the ones IE uses
- test suite runs on cygwin

## Fixed in 7.10.4 - April 2 2003

7.10.4
7.10.4 changes only

Changes:

- the curl tool now "clears" sensitive commands line args
- no more emacs local variables in the source files
- script for distributed, automatic, multi-platform testing added. Please join up and help us test the bleeding edge curl on various platforms!
- the "scratch buffer" is now only allocated when actually needed
- removed the strequal and strnequal macros from curl/curl.h
- added CURLOPT_UNRESTRICTED_AUTH / --location-trusted

Bugfixes:

- "curl -O" only, now outputs an error message accordingly
- builds fine on Redhat Linux 9 (configure fix)
- the CA cert bundle included a demo cert now removed
- changing some attributes between two transfers when reusing a connection did not "take effect" properly
- the test suite runs faster and hopefully a bit more reliably
- improved configure check for presence of functions, needed for HPUX
- the curl tool now makes a correct URL escaping when appending to the URL when using -T and the filename is appended to the URL.
- configure --enable-libgcc now explicitly add -lgcc to the linker
- better configure checks for headers (since some platforms got nasty warnings output previously)
- configure --help looks nicer
- data transfer bug on HP-UX systems
- improved random seeding for systems without a reliable random source
- 64-bit Sparc compiler warnings removed
- a case where a connect failure did not return an error string
- DNS cache problem in AIX 4.3 and later was fixed
- a POST-then-GET problem when reusing the same handle in libcurl
- extra precaution added for FTP servers returning 0 bytes to SIZE commands
- looping issue in the receive function (i.e badly updated progress meter)
- Fixed the `Expect: 100-continue` behavior
- CURLOPT_MAXCONNECTS segfault fixed
- multi-interface connecting on Windows to non-listening ports fixed
- Curl_base64_encode() now encodes zero-bytes too properly
- fixed the infamous SSL error:00000000 outputs
- zlib build fix in the mingw makefile
- do not check for ca cert env variable if --insecure is used
- always use strict cert name check unless --insecure is used
- content-type extracting fixed
- DEBUGFUNCTION could be called with wrong arguments in uploads
- ftp downloads could wrongly return CURLE_PARTIAL_FILE in some conditions
- the fopen.c example code did not work
- content-type extracting memory leak fixed
- curl/multi.h was fixed for C++ compiles
- .netrc file scanning for names+passwored fixed
- curl-config --cflags works even when include dirs is not /usr/include
- CURLINFO_PRIVATE can return NULL properly

## Fixed in 7.10.3 - January 14 2003

7.10.3
7.10.3 changes only

Changes:

- Added CURLOPT_PRIVATE and CURLINFO_PRIVATE
- Added CURLOPT_HTTP200ALIASES
- Added --create-dirs
- libcurl test cases have been added
- configure --enable-maintainer-mode was added

Bugfixes:

- Transfer-Encoding: chunked for uploads works
- Test cases 306 and 402 now run fine
- configure script bug related to CONTENT_ENCODING fixed
- Borland Makefiles up-to-date
- Name resolve fix to correct the 7.10.2-fix!
- curl/curl.h now has a more proper extern "C" for C++
- CURL_MAX_WRITE_SIZE lowered to 16KB: improves performance on Windows
- configure --enable-debug now cuts off -O* options to the compiler
- Using multi interface and proxy to non-listening port caused a hang
- CURLOPT_USERPWD-imposed memory leak removed
- Verbose connect message crash removed
- curl-config --cflags
- better SSL-reading with no CPU-eating loop left
- A base64 decoding bug was fixed (affected kerberos4)
- The MSVC++ Makefile for debug targets was improved
- Initing the global DNS cache is now done better
- "curl -I ftp://domain/non-existing-file" was flawed
- fixed wildcard name checks in server certificates

## Fixed in 7.10.2 - November 18 2002

7.10.2
7.10.2 changes only

Changes:

- PDF versions of much documentation are included in the tarball
- Transfer-Encoding: chunked for uploads are now supported

Bugfixes:

- builds fine on MSVC again
- CURLOPT_CONNECTTIMEOUT works better
- name resolving failed with glibc 2.2.93
- libtool build fix for -no-undefined
- the follow location code could crash occasionally
- multi interface and FOLLOWLOCATION did not work properly
- curl -j (CURLOPT_COOKIESESSION) did not work properly
- config file parser could crash on the presence of CRLF newlines
- downloading HTTP without headers sometimes corrupted the data
- connecting to a bad port number with the multi interface did wrong

## Fixed in 7.10.1 - October 11 2002

7.10.1
7.10.1 changes only

Changes:

- configure --without-zlib explicitly disables zlib in builds

Bugfixes:

- junk data could get inserted when saving HTTP headers
- telnet connections timeout properly
- make install when built outside source tree works again
- FOLLOW_LOCATION works for the multi interface too
- HTTP Location following now deals with ./ and ../ cases
- The OpenSSL ENGINE check was improved in the configure script

## Fixed in 7.10 - October 1 2002

7.10
7.10 changes only

Changes:

- curl -x "" now disables proxy-usage completely
- The libcurl and thus the curl version string too are modified slightly
- added curl_version_info() for various runtime version info
- added curl_free() that allows freeing data libcurl malloced()
- CURLOPT_ENCODING added, supports decompression of compressed downloaded data This is used with `curl --compressed`. This feature uses the libz library, if present.
- MIT-licensed only, no dual-stuff. That is history. Old. Gone. Forgotten.
- libcurl does peer certificate verification by default. This needs to be disabled if you need to talk to SSL servers in an insecure way! (-k does this). See further details in the UPGRADE document.
- SOCKS5-proxy support was added (somewhat flawed, see CHANGES for details)
- More SSL error codes was added
- CURLOPT_NOSIGNAL was added for multi-threaded programs to use
- --limit-rate is now supported
- CURLOPT_BUFFERSIZE sets a desired read buffer size
- The FTP PORT command uses a better default IP address

Bugfixes:

- transfer after a failed connect when using the multi interface
- headerless HTTP downloads
- "-C -" on multiple file downloads
- resume on file:// downloads
- memory leak in libcurl on repeated resume http downloads
- crashes on 64-bit machines solved
- IPv6 IP-address only URLs sent bad Host: headers
- --silent is more silent when doing URL globbing fetches
- *multi_perform() now returns control properly when waiting for connect
- curl_formadd man page was corrected
- curl_escape() and curl_unescape() no longer deals with `+`
- improved performance on persistent transfers on windows
- no longer closes ftp connections unnecessarily often
- -N works again
- the windows DLL now builds with the multi interface enabled
- the internal password prompt now uses stderr instead of stdout
- minor cookie parsing bug when no space came after the header colon
- better #ifdef conditions in the global curl header files
- the curl tool did not allow POST of zero contents
- literal RFC2732-style IPv6 addresses did not work

## Fixed in 7.9.8 - June 13 2002

7.9.8
7.9.8 changes only

Changes:

- curl_formadd() can do file upload parts from buffer
- libcurl can be built with specific protocols disabled
- should build nicely with modified OpenSSL 0.9.7 API
- win32 timers now use higher resolution
- CURLOPT_CAPATH was added (--capath on the command line)
- CURLOPT_NETRC now supports optional or required netrc mode
- curl_formadd() now returns a CURLFORMcode type, not a plain int.

Bugfixes:

- name resolves can now time-out properly (on unix-like systems)
- an empty connect failure error message was filled in
- when curl_easy_perform() failed on an FTP transfer, it could leak a socket
- a curl_multi_remove_handle() crash was removed
- windows versions no longer complain on "weak seeding"
- 64-bit architectures could crash in the resolve code
- CURLINFO_REQUEST_SIZE now works as documented
- CURLINFO_REDIRECT_TIME returns a correct time now
- getting an empty FTP file does not cause an error anymore
- curl_multi_perform() works without curl_multi_fdset()
- reusing a connection over a proxy could do bad Host: headers
- CURLOPT_POST with a "" string could lead to a crash.
- better certificate loading
- Name resolve crash on platforms without *_r() functions removed
- minor compiler problems on FreeBSD fixed

## Fixed in 7.9.7 - May 10 2002

7.9.7
7.9.7 changes only

Changes:

- CURLOPT_COOKIESESSION (-j with the client) starts a new cookie session
- --trace or --trace-ascii dump a full network/debug dump to a given file
- Added: curl_multi_info_read() is now implemented as documented
- Added CURLINFO_REDIRECT_TIME and CURLINFO_REDIRECT_COUNT

Bugfixes:

- CURLOPT_DEBUGFUNCTION gets called as documented
- -D with multiple URLs appends all headers in the same file
- multi interface transfers work better
- multiple transfers reset download counters better in between
- Pruning now prevents the DNS cache from growing out of proportions
- no_proxy did not work when URL contained port numbers
- --interface did not work for IPv6 enabled libcurls
- the TIMECOND defines are now using CURL_ prefixes
- Now uses less memory for name resolves on most operating systems
- pack_hostent works with 64-bit pointers
- Prunes old DNS cache entries
- HTTP 301 response after a POST now treated differently
- rfc1867-formposting a non-existent file now causes a failure

## Fixed in 7.9.6 - April 14 2002

7.9.6
7.9.6 changes only

Changes:

- Added CURLOPT_DEBUGFUNCTION
- Added multi interface man pages, examples and public header files.
- All CURLFORM_* options can now be given in an array
- Added: -F supports filename= (using the new CURLFORM_FILENAME)

Bugfixes:

- libcurl skips preceding white spaces in cookie contents
- CURLINFO_CONNECT_TIME is now set even when connect fails
- -x did not use the documented default port
- RISC OS version now offers --environment
- HTTP/1.0 304-replies are dealt with better
- .curlrc is read from current directory if HOME is not set
- The include file curl/curl.h compiles on pre-ISO compilers
- getting http headers-only could "hang" during 1 second extra
- verbose passive ftp transfers on AIX could crash
- improved reuse of dead proxy connections
- binary HTTP POSTs on Windows did not work (client-code problem)
- CRLF replacing in uploads was not working
- -G and -d work together again
- using verbose when doing ftp passive transfers could core dump
- IPv6 name lookups work again
- HTTP POST with data passed in with the read callback now works
- curl -O segfault
- --progress-bar
- Bugfixed a missing newline after --progress-bar output

## Fixed in 7.9.5 - March 7 2002

7.9.5
7.9.5 changes only

Changes:

- Added CURLOPT_PREQUOTE
- -w now supports %{content_type}

Bugfixes:

- fixed the client-side backslash treatment in URLs
- Mofied the file hierarchy in the archive somewhat
- fixed the downloaded header size counter
- fixed the cookie parser
- Replaced the former test HTTP server with a new one written in C
- fixed the total time counter that could end up blank at times
- Minor portability changes
- Tweaked name resolves with getaddrinfo() to run faster on Linux
- fixed big HTTP requests (such as big POSTs)
- fixed connection timeouts
- fixed Host: lines on multiple requests over proxy
- fixed 64-bit architecture builds.
- fixed Expect: header disabling
- Improved the Windows makefiles and install documentation
- fixed multipart formposts
- fixed CURLINFO_CONTENT_TYPE
- fixed another SSL download problem

## Fixed in 7.9.4 - March 4 2002

7.9.4
7.9.4 changes only

Changes:

- Introduced CURLINFO_CONTENT_TYPE
- CURLOPT_CUSTOMREQUEST can now be used with CURLOPT_POSTFIELDS

Bugfixes:

- Improved the gethostbyname_r configure check for HP-UX 11.00
- Bugfixed the DNS cache
- Bugfixed SSL download (due to the non-blocking sockets)
- Only seed SSL once for a program's life time
- IPv4-only Linux machines could crash on name resolves
- curl_getdate() is now fully reentrant
- The header length counter is now reset in each curl_easy_perform()
- Normal HTTP POSTs no longer append an extra set of CRLF
- Location: following on persistent connections work
- No longer installs the multi examples on make install.

## Fixed in 7.9.3 - January 23 2002

7.9.3
7.9.3 changes only

Changes:

- introduced a DNS lookup cache
- OpenSSL ENGINE support (read CHANGES for full details)
- CURLFORM_CONTENTHEADER let us add headers in form posts

Bugfixes:

- fixed multipart formposts with non-existing files
- builds with OpenSSL versions prior to 0.9.5 again
- SSL session cache crashed when filled
- improved timeouts with HTTPS
- bugfixed the cookie engine and parser
- HTTP code 204 is now treated properly
- libcurl now provides the FTP response lines to the header callback
- 64-bit-architecture fixes
- bugfixed using proxy specified in an environment variable
- made libcurl support FTP operations without any transfer
- error messages are now stored without newlines
- -T filenames get the path stripped before used remotely
- minor compiling problems fixed for some platforms

## Fixed in 7.9.2 - December 5 2001

7.9.2
7.9.2 changes only

Changes:

- --disable-epsv is a new option to the curl command line tool
- added CURLOPT_FTP_USE_EPSV
- added CURLINFO_STARTTRANSFER_TIME
- added the -1/--TLSv1 option

Bugfixes:

- compiles and builds on the good old Mac OS (in addition to Mac OS X)
- bugfixed persistent connections over proxy with multiple protocols
- bugfixed verbose ftp output on Tru64 unix
- passive ftp download works with IPv6
- always return proper error code on failed connects
- bugfixed FTP response reader
- bugfixed verbose telnet
- bugfixed conditional HTTP fetches based on time
- multiple calls to curl_global_init() is now treated better
- bugfixed multiple ftp requests
- made -p/--proxytunnel work for plain HTTP as well
- "current speed" progress meter bugfix
- improved the name resolver configure check
- libcurl now restores signal handlers and timeouts properly
- improved SSL over HTTP-proxy when using weird proxies(!)
- bugfixed LDAP transfers

## Fixed in 7.9.1 - November 4 2001

7.9.1
7.9.1 changes only

Changes:

- CURLE_GOT_NOTHING is a new possible error code
- -0/--http1.0 can now be used to set HTTP 1.0 operations
- `curl` no longer uses curl_formparse()
- non-blocking connects

Bugfixes:

- much better connection reuse validity check
- bugfixed connection reuse for FTP URLs containing name and password
- LDAP transfers no longer "hang"
- a memory leak in the cookie engine was removed
- curl_easy_duphandle() now duplicates cookie parser status too
- --fail now only returns error if HTTP code is >= 400
- a possible memory leak when a transfer failed was removed
- builds better in cygwin
- "current speed" meter more accurate
- -c without -b saves the cookies now
- bugfixed libcurl for "thread-hopping" on Windows
- removed memory leak in IPv6-enabled libcurl
- bugfixed curl_formadd()
- bugfixed CURLINFO_FILETIME
- bugfixed cookiejar

## Fixed in 7.9 - September 23 2001

7.9
7.9 changes only

Changes:

- -R sets the timestamp of a downloaded file to the same as the remote file
- -c writes all cookies to a specified file (based on the new libcurl option CURLOPT_COOKIEJAR)
- SSL session ID caching is being done for multiple requests to the same hosts
- displays certificate expire date with SSL and verbose output
- curl_formadd() is a new function to replace the now deprecated curl_formparse() one, for building rfc1867 form posts.
- release archive now includes all docs as HTML pages too

Bugfixes:

- now properly returns an error code when connection to an SSL server with a non-legitimate certificate.
- CURLOPT_COOKIEFILE can now be specified any number of times
- fixed portability issue in the SSL code
- -G improvements, now works with -I and on URLs including question mark.
- various windows compile, build and makefile fixes
- multiple curl_easy_perform() invokes when a previous invoke followed a Location: could lead to a crash
- rfc1867-posts are now done including the Expect: 100-continue header.
- flushes the progress meter stream to improve look on windows
- fixed the configure script --with-ssl problem

## Fixed in 7.8.1 - August 20 2001

7.8.1
7.8.1 changes only

Changes:

- added CURLOPT_HTTPGET

Bugfixes:

- the configure script now sets up socklen_t properly
- added the -G option that converts -d posts to use GET requests
- bugfix: CURLOPT_POST without postfields caused libcurl crash
- bugfixed the URL parser for IPv6 IP addresses (RFC 2732)
- corrected some minor size_t mixups in the code
- rfc1867-style form posts no longer has any size-limit
- bugfixed the redirected stderr feature
- more test cases added
- libcurl now verifies the CN name of server certificates when SSLing
- curl -E supports filenames with driver letters now on windows
- curl-config --libs now includes the path to the installed libcurl
- file:// with "relative" paths now work like other tools/libs
- curl builds under RISC OS and OpenVMS now
- libcurl groks the NCSA httpd 1.5.x weirdo (non-standard) replies
- curl_escape() no longer tries to skip already encoded data
- progress callback minor bugfix
- bugfixed the main transfer select() loop!
- corrected FTP range downloads
- better treatment of cut off FTP transfers
- corrected the libcurl shared library version number
- improved configure --with-ssl handling
- multiple file download with resume works better
- formpost with field names containing space works now
- the ftp tests now run OK on IPv6 enabled hosts
- verifying certificates bugfixed

## Fixed in 7.8 - June 7 2001

7.8
7.8 changes only

Changes:

- `curl-config --vernum` shows version number as a hexadecimal number
- libcurl's got two new functions (for global init/cleanup)

Bugfixes:

- SSL memory leak fixed
- new file format for the tests in the test suite
- netscape/mozilla cookie file parser bugfix
- everything is now built with autoconf 2.50, libtool 1.4 and automake 1.4-p1
- libcurl's own version of `strlcat` no longer pollutes the name space
- libcurl now treats an already completed resumed download as a successful operation, and not as an error like before
- https and ftps test cases added to the test suite (depend on stunnel)
- better white space awareness when parsing HTTP headers
- curl -I now plays ball even if the ftp server does not grok SIZE
- corrected resumed transfers on reused persistent connections
- FTP PORT works again when libcurl is IPv6-enabled
- corrected path usage when doing multiple FTP transfers
- several Location: header related bugs corrected

## Fixed in 7.7.3 - May 4 2001

7.7.3
7.7.3 changes only

Bugfixes:

- we have discovered that TELNET does not work under win32
- HTTP Content-Length: 0 works better
- HTTP 304-replies are better treated
- persistent connections with mixed chunked and non-chunked transfers work now
- connection reuse for non-proxy connections on non-default ports work
- corrected the OpenSSL version string output

## Fixed in 7.7.2 - April 22 2001

7.7.2
7.7.2 changes only

Changes:

- `curl-config` was added to help applications use libcurl
- A Tcl interface has been written
- A Java interface has been written
- A Ruby interface was announced

Bugfixes:

- The Perl interface is improved a lot
- Fixed download resumes on persistent connections
- connection timeouts work in windows
- HTTP_PROXY in uppercase is no longer used
- curl_escape() with a 0 length argument works now
- the MSVC projects files were updated
- the Borland makefiles were updated
- displays OpenSSL 0.9.6a properly in the version string
- The Host: headers could get wrong on persistent connections

## Fixed in 7.7.1 - April 3 2001

7.7.1
7.7.1 changes only

Bugfixes:

- location:-fix
- two crash reasons removed
- ftps:// support added
- the perl interface corrected to work with 7.7
- bugfixed the HTTP/1.0 persistent connection support
- Passing a read-only URL to libcurl could make it crash on http redirects
- HEAD responses are now always headers-only
- curl could reuse connections a little too much
- different treatment of HTTP error 302
- following http redirects on persistent connections could reach the maxredirs amount accidentally
- curl_escape() do not re-encode already encoded letters anymore

## Fixed in 7.7 - March 22 2001

7.7
7.7 changes only

Changes:

- supports HTTP proxy with IPv6
- curl_escape and curl_unescape are now part of the official libcurl interface
- libcurl speaks HTTP/1.1 lingo now
- persistent connection support

Bugfixes:

- the .netrc parser finds the home directory better
- fixed a crash that could happen with redirects and authentication
- improved random seeding for SSL connections
- improved TELNET functionality

## Fixed in 7.6.1 - February 9 2001

7.6.1
7.6.1 changes only

Changes:

- partial IPv6 support (HTTP without proxy and only "active" FTP so far)
- two new options to curl_easy_getinfo() for file sizes were added

Bugfixes:

- following Location: when using Range: requests work
- telnet works again (7.6 crashed)
- Corrected the HTTP PUT resume
- Better Location: and HTTP return code (3xx) treatment
- Resumed transfer status is displayed in progress meter (though simple)
- HTTP download resume again complains if Range is not supported

## Fixed in 7.6 - January 26 2001

7.6
7.6 changes only

Changes:

- -g/--globoff was added to disable the URL globbing
- command line options can be written "merged" -ofile equals -o file
- initial but still basic IPv6 adjustments

Bugfixes:

- fixed `total time` counter to be more accurate
- possible SSL-read problem fixed (which could make curl return empty HTML)
- no length restrictions on URLs anywhere in the libcurl code
- supports building outside the source-tree
- includes make-target for `automatic` RPM package creation
- added multiple URL support on the command line
- krb4-ftp fixed
- massive symbol renaming of libcurl internals to decrease name pollution

## Fixed in 7.5.2 - January 4 2001

7.5.2
7.5.2 changes only

Changes:

- new licensing, MPL or MIT/X

Bugfixes:

- updated man page
- FTP commands are now sent in single write()s
- removed a file descriptor leak when doing PORT ftp
- improved quote command error checks (FTP)
- misaligned free() crash removed (patch)

## Fixed in 7.5.1 - December 11 2000

7.5.1
7.5.1 changes only

Changes:

- added Borland makefiles

Bugfixes:

- portability fixes for SCO and HPUX
- using an -o filename that is longer than the URL works (patch)
- multiple URLs and -o or -O works better! (patch)

## Fixed in 7.5 - December 1 2000

7.5
7.5 changes only

Changes:

- new --max-redirs option and corresponding CURLOPT_MAXREDIRS libcurl option.
- libcurl now supports getting the time of a remote file
- --head on an FTP file shows the modification time if available
- --cacert lets you specify a CA certificate to verify peer certificates against when doing HTTPS connections
- curl_formfree() added to libcurl
- added --url to allow URLs to be specified easier in the config file

Bugfixes:

- the shared libcurl library gets a proper version number now
- the MSVC++ makefiles are updated to work
- the test suite is much extended and enhanced
- supports any URL lengths
- ftp CWD could use wrong directory name (with trailing slash)
- ftp transfer failure could leak memory
- curl_unescape() could return a too long string
- deals with lowercase environment variables for proxy settings
- corrected spelling in a few error messages
- memory leaks removed
- improved config file parser
- config file parser crash fixed
- § in HTTP usernames or passwords made bad authorization headers.

## Fixed in 7.4.2 - November 15 2000

7.4.2
7.4.2 changes only

Changes:

- an initial attempt to make a test suite is included
- binary/custom package information is added
- possibility to verify the peer's certificate for HTTPS connections (libcurl)

Bugfixes:

- configure now attempts to find openssl libs better
- the Host: port number could be wrong on HTTPS requests
- -T and -o can be used on the same command line (bugfix)
- file:// bugfix (free() twice)
- ftp --head now sets type first, as some servers report different sizes for different types
- ftp upload resume could hang if the whole file was already uploaded
- another cookie parser fix
- added possibility to replace the internal `enter password` function (libcurl)
- encoded username/password in URL is now supported
- username in http-URL bugfix
- fixed the timers when location: headers were followed
- timeouts are now working as supposed (under unix)!
- the interactive password input on win32 no longer echoes the password
- config file parser bugfix
- multiple -d options are now concatenated
- the memory debug system compiles on more systems
- passwords specified with -u can now properly contain @!
- The Host: header no longer sets port number for default ports (HTTP) (as suggested)
- -Y/-y bug fix (bug report)
- more informative error message when https has not been built-in

## Fixed in 7.4.1 - October 16 2000

7.4.1
7.4.1 changes only

Bugfixes:

- Corrected the makefiles in the release archive!

## Fixed in 7.4 - October 16 2000

7.4
7.4 changes only

Bugfixes:

- possible buffer overflow by an evil ftp server fixed
- removed typedef bool from the public include file
- more PHP-friendly multi-part posts (no more Content-Transfer-Encoding header)
- FTP forced ASCII transfers fixed
- memory leaks removed
- the --longoption parser was corrected
- HTTP download resume bugfix
- more information available with -w and curl_easy_getinfo()
- the HTTP request is now sent in one shot (single write())
- -w stuff moved out from the libcurl, the information is now served with the new library function curl_easy_getinfo()
- uploading with curl uses a smaller buffer to start with, to make a better progress meter

## Fixed in 7.3 - September 28 2000

7.3
7.3 changes only

Changes:

- --proxytunnel, non-HTTP tunneled through an HTTP proxy is added
- --interface allows you to specify outgoing interface
- --krb4 enables kerberos for ftp transfers

Bugfixes:

- file:// was fixed
- cookie parser bugfixed
- OpenSSL 0.9.6 usage fixed
- multiple downloaded files bugfix
- more resolver fixes

## Fixed in 7.2.1 - August 31 2000

7.2.1
7.2.1 changes only

Bugfixes:

- Linux name resolve check in the configure script is fixed
- -I on ftp was fixed
- ftp files with + in the filename was corrected.

## Fixed in 7.2 - August 30 2000

7.2
7.2 changes only

Changes:

- --data-binary was added to allow fully binary -d style posts.

Bugfixes:

- Name resolving problems fixed for AIX, HPUX, Digital Unix/Tru64...
- Updated the VC++ makefile

## Fixed in 7.1.1 - August 21 2000

7.1.1
7.1.1 changes only

Bugfixes:

- No user but password in a URL is now working properly
- curl now allows replacing of the Content-Type: and Content-Length: headers when doing -d posts
- fixed a name resolving problem that appeared at times
- rearranged the gethostbyname_r() configure test
- -w did not do well when used with multiple URLs

## Fixed in 7.1 - August 7 2000

7.1
7.1 changes only

Changes:

- CURLOPT_PROXYPORT added to curl_easy_setopt() in the lib
- Now features an `auto referer` so that curl can set the "correct" referer when following location:
- removed CURLOPT_PROGRESSMODE from the lib
- libcurl offers a progress meter callback
- Lots of symbol renamings in the libcurl public stuff.

Bugfixes:

- builds libcurl as a shared library with libtool
- JavaWebServer's incorrect Content-Range headers are supported
- localtime_r() is now used if available instead of localtime()
- `make install` installs the include files properly
- Replacing an internal HTTP header with one that has no content removes the header
- user+password is now restricted and sent only to the first host when Location: is followed to another host
- FTP command response reading now times out properly, even on win32
- rfc1867 form-posting was extended for use with large text posts
- FTP transferring (converted) ASCII could make curl wrongly believe the transfer was only partial, there is no way can tell the expected size of a file downloaded in FTP ASCII
- various manual corrections
- FTP transfers now accept 250 as well as 226 as a positive end-of-transfer result
- The configure check for requiring the nsl and socket lib at once was re-added
- Host: was not displaying the port number as supposed on non-standard ports
- HTTPS connection failures could slip through and make curl attempt reading at a dead socket
- Using -F, -I or -d in any weird mix now causes the curl client to alert
- FTP PORT command bug fixed
- HTTP POST and then following Location: now causes all except the first requests to become GET.
- win32 now sends data binary to stdout unless -B / --use-ascii is specified
- added a README.win32 file
- Custom headers when doing location: works again
- libcurl is much more threadsafe
- Many portability issues have been smoothened out
- The FTP range support were buggy and is now corrected
- Major re-organization of all library internals to allow for a new library interface.
- A buffer overflow (with URLs larger than 4096 characters) was fixed
- The FTP sessions are slightly modified and now they are using CWD to change to the directory where the operation is requested.
- FTP URLs are now treated more like the RFC specifies (minor change)
- now sends user agent string when talking ftp through an HTTP proxy
- made the progress meter nicer for sizes between 10 and 100 megabytes
- no longer checks for install twice in the configure script
- improved win32 headers for VC++ compiling
- minor fix when using libcurl in a multi-threaded program
- the OS/2 port was slightly adjusted
- location following through an HTTP proxy on a specified non-default port did not work
- location following to an absolute URL on a different port did not work

## Fixed in 6.5.2 - March 21 2000

6.5.2
6.5.2 changes only

Bugfixes:

- corrected the -D mockup that caused 6.5.1 to crash

## Fixed in 6.5.1 - March 20 2000

6.5.1
6.5.1 changes only

Bugfixes:

- curl_unescape() buffer overrun removed
- -w `http_code` works!
- OS/2 port
- adjusted to compile smoothly with MS VC++
- -D/--dump-header now only writes the file when needed, and not before

## Fixed in 6.5 - March 13 2000

6.5
6.5 changes only

Changes:

- -N now disables output buffering
- the new -w/--write-out allows for script writers to specify what curl should output after a successful request

Bugfixes:

- now sends cookies space separated
- Corrected OpenSSL 0.9.5 compliance problems
- the perl scripts are moved out from the distribution
- Ultrix port
- -K config files no longer have a max line length
- new progress meter to better show both upload and download
- MacOS X port
- upload and download now performs simultaneously in case of need. This makes posting of big forms that are "echoed back" to finally work.
- the cookie parser should not crash on empty cookie names, nor should it send empty cookies to the server anymore.
- -b now supports both @[filename] and @- for stdin
- unlimited line lengths in the config file
- Compiles on sunos4 again
- Corrected the removed possibility to chose the progress bar
- Made the max display width with progress bar 79 when the COLUMNS variable is not set.

## Fixed in 6.4 - January 17 2000

6.4
6.4 changes only

Changes:

- Ability to run --quote commands after ftp transfers now, as well as before

Bugfixes:

- Improved progress meter
- Getting files with URL syntax codes (%-stuff) from an FTP server was not dealt with nicely
- -b corrupted the cookie header lines when they were read off a server
- Cleaned up the interface between the lib and the curl tool.
- Made the -X's long option change name to --request and now you can specify full request command for ftp listings (like "LIST -l").
- Improved the --stderr workings for win32.
- BeOS port by Lars J. Aas!

## Fixed in 6.3.1 - November 23 1999

6.3.1
6.3.1 changes only

Bugfixes:

- posting an empty variable with -F, like "name=" did cause curl to hang
- when the download from an HTTP server gets cut off curl now warns about it
- better error checks when fwrite()ing the output
- minor fix that may correct the amiga-port problem
- A lethal cookie bug was fixed.

## Fixed in 6.3 - November 10 1999

6.3
6.3 changes only

Changes:

- -b/--cookie is now capable of parsing and understanding the cookies saved in a netscape cookie file. This is useful when you want your script to better inherit the properties of your previous browser session.
- -H/--header now is capable of replacing internal headers. If you add a header that would have been used internally, the added one is used instead.

Bugfixes:

- -z (date-dependent HTTP fetches) now works better since we are doing a date comparison in the client as well.
- Corrected several mistakes in the man page.
- -I now works for ftp-files too. It merely shows the file size now.
- Simple range support added for ftp downloads.
- Following location: in an https:// header could lead to a crash.

## Fixed in 6.2 - October 21 1999

6.2
6.2 changes only

Changes:

- --stderr now supports redirecting the stderr stream to stdout or a file now. This is mainly for victims of Windows.
- the configure script understands --without-ssl now!

Bugfixes:

- another bug in location: following with proxies when the protocol part is not specified was fixed
- fixed the lib Makefile to not include getpass twice when linking
- removed core-dump due to bad free after download was complete in src/main.c
- removed double text output when ftp-downloading
- config.guess recognizes Mac OS X
- HTTP headers are now parsed case insensitive!

## Fixed in 6.1 - October 17 1999

6.1
6.1 changes only

Bugfixes:

- zlib proved not to be as easy to add as I had anticipated. I keep it on hold for now.
- moved the libcurl include files into a subdir named curl
- #include zlib.h fixes
- adjusted the maketgz script to reduce reruns of the configure when building
- -d now can get data from a file or stdin
- HTTP: "Accept-Encoding: gzip,compress,deflate" - experiments
- Misc: Multiple URL download capacity
- HTTP: Made the -F form posting accept files from stdin as well.

## Fixed in 6.0 - September 13 1999

6.0
6.0 changes only

Changes:

- ldap:// with openldap
- file:// works, for unix and win32

Bugfixes:

- cookie matching when using HTTP proxy
- better cookie sending (single line)
- QUOT fix for ftp
- ftp upload through http proxy is now allowed using HTTP PUT
- improved configure openssl path specifier
- enabled "custom" http requests (like DELETE or TRACE)

## Fixed in 5.11 - August 25 1999

5.11
5.11 changes only

Bugfixes:

- Fixed a bug in the header-line realloc() system in download.c.
- I added lib/file.[ch] to offer a first, simple, file:// support.
- Made the release archives get a Makefile in the root dir
- Another Location: bug. curl did not do proper relative locations if the original URL had cgi-parameters that contained a slash. Nusu's page again.
- Corrected the NO_PROXY usage. It is a list of substrings that if one of them matches the tail of the hostname it should connect to, curl should not use a proxy to connect there.
- Fixed a memory bug with http-servers that sent Location: to a Location: page.
- Made cookies work a lot better. Setting the same cookie name several times used to add more cookies instead of replacing the former one which it should have.
- Brought new .spec files as well as a patch for configure.in that lets the configure script find the openssl files better, even when the include files are in /usr/include/openssl

## Fixed in 5.10 - August 13 1999

5.10
5.10 changes only

Changes:

- Added -#/--progress-bar

Bugfixes:

- SSL_CTX_set_default_passwd_cb() has been modified in the 0.9.4 version of OpenSSL. Now why could not they add a *new* function instead of modifying the parameters of an already existing function?
- Made curl output the SSL version number get displayed properly with 0.9.4.
- Added MingW32 (GCC-2.95) support under Win32. The INSTALL file was also a bit rearranged.
- I had to copy a good <arpa/telnet.h> include file into the curl source tree to enable the silly win32 systems to compile. The distribution rights allows us to do that as long as the file remains unmodified.
- I corrected a few minor things that made the compiler complain when -Wall -pedantic was used.
- Moving the official curl webpage to http://curl.haxx.nu.
- Another correction for NROFF in the configure.in that is supposed to be better for IRIX users.
- Albert Chin-A-Young helped with some stupid Makefile things, as well as some fiddling with the getdate.c stuff that he had problems with under HP-UX v10.
- Stefan Kanthak reported a few problems in the configure script which he discovered when trying to make curl compile and build under Siemens SINIX-Z V5.42B2004!
- Marcus Klein accurately informed me that src/version.h was not present in the CVS repository.
- Linus Nielsen rewrote the telnet:// part and now curl offers limited telnet support.
- David Sanderson reported that FORCE_ALLOCA_H or HAVE_ALLOCA_H must be defined for getdate.c to compile properly on HP-UX 11.0.
- I finally got to understand Marcus Klein's FTP download resume problem, which turns out to be due to different outputs from different ftp servers.
- Added text about file transfer resuming to README.curl.
- It breaks with segfault when 1) curl is using .netrc to obtain username/password (option `-n`), and 2) is auto-matically redirected to another location (option `-L`).

## Fixed in 5.9.1 - July 30 1999

5.9.1
5.9.1 changes only

Bugfixes:

- Memory leak in the formdata functions. I added a FormFree() function that is now used and supposed to correct this flaw.
- `curl -L https://www.cwa.com.au/` core dumps. I managed to cure this by correcting the cleanup procedure.
- Now supports longer URLs when following Location:
- Fixed a problem in the upload/POST department: It turned out that http.c accidentally cleared the pointer instead of the byte counter when supposed to.
- If you had a server at a non-standard port that redirected to an URL using a standard port number, curl still used that first port number.
- When using both CONF_FOLLOWLOCATION and CONF_FAILONERROR simultaneously. Since the CONF_FAILONERROR exits on the 302-code that the follow location header outputs, it never shows any html on location: pages. I have now made it look for >=400 codes if CONF_FOLLOWLOCATION is set.
- `struct slist` is now renamed to `struct curl_slist`
- The latest OpenSSL package now have moved the standard include path. It is now in /usr/local/ssl/include/openssl and I have now modified the --enable-ssl option for the configure script to use that as the primary path, and I leave the former path too to work with older packages of OpenSSL too.
- I finally understood the IRIX problem and now it seem to compile on it!
- I adjusted the FTP reply 227 parser to make the PASV command work better with more ftp servers.
- Rearranged. README is new, the old one is now README.curl and I added a README.libcurl
- I also updated the INSTALL text.
- curl did not properly deal with form posting where the variable should not have any content, as in curl -F "form=" www.site.com. It was now fixed.

## Fixed in 5.9 - May 22 1999

5.9
5.9 changes only

Changes:

- Added -S / --show-error to force curl to display the error message in case of an error, even if -s/--silent was used.

Bugfixes:

- Problems with -L under FreeBSD 3.0. I made the allocation of the new URL string a bit faster and different
- Made the cookie parser deal with CRLF newlines too.
- Download() did not properly deal with failing return codes from the sread() function
- --dump-header did not work anymore!
- I moved the code concerning HTTP, DICT and TELNET it their own source files
- Made it compile on cygwin too.
- Made curl compile smoothly on MSVC++ 6 again!
- Changed the #ifdef HAVE_STRFTIME placement for the -z code so that it is easier to discover systems that do not have that function and thus cannot use -z successfully. Made the strftime() get used if WIN32 is defined too.

## Fixed in 5.8 - May 5 1999

5.8
5.8 changes only

Changes:

- curl can now send "If-Modified-Since" headers. Try -z <expression> where expression is a full GNU date expression or a filename to get the date from!

Bugfixes:

- mkhelp.pl has been doing badly lately. I corrected a case problem in the regexes.
- I have now remade the -o option to not touch the file unless it needs to.
- Corrected a bug in the SSLv2/v3 selection.
- Problem with the src/Makefile for FreeBSD. The RM variable is not set and causes the make to fail.
- The curl version number was not set properly. Has not been since 5.6. This was due to a bug in my maketgz script!
- Found a bug in cookies.c that made it crash at times.

## Fixed in 5.7.1 - April 23 1999

5.7.1
5.7.1 changes only

Bugfixes:

- Corrected include/stdcheaders.h
- Added a paragraph about compiling with the US-version of openssl to the INSTALL file.
- New mailing list address. Info updated on the webpage as well as in the README file
- hostip.c did not compile properly on SunOS 5.5.1. It needs an #include <sys/types.h>

## Fixed in 5.7 - April 20 1999

5.7
5.7 changes only

- I have separated the version number of libcurl and curl now.
- Removed the `enable-no-pass` from configure, I doubt anyone wanted that.
- -D or --dump-header is now storing HTTP headers separately in the specified file.

Bugfixes:

- Made curl support any-length HTTP headers. The destination buffer is now enlarged every time it turns out to be too small!
- Added the FAQ file to the archive. Still a bit smallish, but it is a start.
- Made -D accept `-` instead of filename to write to stdout.
- Changed two #ifdef WIN32 to better #ifdef <errorcode> when connect()ing in url.c and ftp.c. Makes cygwin32 deal with them better too.
- The old -3/--crlf option is now ONLY --crlf!
- I changed the "SSL fix" to a more lame one, but that does not remove as much functionality. Now I have enabled the lib to select what SSL version it should try first.
- Corrected the math for the "Curr.Speed" progress meter.
- Made `-K -` read a config file from stdin.
- I found out we did not close the file properly before so I added it!
- FTP download resume did not work at all!
- Corrected the version string part generated for the SSL version.
- I found a way to make some other SSL page work with openssl 0.9.1+ that previously did not (ssleay 0.8.0 works with it though!).
- Finally have curl more cookie "aware".
- Added a paragraph in the TODO file about the SSL problems recently reported.
- Better "Location:" following.
- A subsecond display patch.
- Made lots of tiny adjustments to compile smoothly with cygwin under win32.
- Beginning experiments with downloading multiple document from an HTTP server while remaining connected.
- Added new text to INSTALL on what to do to build this on win32 now.
- Prefix the shared #include files in the sources with "../include/" to please VC++...
- Split the url.c source into many tiny sources for better readability and smaller size.
- Started to change stuff for a move to make libcurl and a more separate curl application that uses the libcurl. Made the libcurl sources into the new lib directory while the curl application remains in src as before. New makefiles, adjusted configure script and so.
- Finally made configure accept --with-ssl to look for SSL libs and includes in the "standard" place /usr/local/ssl...
- Verified that curl linked fine with OpenSSL 0.9.1c which seems to be the most recent.

## Fixed in 5.5.1 - January 27 1999

5.5.1
5.5.1 changes only

Bugfixes:

- Corrected problems in Download().
- A few flaws prevented it from compile warning free with the native compiler under Digital Unix v4.0d.

## Fixed in 5.5 - January 15 1999

5.5
5.5 changes only

Changes:

- a simple addition for the DICT protocol (RFC 2229)

Bugfixes:

- Added Bjorn's small text to the README about the DICT protocol.
- The win32-version: "Does not use ALL_PROXY environment variable". Turned out to be because of the static- buffer nature of the win32 environment variable calls!
- Corrected the progress meter for files larger than 20MB.
- Corrected the -t and -T help texts. They claimed to be FTP only.

## Fixed in 5.4 - January 7 1999

5.4
5.4 changes only

Changes:

- If you use -t or -T now on an HTTP or HTTPS server, PUT is used for file upload.

Bugfixes:

- curl -s did not always suppress the progress reporting. It was the form post that automatically always switched it on again.
- Corrected a width bug in the mprintf() function.
- curl accepted limited URL sizes. It should now accept path parts that are up to at least 4096 bytes.
- Somehow I screwed up when applying an AIX fix, so I redid that now.
- Corrected a win32 bug in the environment variable part. (the 5.3a win-only release)

## Fixed in 5.3 - December 21 1998

5.3
5.3 changes only

Changes:

- Implemented the "quote" function of FTP clients. It allows you to send arbitrary commands to the remote FTP server. I chose the -Q/--quote command-line arguments.

Bugfixes:

- Made it compile smoothly on AIX.
- Brought an MVS patch: -3/--mvs, for ftp upload to the MVS ftp server.
- Brought a correction that fixes the win32 curl bug.
- A bug caused curl to crash on the -A flag
- Added a few defines to make directories/filenames get build nicer (with _ instead of `.` and `\` instead of `/` in win32).
- Fixed an FTP bug that occurred if the ftp server response line had a parenthesis on the line before the (size) info.

## Fixed in 5.2.1 - December 14 1998

5.2.1
5.2.1 changes only

Bugfixes:

- Corrected a crash in 5.2 due to bad treatment of the environment variables.

## Fixed in 5.2 - December 14 1998

5.2
5.2 changes only

Bugfixes:

- Rewrote the mkhelp script and now, the mkhelp.pl script generates the hugehelp.c file from the README *and* the man page file curl.1.
- gcc2.8.1 with the -Wall flag complaints a lot on subscript has type `char` if I do not explicitly typecast the argument to isdigit() or isspace() to int.
- Added checks for `long double` and `long long` in the configure script.

## Fixed in 5.0 - December 1 1998

5.0
5.0 changes only

Changes:

- Introducing the new -F flag for HTTP POST. It supports multipart/form-data which means it is gonna be possible to upload files etc through HTTP POST.
- Added a `configure` script
- Use -H/--header for custom HTTP-headers. Lets you pass on your own specified headers to the remote server.
- Use -B/--ftp-ascii to force ftp to use ASCII mode when transferring files.
- Use -q AS THE FIRST OPTION specified to prevent .curlrc from being read.

Bugfixes:

- Corrected getpass.c and main.c to compile warning and error free with the Win32 VC++ crap.
- I changed the TAG-system. If you ever used urlget() from this package in another product, you need to recompile with the new headers.
- Win32 compiled with a silly error. Corrected now.
- Yet another problem in multiline FTP responses.
- Improved the `maketgz` to create a temporary directory tree which it makes an archive from instead of the previous renaming of the current one.
- Mailing list opened (see README).
- Made -v more verbose on the PASV section of ftp transfers. Now it tells hostname and IP of the new host (and port number). I also added a section about PORT vs PASV in the README.
- Introduced automake stuff.
- Made a successful GET of a document from an SSL-server using my own private certificate for authentication!
- Corrected another bug in the long parameter name parser.
- Modified getpass.c
- We may have removed the silly warnings from url.c when compiled under IRIX.
- Wrote formfind.pl which is a new perl script intended to help you find out how a FORM submission should be done.
- Made the HTTP header-checker accept white spaces before the HTTP/1.? line. Apparently some proxies/sites add such at times (my test proxy did when I downloaded a gopher page with it)!
- Moved the former -h to -M and made -h show the short help text instead. I had to enable a forced help text option. Now an even shorter help text is presented when an unknown option and similar, is used.
- stdcheaders.h did not work with IRIX 6.4 native cc compiler. I hope my changes do not make other versions go nuts instead.
- Added a check in the configure script to check for the silly AIX warnings about my #define strcasecmp() stuff. I do that define to prevent me and other contributors to accidentally use that function name instead of strequal()...
- I bugfixed Angus's getpass.c a little.
- Fixed the verbose flag names to getopt-style, i.e `curl --loc` is sufficient instead of --location as "loc" is a unique prefix.
- Another getopt-adjust; curl now accepts flags after the URL on the command line. `curl www.foo.com -O` is perfectly valid.
- Corrected the .curlrc parser so that strtok() is no longer used and I believe it works better. Even URLs can be specified in it now.
- Replaced getpass.c with a newly written one, not under GPL license
- Changed OS to a #define in config.h instead of compiler flag
- Makefile now uses -DHAVE_CONFIG_H
- Expanded the tgz-target to update the version string on each occasion I build a release archive!
- Remade the parameter parser to be more getopt compliant. curl now supports "merged" flags as in "curl -lsv ftp.site.com"
- I have changed the headers in all files that are subject to the MozPL license, as they are supposed to look like when conforming.
- Made the configure script make the config.h. The former config.h is now setup.h.
- The RESOURCES and TODO files have been added to the archive.
- Fixed getpass.c and various configure stuff
- Corrected the `getlinks.pl` script
- SSLeay versions prior to 0.8 do *not* work with curl!
- Fixed a bug that occurred since curl did not properly use CRLF when issuing ftp commands.
- Rearranged the order config files are read. .curlrc is now *always* read first and before the command line flags. -K config files then act as additional config items.
- You can now disable a proxy by using -x "". Useful if the .curlrc file specifies a proxy and you wanna fetch something without going through that.
- I am thinking of dropping the -p support. Its really not useful since ports could (and should?) be specified as :<port> appended on the hostname instead, both in URLs and to proxy hostnames.
- curl -L bugs under Windows NT (test with URL http://come.to/scsde). This bug is not present in this version anymore.
- Added support for the weird FTP URL type= thing. You can download a file using ASCII transfer by appending ";type=A" to the right of it. Other available types are type=D for dir-list (NLST) and type=I for binary transfer.
- A bug in my getenv("HOME") usage for win32 systems.
- Building curl with SSL under FreeBSD should work better and automatically now.
- Cleaned up in the port number mess in the source. No longer stores and uses proxy port number separate from normal port number.
- The 5beta (and 4.10) under win32 failed if the HOME variable was not set.
- When using a proxy, curl now guesses and uses the protocol part in cases like: "curl -x proxy:80 www.site.com". Proxies normally go nuts unless http:// is prepended to the hostname, so if curl is used like this, it guesses protocol and appends the protocol string before passing it to the proxy. It already did this when used without proxy.
- Better port usage with SSL through proxy now. If you specified a different https-port when accessing through a proxy, it did not use that number correctly. I also rewrote the code that parses the stuff read from the proxy when you wanna connect through it with SSL.
- Work-around one of the compiler warnings on IRIX native cc compiles.

## Fixed in 4.10 - October 26 1998

4.10
4.10 changes only

Changes:

- Introduced the -K/--config flag
- Removed the -k option

Bugfixes:

- Now "make irix" should build curl successfully on non-gcc SGI machines
- Single switches now toggle behaviours

## Fixed in 4.9 - October 7 1998

4.9
4.9 changes only

Changes:

- no longer released under the GPL license. I have now updated the LEGAL file etc and now this is released using the Mozilla Public License
- Added -b/--cookie to read cookies
- Added -c for HTTP resume
- Added checklinks.pl to the archive
- Added -L/--location
- Added getlinks.pl to the archive.

Bugfixes:

- Rearranged the archive hierarchy a little. Build the executable in the src/ directory from now on!
- curl did not like HTTP servers that sent no headers at all on a GET request

## Fixed in 4.8.4 - September 20 1998

4.8.4
4.8.4 changes only

Bugfixes:

- As Julian Romero Nieto reported, curl reported wrong version number.
- As Teemu Yli-Elsila pointed out, the win32 version of 4.8 (and probably all other versions for win32) did not work with binary files since I am too used to the UNIX style fopen() where binary and text do not differ...
- Ralph Beckmann brought me some changes that lets curl compile error and warning free with -Wall -pedantic with g++. I also took the opportunity to clean off some unused variables and similar.
- Ralph Beckmann made me aware of a really odd bug now corrected. When curl read a set of headers from an HTTP server, divided into more than one read and the first read showed a full line *exactly* (i.e ending with a newline), curl did not behave well.

## Fixed in 4.8.3 - September 7 1998

4.8.3
4.8.3 changes only

Bugfixes:

- I was too quick to release 4.8.2 with too little testing. One of the changes is now reverted slightly to the 4.8.1 way since 4.8.2 could not upload files. I still think both problems corrected in 4.8.2 remain corrected.

## Fixed in 4.8.2 - August 14 1998

4.8.2
4.8.2 changes only

Bugfixes:

- Bernhard Iselborn reported two FTP protocol errors curl did. They are now corrected. Both appeared when getting files from a MS FTP server! :-)

## Fixed in 4.8.1 - August 7 1998

4.8.1
4.8.1 changes only

Bugfixes:

- Added a last update of the progress meter when the transfer is done. The final output on the screen did not have to be the final size transferred which made it sometimes look odd.
- Thanks to David Long I got rid of a silly bug that happened if an HTTP-page had nothing but header. Apparently Solaris deals with negative sizes in fwrite() calls a lot better than Linux does...

## Fixed in 4.8 - July 30 1998

4.8
4.8 changes only

Bugfixes:

- Continue FTP file transfer. -c is the switch.
- recursiveftpget.pl now features a maximum recursive level argument.

## Fixed in 4.7 - July 20 1998

4.7
4.7 changes only

Changes:

- Wrote a perl script `recursiveftpget.pl`

Bugfixes:

- Added support to abort a download if the speed is below a certain amount (speed-limit) bytes per second for a certain (speed-time) time.

## Fixed in 4.6 - July 3 1998

4.6
4.6 changes only

Changes:

- Added a first attempt to optionally parse the .netrc file for login user and password. If used with http, it enables user authentication. -n is the new switch.

Bugfixes:

- Removed the extra newlines on the default user-agent string.
- Corrected the missing ftp upload error messages when it failed without the verbose flag set. Gary W. Swearingen found it.
- Now using alarm() to enable second-precision timeout even on the name resolving/connecting phase. The timeout is although reset after that first sequence. (This should be corrected.) Gary W. Swearingen <swear@aa.net> reported.
- Now spells "Unknown" properly, as in "Unknown option `z`"... :-)
- Added bug report email address in the README.
- Added a "current speed" field to the progress meter. It shows the average speed the last 5 seconds. The other speed field shows the average speed of the entire transfer so far.

## Fixed in 4.5.1 - June 12 1998

4.5.1
4.5.1 changes only

Changes:

- Added -A to allow User-Agent: changes

Bugfixes:

- SSL through proxy fix
- Made the -A work when SSL-through-proxy.

## Fixed in 4.5 - May 30 1998

4.5
4.5 changes only

Bugfixes:

- More SSL corrections
- Added a port to AIX.
- Running SSL through a proxy causes a chunk of code to be executed twice. one of those blocks needs to be deleted.
- Made -i and -I work again

## Fixed in 4.4 - May 13 1998

4.4
4.4 changes only

Bugfixes:

- -x can now also specify proxyport when used as in `proxyhost:proxyport`
- SSL fixes

## Fixed in 4.3 - April 30 1998

4.3
4.3 changes only

Bugfixes:

- Adjusted to compile under win32 (VisualC++ 5). The -P switch does not support network interface names in win32. I could not figure out how!

## Fixed in 4.2 - April 15 1998

4.2
4.2 changes only

Changes:

- Added SSL / SSLeay support (https://)
- Added the -T usage for HTTP POST

Bugfixes:

- Bugfixed the SSL implementation
- Made -P a lot better to use other IP addresses
- The Makefile is now ready to compile for solaris, sunos4 and linux right out of the box
- Better generated version string seen with `curl -V`

## Fixed in 4.1 - April 3 1998

4.1
4.1 changes only

Bugfixes:

- The IP number returned by the ftp server as a reply to PASV does no longer have to DNS resolve. In fact, no IP-number-only addresses have to anymore.
- Binds better to available port when -P is used.
- Now LISTs ./ instead of / when used as in ftp://ftp.funet.fi/. The reason for this is that exactly that site, ftp.funet.fi, does not allow LIST / while LIST ./ is fine. Any objections?

## Fixed in 4.0 - March 20 1998

4.0
4.0 changes only

Changes:

- I took another huge step and changed both version number and project name! The reason for the new name is that there are one too many programs named urlget already and this program already can a lot more than merely getting URLs, and the reason for the version number is that I did add the pretty big change in -P and since I changed name I wanted to start with something fresh! The first curl release.
- The --style flags are working better now.
- Implemented the -P flag that let's the ftp control issue a PORT command instead of the standard PASV.
- -a for appending FTP uploads works.

Bugfixes:

- Listing directories with FTP often reported that the file transfer was incomplete. Wrong assumptions were too common for directories, why no size is attempted to get compared on them from now on.

## Fixed in 3.12 - March 14 1998

3.12 changes only

Changes:

- Added PROXY authentication.

Bugfixes:

- End-of-header tracking still lacked support for \r\n or \n at the end of the last header line.
- Fixed some little bugs.

## Fixed in 3.11 - February 9 1998

3.11 changes only

Bugfixes:

- The header parsing was still not correct since the 3.2 modification...

## Fixed in 3.10 - February 4 1998

3.10 changes only

Bugfixes:

- 3.7 and 3.9 were simultaneously developed and merged into this version.
- FTP upload did not work correctly since 3.2.

## Fixed in 3.9 - February 4 1998

3.9 changes only

Bugfixes:

- 3.7 and 3.9 were simultaneously developed and merged into this version.
- FTP upload did not work correctly since 3.2.

## Fixed in 3.7 - January 15 1998

3.7 changes only

Bugfixes:

- Now checks the last error code sent from the ftp server after a file has been received or uploaded. was not done previously.
- When 'urlget ' is used without a 'protocol://' first in the host part, it now checks for hostnames starting with ftp or gopher and if it does, it uses that protocol by default instead of http.

## Fixed in 3.6 - January 1 1998

3.6 changes only

Bugfixes:

- Silly mistake made the POST bug. This has now also been tested to work with proxy.

## Fixed in 3.5 - December 15 1997

3.5 changes only

Changes:

- Highly inspired by Rafael Sagula's changes to the 3.1 that added an almost functional POST, I applied his changes into this version and made them work. (It seems POST requires the Content-Type and Content-Length headers.) It is now usable with the -d switch.

## Fixed in 3.2 - December 1 1997

3.2 changes only

Changes:

- FTP directory view supports -l for "list-only" which lists the filenames only.
- All operations support -m for max time usage in seconds allowed.

Bugfixes:

- Major rewrite of two crucial parts of this code: upload and download. They are both now using a select() switch, that allows much better progress meter and time control.
- alarm() usage removed completely
- FTP get can now list directory contents if the path ends with a slash '/'. Urlget on an FTP-path that does not end with a slash means urlget is attempting to get it as a filename.
- FTP upload now allows the size of the uploaded file to be provided, and thus it can better check it actually uploaded the whole file. It also makes the progress meter for uploads much better!
- Made the parameter parsing fail in cases like 'urlget -r 900' which previously tried to connect to the hostnamed '900'.

## Fixed in 3.1 - November 24 1997

3.1 changes only

Bugfixes:

- 3 warnings in win32-compiles

## Fixed in 3.0 - November 1 1997

3.0 changes only

Changes:

- Added FTP upload capabilities. The name urlget gets a bit silly now when we can put too... =)
- Restructured the source quite a lot. Changed the urlget() interface. This way, we survive changes much better. New features can come and old can be removed without us needing to change the interface. I have written a small explanation in urlget.h that explains it.
- New flags include -t, -T, -O and -h. The -h text is generated by the new mkhelp script.

## Fixed in 2.9 - October 15 1997

2.9 changes only

Bugfixes:

- Added a fix to make it compile smoothly on Amiga using the SAS/C compiler.
- Believe it or not, but the STUPID Novell web server seems to require that the Host: keyword is used, so well I use it and I (re-introduce) the urlget User-Agent:. I still have to check that this Host: usage works with proxies... 'Host:' is required for HTTP/1.1 GET according to RFC2068.

## Fixed in 2.8 - October 1 1997

2.8 changes only

Bugfixes:

- some little modifications

## Fixed in 2.7 - September 20 1997

2.7 changes only

Changes:

- Removed the -l option and introduced the -f option instead. Now I rewrite the former -l kludge in an external script that uses urlget to fetch multipart files like that.
- '-f' is introduced, it means Fail without output in case of HTTP server errors (return code >=300).
- Added support for -r, ranges. Specify which part of a document you want, and only that part is returned. Only with HTTP/1.1-servers.
- Split up the source in 3 parts. Now all pure URL functions are in urlget.c and stuff that deals with the stand-alone program is in main.c.
- I took a few minutes and wrote an embryo of a README file to explain a few things.

## Fixed in 2.6 - September 10 1997

2.6 changes only

Changes:

- Added -I which uses the HEAD request to get the header only from a http-server.

Bugfixes:

- Made the -l (loop) thing use the new CONF_FAILONERROR which makes urlget() return error code if non-successful. It also does not output anything then. Now finally removed the HTTP 1.0 and error 404 dependencies.

## Fixed in 2.5 - September 1 1997

2.5 changes only

Bugfixes:

- Made the progress meter use HHH:MM:SS instead of only seconds.

## Fixed in 2.4 - August 27 1997

2.4 changes only

Changes:

- Added progress meter. It appears when downloading > BUFFER SIZE and mute is not selected. I found out that when downloading large files from really really slow sites, it is desirable to know the status of the download. Do note that some downloads are done unawaring of the size, which makes the progress meter less thrilling ;) If the output is sent to a tty, the progress meter is shut off.
- Made it grok user+passwd for HTTP fetches. The trick is to base64 encode the user+passwd and send an extra header line. Read chapter 11.1 in RFC2068 for details. I added it to be used like the ftp one.

Bugfixes:

- Increased buffer size used for reading.
- Added length checks in the user+passwd parsing.

## Fixed in 2.3 - August 21 1997

2.3 changes only

Changes:

- Added "-o" option (output file)
- Added URG_HTTP_NOT_FOUND return code.
- Looping mode ("-l" option). it is easier to get various split files.
- Changed the -h to be -i instead. -h should be preserved to help use.

Bugfixes:

- Bjorn Reese indicated that Borland _might_ use '_WIN32' instead of the VC++ WIN32 define and therefore I added a little fix for that.

## Fixed in 2.2 - August 14 1997

2.2 changes only

Changes:

- Made a '-h' switch in case you want the HTTP-header in the output.

Bugfixes:

- The urlget function did not set the path to URL when using proxy.
- Fixed bug with IMC proxy. Now using (almost) complete GET command.
- Made it compile on Solaris. Had to reorganize the includes a bit. (so Win32, Linux, SunOS 4 and Solaris 2 compile fine.)
- Made Johan's keepalive keyword optional with the -k flag (since it makes a lot of urlgets take a lot longer time).

## Fixed in 2.1 - August 10 1997

2.1 changes only

Changes:

- Mute option (no output at all to stderr)

Bugfixes:

- Win32-compilable
- No more global variables
- Full range of return codes from urlget(), which is now written to be a function for easy-to-use in [other] programs.
- Define STAND_ALONE to compile the stand alone urlget program
- Now compiles with gcc options -ansi -Wall -pedantic ;)

## Fixed in 2.0 - August 1 1997

2.0 changes only

- Introducing ftp GET support. The FTP URL type is recognized and used.
- Renamed the project to urlget
- Supports the user+passwd in the FTP URL (otherwise it tries anonymous login with a weird email address as password).

## Fixed in 1.5 - July 21 1997

1.5 changes only

Bugfixes:

- The skip_header() crap messed it up big-time. By removing that one we can all of a sudden download anything ;)
- No longer requires a trailing slash on the URLs.
- If the given URL is not prefixed with 'http://', HTTP is assumed and given a try!
- 'void main()' is history.

## Fixed in 1.4 - July 15 1997

1.4 changes only

Bugfixes:

- The gopher source used the ppath variable instead of path which could lead to disaster.

## Fixed in 1.3 - June 1 1997

1.3 changes only

Bugfixes:

- added a lame text about the time it took to get the data.
- Made it write 'connection refused' for that particular connect() problem.
- Renumbered the version. Let's not make silly 1.0.X versions, this is a plain 1.3 instead.

## Fixed in 1.2 - May 1 1997

1.2 changes only

Changes:

- Implemented HTTP proxy support.
- Implemented URLs (and skipped the old syntax).
- Output is written to stdout

Bugfixes:

- Discovered and fixed the problem with getting binary files. puts() is now replaced with fwrite(). (Daniel's note: this also fixed the buffer overwrite problem I found in the previous version.)
- Let "-p" before "-x".
- Bugfixed the proxy usage. It should *NOT* use nor strip the port number from the URL but pass that information to the proxy. This also made the user/password fields possible to use in proxy [ftp-] URLs. (like in ftp://user:password@ftp.my.site:8021/README)
- Receive byte counter added.

## Fixed in 1.1 - April 20 1997

1.1 changes only

Bugfixes:

- Adjusted it slightly to accept named hosts on the command line. We would not wanna use IP numbers for the rest of our lives, would we?

## Fixed in 1.0 - April 8 1997

1.0 changes only

The changes for httpget 1.0 have been lost.

## Fixed in 0.3 - February 1 1997

0.3 changes only

The changes for httpget 0.3 release have been lost.

## Fixed in 0.2 - December 17 1996

0.2 changes only

The changes for httpget 0.2 release have been lost.

## Fixed in 0.1 - November 11 1996

0.1 changes only

The first release ever done. httpget 0.1