8.18.0Desktop
Added 1
- implement CURLOPT_CAINFO_BLOB in GnuTLS
Changed 4
- bump minimum OpenSSL version to 3.0.0
- support folded headers in CONNECT responses in cf-h1-proxy
- increase minimum stack size for tool_main in AmigaOS
- add nettle library detection via pkg-config for GnuTLS in autotools
Fixed 12
- fix ancient evaluation in apple sectrust
- handle Curl_dnscache_mk_entry() OOM error in asyn-ares
- fix Curl_async_getaddrinfo() on systems without getaddrinfo
- fix progress meter in parallel mode
- avoid strcpy in content_encoding
- return proper error on OOM in cookie handling
- refuse headers with CR, LF or null bytes in curl_quiche
- make Curl_sasl_decode_mech compare case insensitively
- fix DES_* symbols for some wolfSSL builds in curl_ntlm_core
- enable Win10 TCP_KEEP* options with old SDKs in cf-socket
- limit use of TCP_KEEP* to Windows 10.0.16299+ at runtime in cf-socket
- fix LargeFile feature display on Windows in autotools
Removed 3
- drop support for VS2008 (Windows)
- drop Windows CE / CeGCC support
- drop support for GnuTLS < 3.6.5
curl / Docs / Releases / Changes in 8.18.0 Related: Daily Snapshots Source repo Release log Pending Release 🠰 8.17.0 all changes 8.19.0 🠲
Changes in 8.18.0 - January 7 2026
8.18.0 8.18.0 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_storeis 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
ifexpressions - 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_TYPECHECKoptions - build: exclude clang prereleases from compiler warning options
- build: replace
-pedanticwith-Wpedanticwhen 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_V6ONLYon 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
IMPORTEDinterface targets - cmake: delete unused file
CMake/CMakeConfigurableFile.in - cmake: disable
CURL_CA_PATHauto-detection ifUSE_APPLE_SECTRUST=ON - cmake: fix
ws2_32reference incurl-config.cmake - cmake: honor
CURL_DISABLE_INSTALLandCURL_ENABLE_EXPORT_TARGET - cmake: replace deprecated
OPENSSL_FOUNDwithOpenSSL_FOUND - cmake: replace deprecated
PERL_FOUNDwithPerl_FOUND - cmake: save and restore
CMAKE_MODULE_PATHincurl-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-dereferenceon 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_safefreemacro - 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
_scounterparts (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/wcstombswith_scounterparts (Windows) - curlx: replace
sprintfwithsnprintf - 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
EQUALSPACEwarnings - 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
fstaton 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.hinclude - 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.hincludes - 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/wcscpywith_scounterparts (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()withcurlx_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
-toption - 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 …