Stefan Eissing [Fri, 7 Jul 2023 08:52:05 +0000 (10:52 +0200)]
http2: raise header limitations above and beyond
- not quite to infinity
- rewrote the implementation of our internal HTTP/1.x request
parsing to work with very large lines using dynbufs.
- new default limit is `DYN_HTTP_REQUEST`, aka 1MB, which
is also the limit of curl's general HTTP request processing.
Stefan Eissing [Mon, 26 Jun 2023 07:03:47 +0000 (09:03 +0200)]
http2: fix crash in handling stream weights
- Delay the priority handling until the stream has been opened.
- Add test2404 to reproduce and verify.
Weights may change "on the run", which is why there are checks in
general egress handling. These must not trigger when the stream has not
been opened yet.
Dan Fandrich [Fri, 23 Jun 2023 19:51:41 +0000 (12:51 -0700)]
CI: enable parallel make in more builds
Most CI services provide at least two cores, so enable parallel make
jobs to take advantage of that for builds. Some dependencies aren't safe
to build in parallel so leave those as-is. Also, rename a few
workflows to eliminate duplicate names and provide a better idea what
they're about.
Daniel Stenberg [Thu, 22 Jun 2023 12:34:49 +0000 (14:34 +0200)]
configure: add check for ldap_init_fd
... as otherwise the configure script will say it is OpenLDAP in the
summary, but not set the USE_OPENLDAP define, therefor not using the
intended OpenLDAP code paths.
Regression since 4d7385446 (7.85.0)
Fixes #11372
Closes #11374 Reported-by: vlkl-sap on github
Michał Petryka [Thu, 22 Jun 2023 19:30:43 +0000 (21:30 +0200)]
cmake: stop CMake from quietly ignoring missing Brotli
The CMake project was set to `QUIET` for Brotli instead of
`REQUIRED`. This makes builds unexpectedly ignore missing Brotli even
when `CURL_BROTLI` is enabled.
Stefan Eissing [Thu, 22 Jun 2023 09:01:53 +0000 (11:01 +0200)]
http2: h2 and h2-PROXY connection alive check fixes
- fix HTTP/2 check to not declare a connection dead when
the read attempt results in EAGAIN
- add H2-PROXY alive check as for HTTP/2 that was missing
and is needed
- add attach/detach around Curl_conn_is_alive() and remove
these in filter methods
- add checks for number of connections used in some test_10
proxy tunneling tests
Stefan Eissing [Wed, 21 Jun 2023 13:59:42 +0000 (15:59 +0200)]
http2: error stream resets with code CURLE_HTTP2_STREAM
- refs #11357, where it was reported that HTTP/1.1 downgrades
no longer works
- fixed with suggested change
- added test_05_03 and a new handler in the curltest module
to reproduce that downgrades work
Fixes #11357
Closes #11362 Reported-by: Jay Satiro
Emanuele Torre [Thu, 22 Jun 2023 11:18:30 +0000 (13:18 +0200)]
quote.d: fix indentation of generated paragraphs
quote.d was missing a .IP at the end which caused the paragraphs
generated for See-also, Multi, and Example to not be indented correctly.
I also remove a redundant "This option can be used multiple times.", and
replaced .IP "item" with .TP .B "item" to make more clear which lines
are part of the list of commands and which aren't.
Dan Fandrich [Wed, 21 Jun 2023 19:43:48 +0000 (12:43 -0700)]
runtests: use more consistent failure lines
After a test failure log a consistent log message to make it easier to
parse the log file. Also, log a consistent message with "ignored" for
failures that cause the test to be not considered at all. These should
perhaps be counted in the skipped category, but this commit does not
change that behaviour.
Dan Fandrich [Wed, 21 Jun 2023 19:39:51 +0000 (12:39 -0700)]
runtests: consistently write the test check summary block
The memory check character was erroneously omitted if the memory
checking file was not available for some reason, making the block of
characters an inconsistent length.
Stefan Eissing [Mon, 19 Jun 2023 10:11:53 +0000 (12:11 +0200)]
hyper: unslow
- refs #11203 where hyper was reported as being slow
- fixes hyper_executor_poll to loop until it is out of
tasks as advised by @seanmonstar in https://github.com/hyperium/hyper/issues/3237
- added a fix in hyper io handling for detecting EAGAIN
- added some debug logs to see IO results
- pytest http/1.1 test cases pass
- pytest h2 test cases fail on connection reuse. HTTP/2
connection reuse does not seem to work. Hyper submits
a request on a reused connection, curl's IO works and
thereafter hyper declares `Hyper: [1] operation was canceled: connection closed`
on stderr without any error being logged before.
Fixes #11203 Reported-by: Gisle Vanem Advised-by: Sean McArthur
Closes #11344
Stefan Eissing [Mon, 19 Jun 2023 08:53:23 +0000 (10:53 +0200)]
HTTP/2: upload handling fixes
- fixes #11242 where 100% CPU on uploads was reported
- fixes possible stalls on last part of a request body when
that information could not be fully send on the connection
due to an EAGAIN
- applies the same EGAIN handling to HTTP/2 proxying
Daniel Stenberg [Mon, 19 Jun 2023 07:19:56 +0000 (09:19 +0200)]
example/opensslthreadlock: remove
This shows how to setup OpenSSL mutex callbacks, but this is not
necessary since OpenSSL 1.1.0 - meaning that no currently supported
OpenSSL version requires this anymore
Dan Fandrich [Fri, 16 Jun 2023 03:10:24 +0000 (20:10 -0700)]
runtests: better detect and handle pipe errors in the controller
Errors reading and writing to the pipes are now better detected and
propagated up to the main test loop so it can be cleanly shut down. Such
errors are usually due to a runner dying so it doesn't make much sense
to try to continue the test run.
Dan Fandrich [Wed, 14 Jun 2023 22:28:39 +0000 (15:28 -0700)]
runtests: cleanly abort the runner if the controller dies
If the controller dies unexpectedly, have the runner stop its servers
and exit cleanly. Otherwise, the orphaned servers will stay running in
the background.
Dan Fandrich [Wed, 14 Jun 2023 22:27:07 +0000 (15:27 -0700)]
runtests: improve error logging
Give more information about test harness error conditions to help figure
out what might be wrong. Print some internal test state when SIGUSR1 is
sent to runtests.pl.
Dan Fandrich [Wed, 14 Jun 2023 22:18:36 +0000 (15:18 -0700)]
runtests: better handle ^C during slow tests
Since the SIGINT handler now just sets a flag that must be checked in the
main controller loop, make sure that runs periodically. Rather than
blocking on a response from a test runner near the end of the test run,
add a short timeout to allow it.
Dan Fandrich [Wed, 14 Jun 2023 21:19:26 +0000 (14:19 -0700)]
tests: improve reliability of TFTP tests
Stop checking the timeout used by the client under test (for most
tests). The timeout will change if the TFTP test server is slow (such as
happens on an overprovisioned CI server) because the client will retry
and reduce its timeout, and the actual value is not important for most
tests.
test285 is changed a different way, by increasing the connect timeout.
This improves test coverage by allowing the changed timeout value to be
checked, but improves reliability with a carefully-chosen timeout that
not only allows twice the time to respond as before, but also allows
several retries before the client will change its timeout value.
Daniel Stenberg [Sat, 17 Jun 2023 22:18:12 +0000 (00:18 +0200)]
cf-socket: skip getpeername()/getsockname for TFTP
Since the socket is not connected then the call fails. When the call
fails, failf() is called to write an error message that is then
surviving and is returned when the *real* error occurs later. The
earlier, incorrect, error therefore hides the actual error message.
This could be seen in stderr for test 1007
Test 1007 has now been extended to verify the stderr message.
Jay Satiro [Fri, 16 Jun 2023 03:02:48 +0000 (23:02 -0400)]
lib: fix some format specifiers
- Use CURL_FORMAT_CURL_OFF_T where %zd was erroneously used for some
curl_off_t variables.
- Use %zu where %zd was erroneously used for some size_t variables.
Prior to this change some of the Windows CI tests were failing because
in Windows 32-bit targets have a 32-bit size_t and a 64-bit curl_off_t.
When %zd was used for some curl_off_t variables then only the lower
32-bits was read and the upper 32-bits would be read for part or all of
the next specifier.
Chris Talbot [Mon, 5 Dec 2022 23:05:01 +0000 (18:05 -0500)]
imap: Provide method to disable SASL if it is advertised
- Implement AUTH=+LOGIN for CURLOPT_LOGIN_OPTIONS to prefer plaintext
LOGIN over SASL auth.
Prior to this change there was no method to be able to fall back to
LOGIN if an IMAP server advertises SASL capabilities. However, this may
be desirable for e.g. a misconfigured server.
Marcel Raad [Tue, 13 Jun 2023 09:13:59 +0000 (11:13 +0200)]
fopen: fix conversion warning on 32-bit Android
When building for 32-bit ARM or x86 Android, `st_mode` is defined as
`unsigned int` instead of `mode_t`, resulting in a
-Wimplicit-int-conversion clang warning because `mode_t` is
`unsigned short`. Add a cast to silence the warning.
Marcel Raad [Mon, 12 Jun 2023 14:02:00 +0000 (16:02 +0200)]
http2: fix variable type
`max_recv_speed` is `curl_off_t`, so using `size_t` might result in
-Wconversion GCC warnings for 32-bit `size_t`. Visible in the NetBSD
ARM autobuilds.
Stefan Eissing [Sun, 11 Jun 2023 09:02:29 +0000 (11:02 +0200)]
tool: add curl command line option `--trace-ids`
- added and documented --trace-ids to prepend (after the timestamp)
the transfer and connection identifiers to each verbose log line
- format is [n-m] with `n` being the transfer id and `m` being the
connection id. In case there is not valid connection id, print 'x'.
- Log calls with a handle that has no transfer id yet, are written
without any ids.
Stefan Eissing [Tue, 23 May 2023 10:48:58 +0000 (12:48 +0200)]
lib: add CURLINFO_CONN_ID and CURLINFO_XFER_ID
- add an `id` long to Curl_easy, -1 on init
- once added to a multi (or its own multi), it gets
a non-negative number assigned by the connection cache
- `id` is unique among all transfers using the same
cache until reaching LONG_MAX where it will wrap
around. So, not unique eternally.
- CURLINFO_CONN_ID returns the connection id attached to
data or, if none present, data->state.lastconnect_id
- variables and type declared in tool for write out
Daniel Stenberg [Mon, 12 Jun 2023 07:01:30 +0000 (09:01 +0200)]
tool_operate: allow cookie lines up to 8200 bytes
Since this option might set multiple cookies in the same line, it does
not make total sense to cap this at 4096 bytes, which is the limit for a
single cookie name or value.
Oleg Jukovec [Sun, 11 Jun 2023 20:25:44 +0000 (23:25 +0300)]
docs: update CURLOPT_UPLOAD.3
The behavior of CURLOPT_UPLOAD differs from what is described in the
documentation. The option automatically adds the 'Transfer-Encoding:
chunked' header if the upload size is unknown.
Dan Fandrich [Wed, 7 Jun 2023 16:56:49 +0000 (09:56 -0700)]
tests: fix error messages & handling around sockets
The wrong error code was checked on Windows on UNIX socket failures,
which could have caused all UNIX sockets to be reported as having
errored and the tests therefore skipped. Also, a useless error message
was displayed on socket errors in many test servers on Windows because
strerror() doesn't work on WinSock error codes; perror() is overridden
there to work on all errors and is used instead.
Stefan Eissing [Fri, 9 Jun 2023 14:32:14 +0000 (16:32 +0200)]
ngtcp2: use ever increasing timestamp in io
- ngtcp2 v0.16.0 asserts that timestamps passed to its function
will only ever increase.
- Use a context shared between ingress/egress operations that
uses a shared timestamp, regularly updated during calls.
Daniel Stenberg [Sun, 4 Jun 2023 21:14:41 +0000 (23:14 +0200)]
ngtcp2: build with 0.16.0 and nghttp3 0.12.0
- moved to qlog_write
- crypto => encryption
- CRYPTO => ENCRYPTION
- removed "_is_"
- ngtcp2_conn_shutdown_stream_read and
ngtcp2_conn_shutdown_stream_write got flag arguments
- the nghttp3_callbacks struct got a recv_settings callback
Daniel Stenberg [Fri, 9 Jun 2023 10:38:25 +0000 (12:38 +0200)]
curl_pushheader_byname/bynum.3: document in their own man pages
These two functions were added in 7.44.0 when CURLMOPT_PUSHFUNCTION was
introduced but always lived a life in the shadows, embedded in the
CURLMOPT_PUSHFUNCTION man page. Until now.
It makes better sense and gives more visibility to document them in
their own stand-alone man pages.
Daniel Stenberg [Thu, 8 Jun 2023 11:15:09 +0000 (13:15 +0200)]
urlapi: have *set(PATH) prepend a slash if one is missing
Previously the code would just do that for the path when extracting the
full URL, which made a subsequent curl_url_get() of the path to
(unexpectedly) still return it without the leading path.
Amend lib1560 to verify this. Clarify the curl_url_set() docs about it.
Bug: https://curl.se/mail/lib-2023-06/0015.html
Closes #11272 Reported-by: Pedro Henrique
Dan Fandrich [Mon, 5 Jun 2023 21:50:15 +0000 (14:50 -0700)]
runtests; give each server a unique log lock file
Logs are written by several servers and all of them must be finished
writing before the test results can be determined. This means each
server must have its own lock file rather than sharing a single one,
which is how it was done up to now. Previously, the first server to
complete a test would clear the lock before the other server was done,
which caused flaky tests.
Lock files are now all found in their own directory, so counting locks
equals counting the files in that directory. The result is that the
proxy logs are now reliably written which actually changes the expected
output for two tests.