Commit Graph

6587 Commits

Author SHA1 Message Date
Stefan Eissing
0c749d8177
pytest: give parameterised tests better ids for read- and parsability
Closes #17340
2025-05-15 11:08:24 +02:00
Daniel Stenberg
473b3e51d6
tests/FILEFORMAT.md: document the aws feature
Closes #17350
2025-05-14 23:59:25 +02:00
Maksim Ściepanienka
235b575d3a
tests: add aws feature to the related tests
Closes #17347
2025-05-14 23:41:38 +02:00
Viktor Szakats
828f998493
spacecheck.pl: drop more exceptions
- replace ß (scharfes S) with links.
- replace § (section sign) with links.
- replace 🙏 emoji with `🙏`.
 Supported by GitHub, Forgejo/Gitea and most likely GitLab.
- docs/libcurl/curl_mprintf.md: replace Unicode ± with `{+|-}`.
- docs/CIPHERS.md: URL encode Unicode in URLs.
- lib1560: use hex encoding in `räksmörgås.se`.
- unit1307: use hex encoding in `Lindmätarv`.
- drop LATIN SMALL LETTER A WITH ACUTE exception.
  No longer appears in tests.

This leaves the single character exception: `ö`
And file exceptions holding contributor names.

Follow-up to 9243ed59b3 #17329
Follow-up to 838dc53bb7 #17247

Closes #17335
2025-05-13 16:01:07 +02:00
Daniel Stenberg
4efeeaa22d
tests/server/Makefile.inc: cleanup
- drop curl_ctype.h as it is not used by test servers
- list all curlx files in the CURLX_* lists
- sort the lists alphabetically

Closes #17339
2025-05-13 14:19:01 +02:00
Daniel Stenberg
a8b947e7f4
headers: set an error message on illegal response headers
Makes it report "Invalid response header" instead of the slightly odd "A
libcurl function was given a bad argument".

Add test 749 and 750 for more CONNECT response testing.

Reported-by: Int64x86 on github
Fixes #17330
Closes #17336
2025-05-13 14:15:05 +02:00
Viktor Szakats
e270881a5d
lib1560: use hex notation, drop non-ASCII exception
Closes #17334
2025-05-13 11:04:43 +02:00
Daniel Stenberg
11cad7bf32
tests: provide all non-ascii data hex encoded
- make the scanner not whitelist anything for test cases making
  everything non-ascii forced to be hex encoded

- update all tests using non-ascii bytes to use %hex[] sequences

Closes #17331
2025-05-13 10:32:35 +02:00
Daniel Stenberg
47896d4b59
tests/server: stop using libcurl string comparisons
Further untangle the test server code from curl code. While the string
comparison functions are available in the libcurl API, the tests servers
don't link with libcurl. Use native functions instead.

Closes #17328
2025-05-13 10:28:19 +02:00
Daniel Stenberg
abd400a972
tests/FILEFORMAT.md: clarify %hex[] formatting
Closes #17332
2025-05-13 08:50:12 +02:00
Viktor Szakats
9243ed59b3
spacecheck.pl: verify tests/data/test* for non-ASCII chars
Exclude test data files (4 of them) based on existing feature tags:
`codeset-utf8` and `Unicode`.

Add the new keyword `non-ascii` to mark remaining exceptions (9 files).

Follow-up to 838dc53bb7 #17247

Closes #17329
2025-05-13 08:47:47 +02:00
Daniel Stenberg
8b33704511
tests/server: stop using libcurl's printf functions
Since the test servers are not built with libcurl the *printf code
needed to get built separately, and they are not in the curlx
collection.

snprintf() is provided in all modern systems these days.

Move curlx functions from lib/strerror.c to lib/curlx/winapi.c

Assisted-by: Viktor Szakats

Closes #17294
2025-05-12 22:45:37 +02:00
Daniel Stenberg
1ef5bef055
tests/server: remove TEST use, include <memdebug.h>
- The TEST define is never set
- memdebug.h is not in the local dir, using angle bracket include

Closes #17323
2025-05-12 13:20:54 +02:00
Viktor Szakats
144706342f
tests/server: check for stream != NULL in mqttd
To avoid an assert in `fgets()` on MSVC when the test case is missing.

Bug: https://github.com/curl/curl/pull/17294#issuecomment-2867501300

Closes #17324
2025-05-12 13:16:42 +02:00
Dan Fandrich
38865c8282 test1621: Improve stripcredentials tests
- add more unusual input cases
- add a valid non-http protocol
- fix tests so an input that should be stripped but isn't is a failure
- fix detection of when stripcredentials() would be available to test
- avoid using a NULL pointer

Closes #17304
2025-05-10 15:07:53 -07:00
Daniel Stenberg
13032ff75c
curl: fix memory leak when -h is used in config file
Reported-by: antypanty on hackerone

Add test 748 to reproduce and verify fix

Closes #17306
2025-05-10 11:16:07 +02:00
Daniel Stenberg
d4dd43b20d
curlx: move curlx_inet_pton
Used by test server code.

Closes #17300
2025-05-09 13:45:24 +02:00
Daniel Stenberg
c74d3e10d2
curlx: add curlx_winapi_ functions
Split them out from lib/strerror. Used by test code.

Closes #17299
2025-05-09 10:45:36 +02:00
Daniel Stenberg
9468503330
tests: stop using libcurl's strdup
It is not provided as a curlx function so should not be used outside of
libcurl.

I strongly suspect that no system we build the test suite on lack strdup
so this will not cause any harm.

The private version was added in b0936b8007 for Ultrix.

Closes #17297
2025-05-09 10:09:00 +02:00
Daniel Stenberg
a129859367
lib: drop curlx_getpid, use fake pid in SMB
It was not a function properly exposed in the curlx set. SMB cannot
possibly need to send a real pid, now sends a made up number.

The only real users of this function are test servers, so move the logic
over there.

Closes #17298
2025-05-09 10:01:30 +02:00
Daniel Stenberg
16db059a93
curlx: move version_win32.[ch] to curlx/
For curlx_verify_windows_version

Closes #17290
2025-05-08 17:09:32 +02:00
Viktor Szakats
5b454bae0c
cmake: test integration with old cmake (v3.11.4 2018-03-28)
Tests with old cmake are slow. (no Ninja, no unity, and running slower
than recent versions.)

It also revealed that 3.7.2 2017-01-13 is too old to consume curl via
`find_package()` due to:
```
CMake Error at bld-curl/_pkg/lib/cmake/CURL/CURLConfig.cmake:69 (add_library):
  add_library cannot create ALIAS target "CURL::libcurl" because target
  "CURL::libcurl_shared" is IMPORTED.
Call Stack (most recent call first):
  CMakeLists.txt:48 (find_package)

CMake Error at bld-curl/_pkg/lib/cmake/CURL/CURLConfig.cmake:69 (add_library):
  add_library cannot create ALIAS target "CURL::libcurl" because target
  "CURL::libcurl_shared" is IMPORTED.
Call Stack (most recent call first):
  CMakeLists.txt:49 (find_package)
```
The mitigation for this issue requires 3.11.

Also:
- rename a few existing envs to use the `TEST_` prefix.
- make the `find_package` test provider stage verbose.
- fix issue when consuming with cmake 3.7.2 (all platforms):
  ```
  CMake Error at /home/runner/cmake-3.7.2-Linux-x86_64/share/cmake-3.7/Modules/CMakeFindDependencyMacro.cmake:25 (message):
    Invalid arguments to find_dependency.  VERSION is empty
  Call Stack (most recent call first):
    bld-curl/_pkg/lib/cmake/CURL/CURLConfig.cmake:52 (find_dependency)
    CMakeLists.txt:48 (find_package)
  ```
  Ref: https://github.com/curl/curl/actions/runs/14906066962/job/41868621979?pr=17293#step:9:1199

Closes #17293
2025-05-08 15:11:24 +02:00
Daniel Stenberg
4190c73094
curlx: move nonblock.[ch] into curlx/
Closes #17288
2025-05-08 13:22:02 +02:00
Daniel Stenberg
f0fc30e904
winbuild: curl_get_line is not used for tool builds
Drop it from the build. Also remove it from the tests/server makefile.

Follow-up to d8618f4d84

Closes #17286
2025-05-08 10:53:57 +02:00
Stefan Eissing
778f306551
rtmp: remove no longer used proto member
Add src/curlinfo to gitignore while we are here.
Add tests/server/dnsd to gitignore while we are here.

Closes #17252
2025-05-08 10:24:19 +02:00
Daniel Stenberg
2d528898f7
lib: move multibyte.[ch] to curlx/
This file provides functions in the curlx set.

Closes #17285
2025-05-08 10:19:19 +02:00
Daniel Stenberg
40ef77b6da
headers: enforce a max number of response header to accept
The limit is 5000 headers in a single transfer. To avoid problems caused
by mistakes or malice.

Add test 747 to verify

Reported-by: wolfsage on hackerone

Closes #17281
2025-05-08 08:17:56 +02:00
Daniel Stenberg
255aac56f9
curlx: move into to curlx/
Move curlx_ functions into its own subdir.

The idea is to use the curlx_ prefix proper on these functions, and use
these same function names both in tool, lib and test suite source code.
Stop the previous special #define setup for curlx_ names.

The printf defines are now done for the library alone. Tests no longer
use the printf defines. The tool code sets its own defines. The printf
functions are not curlx, they are publicly available.

The strcase defines are not curlx_ functions and should not be used by
tool or server code.

dynbuf, warnless, base64, strparse, timeval, timediff are now proper
curlx functions.

When libcurl is built statically, the functions from the library can be
used as-is. The key is then that the functions must work as-is, without
having to be recompiled for use in tool/tests. This avoids symbol
collisions - when libcurl is built statically, we use those functions
directly when building the tool/tests. When libcurl is shared, we
build/link them separately for the tool/tests.

Assisted-by: Jay Satiro

Closes #17253
2025-05-07 11:01:15 +02:00
Viktor Szakats
c6d0524265
cmake: set BUILDING_LIBCURL directly for unit test targets
To avoid adding this macro to the global `CURL_DEBUG_MACROS` variable,
which may be used for targets defined after unit tests, and where this
macro may not be necessary.

As of this commit unit tests are defined last, so extending the global
variable did not cause any issue.

Follow-up to 220eda34cd #17259

Closes #17264
2025-05-07 10:10:28 +02:00
Daniel Stenberg
220eda34cd
tests: separate tunit tests from unit tests more
- unit tests need no tool code as they are libcurl unit tests
- unit test 1621 is now tunit test 1621 instead, as it tests tool code
- build unit tests with BUILDING_LIBCURL as they pretent to be libcurl

Closes #17259
2025-05-06 17:25:22 +02:00
Viktor Szakats
838dc53bb7
spacecheck.pl: check for non-ASCII chars, fix fallouts
Reported-by: James Fuller
Assisted-by: Dan Fandrich

Closes #17247
2025-05-04 17:26:11 +02:00
Viktor Szakats
3fcddc835c
scripts: fix perl indentation, whitespace, semicolons
Ref: #17116

Closes #17209
2025-04-29 19:35:55 +02:00
Stefan Eissing
89f5d45a33
ngtcp2+openssl: enable test 17_10
TLS session reuse in QUIC is also implemented for ngtcp2+openssl. Enable
the test.

Closes #17218
2025-04-29 10:46:25 +02:00
Daniel Stenberg
e0ebc3ff13
lib: provide a getaddrinfo wrapper
This uses c-ares under the hood and supports the CURL_DNS_SERVER
environment variable - for debug builds only. The getaddrinfo()
replacement function is only used if CURL_DNS_SERVER is set to make a
debug build work more like a release version without the variable set.

'override-dns' is a new feature for the test suite when curl can be told
to use a dedicated DNS server, and test 2102 is the first to require
this.

Requires c-ares 1.26.0 or later.

Closes #17134
2025-04-28 23:48:02 +02:00
Daniel Stenberg
7a1211d474
buildinfo: move from tests/server/ to src/, rename to curlinfo
Since a16485a42e, the test servers build with a different set of
options than the tool/lib - for example a different CURLDEBUG. To make
buildinfo better reflect the curl build, move it to src/ and build it
here using the local CURLDEBUG. Renamed to curlinfo to not get confused
with buildinfo.txt

I chose src/ and not lib/ because the file also uses tool-specific headers.

Assisted-by: Viktor Szakats
Closes #17187
2025-04-28 22:40:10 +02:00
sftcd
460ead61b6
tests: add basic ECH tests
Test 4000 and 4001

Closes #17192
2025-04-27 17:38:27 +02:00
Viktor Szakats
e2a23d5d0d
cmake: extend integration tests
- GHA: add cmake integration tests for Windows.
- make them run faster with prefill, unity, Ninja, omitting curl tool.
- also test static libcurl.
- add old-cmake support with auto-detection.
- auto-detect Ninja.
- run consumer test apps to see if they work.
- add support for Windows.
- make it more verbose.
- re-add `ExternalProject` cmake consumer test. It's broken.
- tidy up terminology.

Cherry-picked from #16973
Closes #17203
2025-04-27 13:22:39 +02:00
Daniel Stenberg
15839450be
urlapi: redirecting to "" is considered fine
If the CURLU handle already holds a proper URL, otherwise it is an
error.

Verified by test 1560

Fixes #17188
Reported-by: zopsicle on github
Closes #17189
2025-04-25 22:38:04 +02:00
Daniel Stenberg
4db64a6437
tool_paramhlp: avoid integer overflow in secs2ms()
The previous approach was wrong and could lead to wrong timeout values
getting used.

Reported-by: bsr13 on hackerone
Closes #17184
2025-04-25 17:54:19 +02:00
Daniel Stenberg
1968b32afd
tests/buildinfo: former "disabled" now provides more info
This tool now contains ON/OFF information about features in the build.
This way, runtests gets both positive and negative feature presence with
this. Allows for more flexibility and avoids having to duplicate the
names.

Closes #17180
2025-04-25 09:43:47 +02:00
Daniel Stenberg
79b4e56b3f
typecheck-gcc.h: fix the typechecks
Refreshed, cleaned up, improved and now checks *all* options.

This must have stopped working at some point. gcc-14 least shows these
warnings with this change, not without.

Add test 745 to verify that all options listed in curl.h is also checked
by the typechecker.

This improved checker found almost 30 mistakes in the curl git
repository.

Closes #17143
2025-04-24 13:23:49 +02:00
Stefan Eissing
5e95556fc2
multi: init_do(): check result
Calls to `Curl_init_do()` did not check on result and missed failures to
properly and completely initialize a transfer request.

The main cause of such an init failure is the need to rewind the
READFUNCTION without a SEEKFUNCTION registered. Check the failure to
"rewind" the upload data immediately make test cases 1576 and friends
fail.

Reported-by: Travis Lane
Fixes #17139
Closes #17150
2025-04-24 08:43:03 +02:00
Daniel Stenberg
f9f1a15699
lib/src/docs/test: improve curl_easy_setopt() calls
Fix invokes where the argument was not the correct type.

Closes #17160
2025-04-23 23:44:55 +02:00
Viktor Szakats
3394644325
runtests: fix indentation [ci skip]
Cherry-picked from #16840
2025-04-22 21:11:37 +02:00
Stefan Eissing
657aae79c0
lib: add meta_hash to connection, eliminate hash_offt
With a meta_hash at each connection (similar to easy handle, let
multi_ev.c store its pollsets as meta data, no longer needing its own
hashes.

This eliminates the last use of Curl_hash_offt. Remove it.

Closes #17095
2025-04-22 15:57:18 +02:00
Stefan Eissing
1d66a769d7
http: fix HTTP/2 handling of TE request header using "trailers"
A "TE" request header is allowed in HTTP/2 when it only carries the
"trailers" value. RFC 9113 ch. 8.2.2. Check client supplied TE values
for the "trailers" token and only pass that one in a HTTP/2 request.

Add test_01_17 to verify.

Fixes #17122
Reported-by: epicmkirzinger on github
Closes #17128
2025-04-22 15:55:36 +02:00
Daniel Stenberg
da9494eef0
tool_getparam: clear argument only when needed
Test 699 verifies

Reported-by: bsr13 on hackerone
Closes #17112
2025-04-20 23:08:11 +02:00
Viktor Szakats
3f297f1ecc
runtests: add retry option to reduce flakiness
Add `--retry=<num>` option to tell runtests to retry the first `<num>`
tests that failed. Retries aren't run right away, but added to the end
of the test queue. Once all retry slots are used, test fail as normal.

In CI, typically a single test fails for flakiness, and rarely over 5.

Make the `ci-test` targets default to `--retry=5`.

Closes #17091
2025-04-19 10:41:58 +02:00
Brian Chrzanowski
c0df01fd94
websocket: add option to disable auto-pong reply
This adds another bitflag on CURLOPT_WS_OPTIONS (CURLWS_NOAUTOPONG) that
disables the default and automatic PONG reply in the WebSocket layer.

Assisted-by: Calvin Ruocco

Closes #16744
2025-04-19 00:01:28 +02:00
sftcd
d6c8907864
doh: httpsrr fix
Closes #17099
2025-04-18 23:03:31 +02:00