summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
7 hourstest436: fix running on Windows with `_curlrc` presentHEADorigin/masterorigin/HEADmasterfor-upstreamViktor Szakats
in the user home directory. Before this patch, the curl tool found the system curlrc first, ignoring the custom one set by the test via `CURL_HOME`. Closes #18242
7 hourscmake: set `CURL_DIRSUFFIX` automatically in multi-config buildsViktor Szakats
To make it easier to run tests when using the Visual Studio generator, also perhaps Xcode. Also drop manual settings from CI. Closes #18241
17 hourscmake: drop redundant unity mode for `curlinfo`Viktor Szakats
Unity mode adds nothing besides some overhead and log noise for targets built from a single source file. I wish cmake disabled unity automatically in this case. Closes #18238
29 hourscmake: optimize building examples in CIViktor Szakats
In CI we want to ensure that examples build cleanly, but we don't want to actually run them there. Meaning it's enough to just compile, but not link them in CI. Saving time up to 2-4x (MSVC), and disk space up to 1.2GB (or 8-70x). Add a new cmake target that compiles all examples without linking them into runnable binaries. Keep a full build for a single example to test if it links correctly. Also: - CI: switch over all `curl-examples` targets to `curl-examples-build` - GHA/linux-old: build examples in one of the cmake builds. Result highlights: Job | Bef. | Bef. | Aft. | Aft. | :------------------ | ---: | ----: | ---: |----: | cygwin | 15s | 9MB | 10s | 1MB | msys | 13s | 8MB | 7s | 1MB | dl-mingw 15 | 39s | 113M | 34s | 2MB | dl-mingw 9.5.0 | 49s | 115MB | 42s | 2MB | dl-mingw 7.3.0 | 19s | 113MB | 14s | 2MB | dl-mingw 6.4.0 | 9s | 12MB | 7s | 4MB | Linux cross | 19s | 28MB | 19s | 2MB | MSVC UWP | 65s | 374MB | 9s | 17MB | MSVC x64 | 22s | 846MB | 9s | 17MB | VS2010 | 48s | 105MB | 15s | 9MB | VS2022 clang-cl | 195s | 1.2GB | 51s | 20MB | iOS Xcode | 8s | | 5s | | macOS LibreSSL | 16s | | 11s | | Linux aws-lc | 3s | | 1s | | Follow-up to dda251ef1020da07dc4640a225e01051cb977535 #18232 Closes #18209
29 hoursappveyor: show disk space used in each jobViktor Szakats
Also bump minimum dir size in GHA, to reduce details. Follow-up to be71475b1313ff017acc1efab16e0fea84cd32f5 #18150 Closes #18235
32 hourscmake: define `WIN32_LEAN_AND_MEAN` for examplesViktor Szakats
To build faster. Also syncing with autotools. Job | Before | After | :------------------ | -----: | ----: | dl-mingw 15 | 45s | 39s | dl-mingw 9.5.0 | 72s | 49s | dl-mingw 7.3.0 | 29s | 19s | dl-mingw 6.4.0 | 20s | 9s | Linux cross | 30s | 19s | MSVC UWP | 77s | 65s | MSVC x64 | 27s | 22s | VS2010 | 61s | 48s | VS2022 clang-cl | 226s | 195s | It also happens to fix what looks like a Windows SDK header bug seen with VS2019 on AppVeyor CI: ``` C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\winscard.h(1422,1): error C2220: the following warning is treated as an error (compiling source file C:\projects\curl\docs\examples\block_ip.c) C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\winscard.h(1422,1): warning C5031: #pragma warning(pop): likely mismatch, popping warning state pushed in different file (compiling source file C:\projects\curl\docs\examples\block_ip.c) C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\winioctl.h : message : #pragma warning(push) (compiling source file C:\projects\curl\docs\examples\block_ip.c) C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\windows.h(254,17): warning C5031: #pragma warning(pop): likely mismatch, popping warning state pushed in different file (compiling source file C:\projects\curl\docs\examples\block_ip.c) C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\winscard.h : message : #pragma warning(push) (compiling source file C:\projects\curl\docs\examples\block_ip.c) C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\winsock2.h(4221,1): warning C5031: #pragma warning(pop): likely mismatch, popping warning state pushed in different file (compiling source file C:\projects\curl\docs\examples\block_ip.c) C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\windows.h : message : #pragma warning(push) (compiling source file C:\projects\curl\docs\examples\block_ip.c) C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\winsock2.h : warning C5032: detected #pragma warning(push) with no corresponding #pragma warning(pop) (compiling source file C:\projects\curl\docs\examples\block_ip.c) ``` Ref: https://ci.appveyor.com/project/curlorg/curl/builds/52531106/job/66b6r098pll2le70#L312 Closes #18232
35 hoursopenssl: clear errors after a failed `d2i_X509()`Viktor Szakats
Without it, subsequent OpenSSL API calls may fail with an error caught within the OpenSSL `d2i_X509()` (decode) call. It was seen to happen when importing from the Windows certificate store (e.g. with `--ca-native`), and any one of the certificates failed while decoding, then skipped. Behind the scene (and undocumented), the failed decode call is adding an error to an internal OpenSSL error queue. This error is picked up later, at the connect phase, by another OpenSSL API call, which happens to check the error queue, without clearing it first. It made the connect fail with the error collected earlier, while decoding the malformed and discarded certificate. Fix by explicitly clearing the error queue if the decode call fails. Ref: https://docs.openssl.org/3.5/man3/d2i_X509/ `-vvvv` output before this patch: ``` [0-0] == Info: successfully imported Windows ROOT store [0-0] == Info: successfully imported Windows CA store [0-0] == Info: [SSL] SSL_connect() -> err=-1, detail=1 [0-0] == Info: TLS connect error: error:068000DD:asn1 encoding routines::illegal padding [0-0] == Info: [SSL] cf_connect() -> 35, done=0 ``` Mainline OpenSSL (as of 3.5.2) and quictls (as of 3.3.0) are affected. LibreSSL is not affected. (I did not test BoringSSL and AWS-LC) Assisted-by: Stefan Eissing Reported-by: MichaƂ Petryka Fixes #18190 Closes #18228
37 hourstool_parsecfg: use dynbuf for quoted argumentsDaniel Stenberg
Instead of doing malloc/free every time and "manual" buffer population. This reuses the dynbuf for this purpose for the duration of parsing the file. Closes #18230
44 hourstool_operate: cleanupsDaniel Stenberg
- move the state struct from config to global. It is used as a single instance anyway so might as well be a single one to save memory. - simplify and combine several conditions - set default retry delay inititally - use better struct field names to make it easier to understand their purposes - remove the state->outfiles field as it was not necessary - remove superfluous glob cleanup call - move conditions around to remove an indent level - move the ->url NULL check Takes single_transfer()'s complexity score down from 78 to 68. Closes #18226
44 hourstool_writeout: check gmtime return code tooDaniel Stenberg
If the unlikely event happen that it fails, it returns NULL. CodeSonar is not happy unless we check for it. Closes #18225
46 hoursschannel: add an error message for client cert not foundJay Satiro
Prior to this change curl would show the generic error message "curl: (58) Problem with the local SSL certificate". Closes https://github.com/curl/curl/pull/18124
47 hoursGHA: update cloudflare/quiche to v0.24.5renovate[bot]
Closes #18224
2 daysGHA: update actions/cache digest to 0400d5frenovate[bot]
Closes #18222
3 dayscurl: remove first argument from helpf()Daniel Stenberg
It was always the same and it is a global already! Closes #18221
3 daystool_writeout: check strftime() return codeDaniel Stenberg
Because if it fails, the contents of the output buffer is undefined. Pointed out by CodeSonar Also polished the documentation Follow-up to fadc487567 Closes #18220
3 dayscfilters: make Curl_conn_get_socket simplerStefan Eissing
Since it is only used for the first socket anyway, simplify the function. Closes #18219
3 daysrequest: eliminate request `getheader` bool, reverse `header` defaultStefan Eissing
Deduce that the transfer response expects headers by the protocol handler implementing `write_resp_hd` callback. This eleminates the `getheader` parameter in the `Curl_xfer_setup_*()` methods. Add an implementation to RTSP for `write_resp_hd`, joining the HTTP protocol in the only handlers having it. Reverse the default of request's `header` bit that signals that headers are expected. Default is now FALSE, set to TRUE when setting up the transfer by presence of `write_resp_hd` in the protocol handler. Closes #18218
3 daysares: destroy channel on shutdownStefan Eissing
When we cancel async resolv operations, we have kept an existing ares channel open. This seems unreliable as reported in #18216. To get reliable behaviour, always destroy the ares channel on async shutdown and create a new one on demand. Fixes #18216 Reported-by: devgs on github Closes #18217
3 dayscurl: make global truly globalDaniel Stenberg
The GlobalConfig only exists in a single instance and it has worked like this since the dawn of time. It is about time we stop passing around pointers to what was already essentially a global object and instead just use a... global. It simplifies things. Closes #18213
3 dayshttp: resurrect addition from 41fe621Stefan Eissing
For some reason, these lines were unintentionally deleted in 6d5570c. Thanks to IoannisGS for noticing. Bug: https://github.com/curl/curl/pull/18179#issuecomment-3162876532 Reported-by: IoannisGS on github Closes #18215
3 dayscmake: ExternalProject test tidy-upsViktor Szakats
Follow-up to b8296d367aa4277ee297d474fe438da687ffc5ec #18208 Closes #18214
3 dayscurl_quiche.c: add includeKarthik Das
Fixes #18211 Closes #18212
3 dayscmake: make the ExternalProject test workViktor Szakats
By micromanaging the project dependency and its inclusion into the test project. It feels like an awkward construct, but perhaps better than nothing. It's also fragile because it's a static build with no assistance from the external project (curl in this case). Mitigated in test by disabling all dependencies and some features. Since there is no special core cmake logic to be tested here, in CI the test is tested really. To keep CI jobs at minimum, only add 3 of them, taking 42s in total. (All 6 would take 270s.) Follow-up to e2a23d5d0d566105237acec37a2c22a6f79cee3e #17203 Closes #18208
4 dayslibcurl: reset rewind flag in curl_easy_reset()Oxan van Leeuwen
curl_easy_reset() did not reset the `rewind_read` flag. This caused any handles that previously had a CURLE_SEND_FAIL_REWIND error to get stuck with that error, failing any subsequent requests, even if they didn't have any body at all. Verified in test 3034 Fixes #18206 Closes #18207
4 daysRELEASE-NOTES: syncedDaniel Stenberg
4 daystool_operate: use the correct config pointerDaniel Stenberg
Triggered when doing 100+ parallel globbed upload transfers. Reported-by: letshack9707 on hackerone Closes #18200
4 daystests/ech_tests.sh: indent, if/for style, inline ifsViktor Szakats
Sync with rest of shell scripts. Follow-up to 2485a2d10054cfc8fce769bd45fa1a26fe070d8e #17001 Closes #18187
4 daysmulti: fix bad splay managementDaniel Stenberg
The splay tree is a tree where each easy handle can be added *once*. The expire time for that node is the closest expire time for that easy handle. Easy handles can however have more expire times queued up, so when the node is removed from the splay tree because it is the next in line to take care of, we must check if there is another expire time in the queue and then add the node back into the splay. Failing to do the later part, the calling of add_next_timeout after Curl_splaygetbest, would leave the state.expiretime on the previous time stamp, which when could make the next call to Curl_splaygetbest use the wrong time stamp and get a wrong node out, causing trouble. Reported-by: letshack9707 on hackerone Closes #18201
4 dayslib: xfer_setup simplifyStefan Eissing
Make variants for transfers that send/receive or do both with just the parameters they need. Split out the shutdown setting into a separate function. Only FTP bothers with that. Closes #18203
4 daystool_urlglob: polish, cleanups, improvementsDaniel Stenberg
- assert instead of printing "internal error" for unlikely events - avoid allocating the main struct - convert globerror() from macro to function - renames to shorter and clearer names - malloc + copy => memdup0 - change buffer handling to dynbuf - realloc to handle more globs, but use less memory for few Closes #18198
4 dayslib: replace conn [write]sockfd members by indexStefan Eissing
The `connectdata` members `sockfd` and `writesockfd` needed to by either CURL_SOCKET_BAD or a copy of one of `conn->sock[2]`. When equal to one, that index was used to send/recv/poll the proper socket or connection filter chain. Replace those with `send_idx` and `recv_idx` which are either -1, 0 or 1 to indicate which socket/filter to send/receive on. Closes #18179
4 dayssplay: add another assert for detected usage problemDaniel Stenberg
Closes #18199
4 daysGHA: update actions/download-artifact action to v5renovate[bot]
Closes #18193
4 daysBINDINGS.md: add LibQurlQriist
Add LibQurl to the list of known binding libraries. Closes #18195
4 daysconfig2setopts: avoid curlx_dyn_addf(..., "%s"Daniel Stenberg
Closes #18194
4 daysdynbuf: assert on curlx_dyn_addf use with just "%s"Daniel Stenberg
Because it is wasteful and should be done better. Closes #18194
4 daysGHA/curl-for-win: include CPU archs in job namesViktor Szakats
Closes #18191
5 daysvtls: set seen http version on successful ALPNStefan Eissing
When a HTTP version has been negotiated via ALPN, set the member `conn->httpversion_seen` accordingly. This allows pending transfers to reuse multiplexed http connections before the response to the first transfer has arrived. Fixes #18177 Reported-by: IoannisGS on github Closes #18181
5 daystool_cb_hrd: remove global pointer from 'struct HdrCbData'Daniel Stenberg
It is not necessary Closes #18184
5 daystool: replace three malloc + copy with memdup0Daniel Stenberg
The function already existed for private use in var.c Closes #18185
5 daysci: update openssl/openssl to v3.5.2renovate[bot]
Closes #18186
5 daystool_cb_wrt: use dynbuf instead of "manual" mallocDaniel Stenberg
When creating new file names for no-clobber Closes #18182
5 daystool_cb_wrt: split out win_console() from tool_write_cb()Daniel Stenberg
Closes #18180
5 dayssetopt: add helper functions to setopt_long()Daniel Stenberg
- Consistently keep options within ranges - Reduce the maximum maxredirs value to fit a signed short - Removed comments as the place to document the options is not here Closes #18174
5 daysGHA: pin jobs to windows-2022Viktor Szakats
To avoid being bumped to windows-2025 in September, and to stay with the superior performance offered by windows-2022 runners. Ref: #18140 Closes #18178
5 daysvquic: use curl_getenvDavid Zhuang
getenv isn't defined on all platforms, which prevents vquic from building. I specifically ran into this issue building on PlayStation. Closes #18170
5 daysopenssl: output unescaped utf8 x509 issuer/subject DNsRoberto Hidalgo
Closes #18171
5 daysmulti: change prefix for the network change bits to CURLMNWC_Daniel Stenberg
Because "CURLM_" is used for curl multi error codes and it is convenient to use the prefix to identify the number family. Closes #18176
5 dayscurl_multi_get_offt: language fixDaniel Stenberg
Closes #18175
5 dayscurl_multi_get_offt: add separate man pages for the optionsDaniel Stenberg
Follow-up to 1ad2009ad63478ace18977ec5314f597f45ad084 Closes #18168