Commit Graph

12932 Commits

Author SHA1 Message Date
Stefan Eissing
d9ccc75b00 http2: fix upload busy loop
- Set KEEP_SEND_PAUSE when exhausting remote HTTP/2 window size of a
  stream.

- Clear KEEP_SEND_PAUSE when receiving HTTP/2 window updates on a paused
  stream.

- Also fix http2 send compiler warnings reported in #10449.

Prior to this change, starting in 71b7e016 which precedes 7.88.0,
libcurl may eat CPU during HTTP/2 upload.

Reported-by: Jay Satiro

Fixes https://github.com/curl/curl/issues/10449
Fixes https://github.com/curl/curl/issues/10618
Closes https://github.com/curl/curl/pull/10627
2023-03-01 04:13:49 -05:00
Daniel Stenberg
c50a6eee04
sectransp: make read_cert() use a dynbuf when loading
Closes #10632
2023-03-01 09:38:43 +01:00
Jay Satiro
0b84d0cf1b transfer: limit Windows SO_SNDBUF updates to once a second
- Change readwrite_upload() to call win_update_buffer_size() no more
  than once a second to update SO_SNDBUF (send buffer limit).

Prior to this change during an upload readwrite_upload() could call
win_update_buffer_size() anywhere from hundreds of times per second to
an extreme test case of 100k per second (which is likely due to a bug,
see #10618). In the latter case WPA profiler showed
win_update_buffer_size was the highest capture count in
readwrite_upload. In any case the calls were excessive and unnecessary.

Ref: https://github.com/curl/curl/pull/2762

Closes https://github.com/curl/curl/pull/10611
2023-03-01 01:15:28 -05:00
Stefan Eissing
cbe9d82c22
http2: fix for http2-prior-knowledge when reusing connections
- refs #10634 where errors in the HTTP/2 framing layer are observed.
- the bug was that on connection reuse, the code attempted to switch
  in yet another layer of HTTP/2 handling instead of detecting that
  this was already in place.
- added pytest testcase reproducing the issue.

Reported-by: rwmjones on github
Fixes #10634
Closes #10643
2023-02-28 23:04:00 +01:00
Stefan Eissing
efa1aba97c
cf-socket: fix handling of remote addr for accepted tcp sockets
- do not try to determine the remote address of a listen socket. There
  is none.
- Update remote address of an accepted socket by getpeername() if
  available.

Reported-by: Harry Sintonen
Fixes #10622
Closes #10642
2023-02-28 23:03:17 +01:00
Stefan Eissing
a4d015e69f
http: fix unix domain socket use in https connects
- when h2/h3 eyeballing was involved, unix domain socket
  configurations were not honoured
- configuring --unix-socket will disable HTTP/3 as candidate for eyeballing
- combinatino of --unix-socket and --http3-only will fail during initialisation
- adding pytest test_11 to reproduce

Reported-by: Jelle van der Waa
Fixes #10633
Closes #10641
2023-02-28 22:59:19 +01:00
Daniel Stenberg
c9c3ec482b
setopt: move the CURLOPT_CHUNK_DATA pointer to the set struct
To make duphandle work etc

Closes #10635
2023-02-28 08:44:28 +01:00
Viktor Szakats
51211a31a5
quic/schannel: fix compiler warnings
Fixes #10603
Closes #10616
2023-02-28 08:43:16 +01:00
Daniel Stenberg
252fce70b1
mqtt: on send error, return error
Reported-by: Maciej Domanski

Closes #10623
2023-02-28 08:11:55 +01:00
Daniel Stenberg
3b23dbeec1
ws: keep the socket non-blocking
Reported-by: marski on github
Fixes #10615
Closes #10625
2023-02-28 00:38:21 +01:00
Daniel Stenberg
788c6b3864
hostip: avoid sscanf and extra buffer copies
Also made create_hostcache_id() return the id length.

Closes #10601
2023-02-27 20:43:13 +01:00
Daniel Stenberg
a26547b2a2
easy: remove infof() debug leftover from curl_easy_recv
It said "reached [path]/easy.c:1231"

Closes #10628
2023-02-27 19:50:25 +01:00
Daniel Stenberg
cf3e6ce92f
idn: return error if the conversion ends up with a blank host
Some IDN sequences are converted into "" (nothing), which can make this
function end up with a zero length host name and we cannot consider that
a valid host to continue with.

Reported-by: Maciej Domanski
Closes #10617
2023-02-27 15:12:29 +01:00
Daniel Stenberg
22eec78027
x509asn1.c: use correct format specifier for infof() call
Detected by Coverity

Closes #10614
2023-02-27 08:26:01 +01:00
Daniel Stenberg
3b15ee1e34
rtsp: avoid sscanf for parsing
Closes #10605
2023-02-24 23:56:43 +01:00
Daniel Stenberg
3b8f5bb15b
http_proxy: parse the status line without sscanf
Closes #10602
2023-02-24 23:54:54 +01:00
Daniel Stenberg
cbd3fd7cbb
telnet: error correctly for WS set to "x[num]"
Follow-up to e4f93be9d5
Reported-by: Harry Sintonen
Closes #10606
2023-02-24 23:00:26 +01:00
Daniel Stenberg
5ed7417d2f
krb5: avoid sscanf for parsing
Closes #10599
2023-02-24 17:24:01 +01:00
Daniel Stenberg
835682661c
misc: remove support for curl_off_t < 8 bytes
Closes #10597
2023-02-24 17:05:33 +01:00
Daniel Stenberg
9672cc640c
telnet: parse NEW_ENVIRON without sscanf
Closes #10596
2023-02-24 16:45:58 +01:00
Daniel Stenberg
e4f93be9d5
telnet: parse the WS= argument without sscanf
Closes #10596
2023-02-24 16:45:56 +01:00
Daniel Stenberg
0c28ba2faa
telnet: parse telnet options without sscanf
Closes #10596
2023-02-24 16:45:42 +01:00
Daniel Stenberg
304b5183fd
ftp: replace sscanf for MDTM 213 response parsing
Closes #10590
2023-02-24 16:43:27 +01:00
Daniel Stenberg
dad74488fc
ftp: replace sscanf for PASV parsing
Closes #10590
2023-02-24 16:43:24 +01:00
Daniel Stenberg
b0f54f27a9
ftp: make the EPSV response parser not use sscanf
Closes #10590
2023-02-24 16:43:15 +01:00
Stefan Eissing
f6fe54e21e
ngtcp2: fix unwanted close of file descriptor 0
... causing macOS to hand out 0 as next socket handle and failing on
further operations.

Reported-by: Sergey Fionov
Fixes #10593
Closes #10595
2023-02-24 08:43:35 +01:00
Daniel Stenberg
0242eba06e
select: stop treating POLLRDBAND as an error
POLLRDBAND does not seem to be an general error and on Windows the value
for POLLIN is 768 and the value for POLLRDBAND is 512.

Fixes #10501
Reported-by: opensslonzos-github on github
Closes #10592
2023-02-23 23:41:44 +01:00
Daniel Stenberg
b2151fbc4f
http: rewrite the status line parser without sscanf
Closes #10585
2023-02-23 10:23:12 +01:00
Jay Satiro
47129b2b4b sectransp: fix compiler warning c89 mixed code/declaration
Since cbf57176 the Cirrus CI 'macOS arm64 SecureTransport http2' has
been failing due to c89 warnings mixed code/declaration. That commit is
not the cause so I assume something has changed in the CI outside of our
configuration. Anyway, we don't mix code/declaration so this is the fix
for that.

Closes https://github.com/curl/curl/pull/10574
2023-02-23 03:47:31 -05:00
Stefan Eissing
821f6e2a89
CURLOPT_PIPEWAIT: allow waited reuse also for subsequent connections
As tested in test_02_07, when firing off 200 urls with --parallel, 199
wait for the first connection to be established. if that is multiuse,
urls are added up to its capacity.

The first url over capacity opens another connection. But subsequent
urls found the same situation and open a connection too. They should
have waited for the second connection to actually connect and make its
capacity known.

This change fixes that by

- setting `connkeep()` early in the HTTP setup handler. as otherwise
  a new connection is marked as closeit by default and not considered
  for multiuse at all
- checking the "connected" status for a candidate always and continuing
  to PIPEWAIT if no alternative is found.

pytest:
- removed "skip" from test_02_07
- added test_02_07b to check that http/1.1 continues to work as before

Closes #10456
2023-02-21 11:12:48 +01:00
Daniel Stenberg
ac5ea7b6eb
cookie: parse without sscanf()
Saves us from using 2*4096 bytes buffers on stack, the extra copies and
more.

Closes #10550
2023-02-20 23:49:51 +01:00
Daniel Stenberg
5cc09a8479
parsedate: replace sscanf( for time stamp parsing
Closes #10547
2023-02-20 23:48:20 +01:00
Daniel Stenberg
ba9a4e9bd8
parsedate: parse strings without using sscanf()
- sscanf is slow and complex, avoid it
- give up already if the string is 12 bytes or longer as no valid string
  can be that long
- this can now be done without copy

Closes #10547
2023-02-20 23:48:14 +01:00
Daniel Stenberg
a6506f266c
socketpair: allow EWOULDBLOCK when reading the pair check bytes
Reported-by: Gunamoi Software
Co-authored-by: Jay Satiro
Fixes #10561
Closes #10562
2023-02-20 08:11:49 +01:00
Jay Satiro
cab040248d curl_setup: Suppress OpenSSL 3 deprecation warnings
- Define OPENSSL_SUPPRESS_DEPRECATED.

OpenSSL 3 has deprecated some of the functions libcurl uses such as
those with DES, MD5 and ENGINE prefix. We don't have replacements for
those functions so the warnings were disabled in autotools and cmake
builds, but still showed in other builds.

Closes https://github.com/curl/curl/pull/10543
2023-02-18 19:02:37 -05:00
Stefan Eissing
e187d69e48
urldata: remove now from struct SingleRequest - not needed
Closes #10549
2023-02-17 23:23:33 +01:00
Daniel Stenberg
8b27799f8c
urlapi: do the port number extraction without using sscanf()
- sscanf() is rather complex and slow, strchr() much simpler

- the port number function does not need to fully verify the IPv6 address
  anyway as it is done later in the hostname_check() function and doing
  it twice is unnecessary.

Closes #10541
2023-02-17 16:21:26 +01:00
Stefan Eissing
72bb489543
setopt: allow HTTP3 when HTTP2 is not defined
Reported-by: Karthikdasari0423 on github
Fixes #10538
Closes #10544
2023-02-17 16:12:24 +01:00
jonrumsey
85721574ed
os400: correct Curl_os400_sendto()
Add const qualifier to 5th argument of Curl_os400_sendto()

Make OS400 wrapper for sendto match the normal prototype of sendto()
with a const qualifier.

Fixes #10539
Closes #10548
2023-02-17 14:49:51 +01:00
Daniel Stenberg
6d860f1758
socks: allow using DoH to resolve host names
For SOCKS modes where a local host resolve is done.

It was previously disabled in 12d655d456, but a few local tests seem to
indicate that it works fine. Works now because of the SOCKS refactor of
4a4b63daaa that made it non-blocking.

Reported-by: roughtex on github
Fixes #10537
Closes #10540
2023-02-17 09:17:54 +01:00
Stefan Eissing
cc52bc45f6
connnect: fix timeout handling to use full duration
- connect timeout was used at half the configured value, if the
  destination had 1 ip version 4 and other version 6 addresses
  (or the other way around)
- extended test2600 to reproduce these cases

Reported-by: Michael Kaufmann
Fixes #10514
Closes #10517
2023-02-16 11:24:29 +01:00
Harry Sintonen
8c939453f5
http:: include stdint.h more readily
Closes #10516
2023-02-16 10:07:52 +01:00
Harry Sintonen
87ed650d04
http2: set drain on stream end
Ensure that on_frame_recv() stream end will trigger a read if there is
pending data. Without this it could happen that the pending data is
never consumed.

This combined with https://github.com/curl/curl/pull/10529 should fix
https://github.com/curl/curl/issues/10525

Ref: https://github.com/curl/curl/issues/10525
Closes #10530
2023-02-16 09:33:52 +01:00
Stefan Eissing
3103de2053
http2: buffer/pausedata and output flush fix.
* do not process pending input data when copying pausedata to the
   caller
 * return CURLE_AGAIN if the output buffer could not be completely
   written out.

Ref: #10525
Closes #10529
2023-02-16 09:33:01 +01:00
Marcel Raad
c1c969052f
krb5: silence cast-align warning
Add an intermediate cast to `void *`, as done everywhere else when
casting from `sockaddr *` to `sockaddr_in *`.

Closes https://github.com/curl/curl/pull/10528
2023-02-16 08:54:24 +01:00
Daniel Stenberg
964ff76863
openssl: rename 'errcode_t' to 'sslerr_t'
Turns out "/usr/include/et/com_err.h" typedefs this type (without proper
variable scoping).

comerr is the "common error description library" that apparently might be used
by krb5 code, which then makes this header get used in a curl build.

Reported-by: Bruno Henrique Batista Cruz da Silva
Fixed #10502
Closes #10500
2023-02-14 08:25:11 +01:00
Stefan Eissing
ce0cad713d
openssl: test and fix for forward proxy handling (non-tunneling).
- adding pytest test_10 cases for proxy httpd setup tests
- fixing openssl bug in https: proxy hostname verification that
  used the hostname of the request and not the proxy name.

Closes #10498
2023-02-13 20:54:57 +01:00
Patrick Monnerat
119fb18719
content_encoding: do not reset stage counter for each header
Test 418 verifies

Closes #10492
2023-02-13 17:06:19 +01:00
Jay Satiro
f438ce099b multi: stop sending empty HTTP/3 UDP datagrams on Windows
- Limit the 0-sized send procedure that is used to reset a SOCKET's
  FD_WRITE to TCP sockets only.

Prior to this change the reset was used on UDP sockets as well, but
unlike TCP sockets a 0-sized send actually sends out a datagram.

Assisted-by: Marc Hörsken

Ref: https://github.com/curl/curl/pull/9203

Fixes https://github.com/curl/curl/issues/9086
Closes https://github.com/curl/curl/pull/10430
2023-02-13 03:25:12 -05:00
Viktor Szakats
7ce140ba97
h3: silence compiler warnings
Reviewed-by: Daniel Stenberg
Fixes #10485
Closes #10486
2023-02-12 17:11:46 +00:00