diff options
Diffstat (limited to 'net-misc/curl')
-rw-r--r-- | net-misc/curl/Manifest | 9 | ||||
-rw-r--r-- | net-misc/curl/curl-7.88.0-r1.ebuild (renamed from net-misc/curl/curl-7.88.0.ebuild) | 6 | ||||
-rw-r--r-- | net-misc/curl/files/curl-7.86.0-noproxy-tailmatch-like-in-7.85.0-and-earlier.patch | 84 | ||||
-rw-r--r-- | net-misc/curl/files/curl-7.86.0-proxy-noproxy-match-comma.patch | 86 | ||||
-rw-r--r-- | net-misc/curl/files/curl-7.86.0-proxy-noproxy-tailmatching.patch | 66 | ||||
-rw-r--r-- | net-misc/curl/files/curl-7.88.0-http2.patch | 93 | ||||
-rw-r--r-- | net-misc/curl/files/curl-7.88.0-test-gnuserv-tls-srp.patch | 39 | ||||
-rw-r--r-- | net-misc/curl/files/curl-7.88.0-test-uninitialised-value.patch | 30 | ||||
-rw-r--r-- | net-misc/curl/files/curl-7.88.0-tests.patch | 120 |
9 files changed, 219 insertions, 314 deletions
diff --git a/net-misc/curl/Manifest b/net-misc/curl/Manifest index 30b34141aa35..12e3e2e27bfe 100644 --- a/net-misc/curl/Manifest +++ b/net-misc/curl/Manifest @@ -1,16 +1,13 @@ AUX curl-7.30.0-prefix.patch 880 BLAKE2B 5b7552a8339014221864a585d174b02a96ec7dd7fe8762d331d1981834044f8ec4db64d527a4ded3f5f4cccc86f281576668de092439eb19f5477d5fcf8369cf SHA512 c7cd13b9ccbd12ed01ea121ffece9c23b898a5b34698bae59ae1dd23b1cf2445180b84d80c4a640981f16dba5018df944f405dd5c660addab54ca21e0e673b7f -AUX curl-7.86.0-noproxy-tailmatch-like-in-7.85.0-and-earlier.patch 3609 BLAKE2B 6f7e80c915d8592b93349d8aade7670f37bf37803ee02130245905636de30a70be51272b2d06392397ffcf76bfda78cfc2fbb671971ab3d18b20677239944544 SHA512 20999f12d5316be5854c9ab09a0f9e887edb7878f157069759c8404d31bfd23db352894c0dca6ce871618d0088f0320ebaa1b6166b54facce0e5faf74600232b -AUX curl-7.86.0-proxy-noproxy-match-comma.patch 3143 BLAKE2B 1aa8d62e6082601eae9e3ae7690a1e7ddce7f12be4cf9f20010f32aa51cd5b1c4206be0b731935a9ddd45bb5654ceed3cba3eabb6a1b9dc60112052d7e79ffa7 SHA512 1a0c67bdabeb1ea8cba7a0f93c12ea626bdc329bbe8c3978f03cb25a78c74fa3257a36f2ed53c177b3a256bca2c0dd8081bab1536b0670e1ec9c0541ac23fc11 -AUX curl-7.86.0-proxy-noproxy-tailmatching.patch 2302 BLAKE2B c4199bc1eb04c8c69f8c72397ce526df6c2186151f77d5e13551e589712e9032e1a52720bd1b946a1b5b984f49a01b297410f4cf74814a58bf4bf43701435c76 SHA512 aa211a5428cc746d07cfd37571169d59ccc97560a69e7c6d21cc8b4a133182366264470de540e1813eee51b376d9056ec8dd01f8e95957e58a83f33d37db0442 AUX curl-7.87.0-gnutls-openssl-build.patch 1010 BLAKE2B 716760a38a7a61420e3e508f976c14776d5f3313c4305e8c2fcff9af1744bcaab61bae643546d625448cc613933f8a7137a783e6313a53799485f432d8b9791f SHA512 2a94cf409f33683ca53a347a99faec3c51ba05c4f531be4e784401e4ed977d1142b5d5bc153dd2444311cdeafd3c406ae4a27e515b875f978f5402487d177e9a AUX curl-7.87.0-typecheck-deprecated.patch 2437 BLAKE2B e04b6cf9b9b4073e2d2762f9c0336d35ef58cbc7b754144ea37a8fba73705e035e1b2f5a05987666f2f0f8a34ef0420a7d5977a9202ea5fe026ee536a44a1b0f SHA512 a7abeb4ab1e0381f78da3732c1ab8ab399e7eed1340efe12c6c9038f811b30095c08794b40ec346db27892fea1f6a240d190b6b655981d5262095569bf9ab815 -AUX curl-7.88.0-test-gnuserv-tls-srp.patch 1226 BLAKE2B 73d6738f647b171a4b332b51938a261f9f334a17e3d0f6b4b8669712ae0836b36bfa833513b312b793f65fdcf6e4e88b9bc27f445e8f1fae5193ac6625b07fe5 SHA512 df0217bc657e355c0237f016ba64d1423a959743892fbf5f16871ae400d7cc2dfd857b8cc15260d6cf13bc3689a0e91985ce7c3042917081882bb250e4c8bcfd -AUX curl-7.88.0-test-uninitialised-value.patch 840 BLAKE2B 9bd2a2dcdeff6fb430e34d93e714f5b8e8c18f9c31298953b07a224fdb2d6e1c494c89bc4d553a31382b3f0a8167d9f40f90a2c3cb4ea8e9692bc41a1dd28a27 SHA512 619dcae5ffa90ea21f1700f4990722a6c508706c4bba295f616691944e2021113247501c9f79ecdf9e7fc3895828cd281847a0ce00f689c417af827d532936f1 +AUX curl-7.88.0-http2.patch 3328 BLAKE2B 86b58fa6ee9c620e7e474c9e5a661b885adbe90172e4f769e503e1911db3664f75e96aead241638a3dabbaf6d393149c5b6b374bf333cb6951c35cae8a4039eb SHA512 7cb11fcbae30c99e0736aa5edf21f042446fc4e6d128c7b9bb3c53cf467e66a03461c1bb9f6e20e1fb64d1223cd9e1b01dfa99a5a3652f1c1748a3e96b795ce0 +AUX curl-7.88.0-tests.patch 3640 BLAKE2B be0f105a0a16df15660404598ff5d227bdaf8b5d3b6f072e16aa489ee3ca4a30775e9b024a6595accabb50657966515e78043dd47bb43c58140d4d2676e48198 SHA512 13e4502929f8bb1366e1587369439ac4560239e1e2a741df6add56bba80bd3d80b3c8f12b9eb1723d7e27693d96aa6e914bced98325a77e96b2a108624d1f835 AUX curl-respect-cflags-3.patch 406 BLAKE2B 1b533144858aff5566150c4a2648ad2e48e8ff29849ae285592edfee4b3332d06e750395dea7190ee6a01d2b5ee2c2c42c10400c2e5defa09963a90a1a10417d SHA512 3219e4e67d534e35012909243fc8d69d58989462db44dd507c502e7aaa299f1d9a01392e2c83797cc2bdb53d503470c5d6e7bf94572a6ccc6e5eafcc0466bc54 DIST curl-7.87.0.tar.xz 2547932 BLAKE2B b272ec928c5ef1728434630d8910f58834327a30570913df9d47921a2810d002bd88b81371005197db857d3a53386420c1e28b1e463e6241d46c1e50fbce0c13 SHA512 aa125991592667280dce3788aabe81487cf8c55b0afc59d675cc30b76055bb7114f5380b4a0e3b6461a8f81bf9812fa26d493a85f7e01d84263d484a0d699ee7 DIST curl-7.87.0.tar.xz.asc 488 BLAKE2B 031d8236b357bd3c519548b181254dc0aea1efc1375738bce04f4f331d35bafe99d1ca394ecf5943ede7cae040854b6d2b478fd305147eb7330f8d50e5d95c96 SHA512 0bcc12bafc4ae50d80128af2cf4bf1a1ec6018ebb8d5b9c49f52b51c0c25acc77e820858965656549ef43c1f923f4e5fe75b0a3523623154b4cfb9dc8a1d76e4 DIST curl-7.88.0.tar.xz 2571564 BLAKE2B 8fae8136a8a52c58b2860b6c3b342d59bb0c9a743f94c3ea3620cbb180f1ebd1310ace17e23d9c4bd2ec4b1dd72777779b2e1fbe66bb47b54a60b02247e3a07d SHA512 2008cbc67694f746b7449f087a19b2a9a4950333d6bac1cdc7d80351aa38d8d9b442087dedbc7b0909a419d3b10f510521c942aac012d04a53c32bdb15dce5f0 DIST curl-7.88.0.tar.xz.asc 488 BLAKE2B 9714e26c1308b036f7b19c909447e20d0c3611b0995845a8fb1a356d74e68027399acaafb69244411787cf2abbcbca446f237ce1277228c33caf0adc97364dbf SHA512 6f3d9a5f8fcec64652f872adf994ff3d0162fba1b483a0e359522173bf29ef3d26eeda7c328207fa1fa974a45e62674a3a8ebec21830ab3981b56851d5804ade EBUILD curl-7.87.0-r2.ebuild 8660 BLAKE2B ce66897406af36dfd872020b5db67428a65954392393529da1678d0b9dec061d05bf52c7debe03d7dab8c051936ab7634f73dea443e094048cd052c76a0f89cb SHA512 b3a9805fab31995d9162f1bdb6159af9f69532c48c6a966be1b08c8a3c21ac3e7ff7f0513a8c33d2973173e1e5400d6e34abca1aa79581fad178e6a98c375adf -EBUILD curl-7.88.0.ebuild 8449 BLAKE2B d3aad8194990c02f6a5ac22dc380ef707148e0621cf320038c20caa8cd95b6f5703dddbbcb5161652cd3118a0de5b72dd2cd73baef86a418d59629906f2b1936 SHA512 3cda7f9a7bae19a2d222afb9e8fb0871417d292bf80bfa74f1e6ece1539b343dbbd713c86eb2eaa214bc6c1a5ea066d3cbd778cb804b71511f9f31f55fef1000 +EBUILD curl-7.88.0-r1.ebuild 8414 BLAKE2B 8ad26a35d3485c82e9a6f8e80ffffa036a77d8bb7a6a590553db5bf397470271ee00a26bae321edaab5bf48f9fb4e7c1fba7457dacb0db012a87833ee7170878 SHA512 1ef1fe83d74f1c449e78ade7d3fae538b494f522a64da11657d543b7401c0995d7b647b4107e75d0d41984a33ec3543ebe21f2b593e9619212f115a465db5476 MISC metadata.xml 2289 BLAKE2B a351f315d1913abff2fec9c559b2b74ddc0a60bfb293d20a62e20a2072e820f88295dc88ab32a622855cd962b90b739b0270ba88e097ca6b41c21f7f4f72987b SHA512 45cafa3eac6aaf777de55e025ef64ac039e6d300a760fc86b2eb1b77153f5242181a09082e443e525923e30e804a9ae90e902fb7f252a24214ac88929c3b89fe diff --git a/net-misc/curl/curl-7.88.0.ebuild b/net-misc/curl/curl-7.88.0-r1.ebuild index b36a1acba8ac..a95ae998050a 100644 --- a/net-misc/curl/curl-7.88.0.ebuild +++ b/net-misc/curl/curl-7.88.0-r1.ebuild @@ -92,8 +92,8 @@ PATCHES=( "${FILESDIR}"/${PN}-7.30.0-prefix.patch "${FILESDIR}"/${PN}-respect-cflags-3.patch - "${FILESDIR}"/${P}-test-gnuserv-tls-srp.patch - "${FILESDIR}"/${P}-test-uninitialised-value.patch + "${FILESDIR}"/${P}-http2.patch + "${FILESDIR}"/${P}-tests.patch ) src_prepare() { @@ -234,7 +234,7 @@ multilib_src_configure() { --with-zlib $(use_with zstd) ) - + # Do not supply a test httpd/caddy/etc if use test; then myconf+=( diff --git a/net-misc/curl/files/curl-7.86.0-noproxy-tailmatch-like-in-7.85.0-and-earlier.patch b/net-misc/curl/files/curl-7.86.0-noproxy-tailmatch-like-in-7.85.0-and-earlier.patch deleted file mode 100644 index 1f04f22f9b1b..000000000000 --- a/net-misc/curl/files/curl-7.86.0-noproxy-tailmatch-like-in-7.85.0-and-earlier.patch +++ /dev/null @@ -1,84 +0,0 @@ -https://github.com/curl/curl/issues/9842 -https://github.com/curl/curl/commit/b1953c1933b369b1217ef0f16053e26da63488c3 - -From b1953c1933b369b1217ef0f16053e26da63488c3 Mon Sep 17 00:00:00 2001 -From: Daniel Stenberg <daniel@haxx.se> -Date: Sun, 6 Nov 2022 23:19:51 +0100 -Subject: [PATCH] noproxy: tailmatch like in 7.85.0 and earlier - -A regfression in 7.86.0 (via 1e9a538e05c010) made the tailmatch work -differently than before. This restores the logic to how it used to work: - -All names listed in NO_PROXY are tailmatched against the used domain -name, if the lengths are identical it needs a full match. - -Update the docs, update test 1614. - -Reported-by: Stuart Henderson -Fixes #9842 -Closes #9858 ---- - docs/libcurl/opts/CURLOPT_NOPROXY.3 | 4 ---- - lib/noproxy.c | 32 +++++++++++++++-------------- - tests/unit/unit1614.c | 3 ++- - 3 files changed, 19 insertions(+), 20 deletions(-) - -diff --git a/docs/libcurl/opts/CURLOPT_NOPROXY.3 b/docs/libcurl/opts/CURLOPT_NOPROXY.3 -index 5e4c32130431..dc3cf7c10833 100644 ---- a/docs/libcurl/opts/CURLOPT_NOPROXY.3 -+++ b/docs/libcurl/opts/CURLOPT_NOPROXY.3 -@@ -40,10 +40,6 @@ list is matched as either a domain which contains the hostname, or the - hostname itself. For example, "ample.com" would match ample.com, ample.com:80, - and www.ample.com, but not www.example.com or ample.com.org. - --If the name in the \fInoproxy\fP list has a leading period, it is a domain --match against the provided host name. This way ".example.com" will switch off --proxy use for both "www.example.com" as well as for "foo.example.com". -- - Setting the \fInoproxy\fP string to "" (an empty string) will explicitly - enable the proxy for all host names, even if there is an environment variable - set for it. -diff --git a/lib/noproxy.c b/lib/noproxy.c -index 2832ae166a5b..fb856e4faa72 100644 ---- a/lib/noproxy.c -+++ b/lib/noproxy.c -@@ -187,22 +187,24 @@ bool Curl_check_noproxy(const char *name, const char *no_proxy) - tokenlen--; - - if(tokenlen && (*token == '.')) { -- /* A: example.com matches '.example.com' -- B: www.example.com matches '.example.com' -- C: nonexample.com DOES NOT match '.example.com' -- */ -- if((tokenlen - 1) == namelen) -- /* case A, exact match without leading dot */ -- match = strncasecompare(token + 1, name, namelen); -- else if(tokenlen < namelen) -- /* case B, tailmatch with leading dot */ -- match = strncasecompare(token, name + (namelen - tokenlen), -- tokenlen); -- /* case C passes through, not a match */ -+ /* ignore leading token dot as well */ -+ token++; -+ tokenlen--; - } -- else -- match = (tokenlen == namelen) && -- strncasecompare(token, name, namelen); -+ /* A: example.com matches 'example.com' -+ B: www.example.com matches 'example.com' -+ C: nonexample.com DOES NOT match 'example.com' -+ */ -+ if(tokenlen == namelen) -+ /* case A, exact match */ -+ match = strncasecompare(token, name, namelen); -+ else if(tokenlen < namelen) { -+ /* case B, tailmatch domain */ -+ match = (name[namelen - tokenlen - 1] == '.') && -+ strncasecompare(token, name + (namelen - tokenlen), -+ tokenlen); -+ } -+ /* case C passes through, not a match */ - break; - case TYPE_IPV4: - /* FALLTHROUGH */ diff --git a/net-misc/curl/files/curl-7.86.0-proxy-noproxy-match-comma.patch b/net-misc/curl/files/curl-7.86.0-proxy-noproxy-match-comma.patch deleted file mode 100644 index 6c8f4067e8d5..000000000000 --- a/net-misc/curl/files/curl-7.86.0-proxy-noproxy-match-comma.patch +++ /dev/null @@ -1,86 +0,0 @@ -https://bugs.gentoo.org/878365#c2 -https://github.com/curl/curl/issues/9813 -https://github.com/curl/curl/commit/efc286b7a62af0568fdcbf3c68791c9955182128 - -From efc286b7a62af0568fdcbf3c68791c9955182128 Mon Sep 17 00:00:00 2001 -From: Daniel Stenberg <daniel@haxx.se> -Date: Thu, 27 Oct 2022 13:54:27 +0200 -Subject: [PATCH] noproxy: also match with adjacent comma - -If the host name is an IP address and the noproxy string contained that -IP address with a following comma, it would erroneously not match. - -Extended test 1614 to verify this combo as well. - -Reported-by: Henning Schild - -Fixes #9813 -Closes #9814 ---- a/lib/noproxy.c -+++ b/lib/noproxy.c -@@ -192,18 +192,22 @@ bool Curl_check_noproxy(const char *name, const char *no_proxy) - /* FALLTHROUGH */ - case TYPE_IPV6: { - const char *check = token; -- char *slash = strchr(check, '/'); -+ char *slash; - unsigned int bits = 0; - char checkip[128]; -+ if(tokenlen >= sizeof(checkip)) -+ /* this cannot match */ -+ break; -+ /* copy the check name to a temp buffer */ -+ memcpy(checkip, check, tokenlen); -+ checkip[tokenlen] = 0; -+ check = checkip; -+ -+ slash = strchr(check, '/'); - /* if the slash is part of this token, use it */ -- if(slash && (slash < &check[tokenlen])) { -+ if(slash) { - bits = atoi(slash + 1); -- /* copy the check name to a temp buffer */ -- if(tokenlen >= sizeof(checkip)) -- break; -- memcpy(checkip, check, tokenlen); -- checkip[ slash - check ] = 0; -- check = checkip; -+ *slash = 0; /* null terminate there */ - } - if(type == TYPE_IPV6) - match = Curl_cidr6_match(name, check, bits); ---- a/tests/data/test1614 -+++ b/tests/data/test1614 -@@ -16,7 +16,7 @@ unittest - proxy - </features> - <name> --cidr comparisons -+noproxy and cidr comparisons - </name> - </client> - <errorcode> ---- a/tests/unit/unit1614.c -+++ b/tests/unit/unit1614.c -@@ -77,6 +77,20 @@ UNITTEST_START - { NULL, NULL, 0, FALSE} /* end marker */ - }; - struct noproxy list[]= { -+ { "127.0.0.1", "127.0.0.1,localhost", TRUE}, -+ { "127.0.0.1", "127.0.0.1,localhost,", TRUE}, -+ { "127.0.0.1", "127.0.0.1/8,localhost,", TRUE}, -+ { "127.0.0.1", "127.0.0.1/28,localhost,", TRUE}, -+ { "127.0.0.1", "127.0.0.1/31,localhost,", TRUE}, -+ { "127.0.0.1", "localhost,127.0.0.1", TRUE}, -+ { "127.0.0.1", "localhost,127.0.0.1.127.0.0.1.127.0.0.1.127.0.0.1." -+ "127.0.0.1.127.0.0.1.127.0.0.1.127.0.0.1.127.0.0.1.127.0.0.1.127." -+ "0.0.1.127.0.0.1.127.0.0." /* 128 bytes "address" */, FALSE}, -+ { "127.0.0.1", "localhost,127.0.0.1.127.0.0.1.127.0.0.1.127.0.0.1." -+ "127.0.0.1.127.0.0.1.127.0.0.1.127.0.0.1.127.0.0.1.127.0.0.1.127." -+ "0.0.1.127.0.0.1.127.0.0" /* 127 bytes "address" */, FALSE}, -+ { "localhost", "localhost,127.0.0.1", TRUE}, -+ { "localhost", "127.0.0.1,localhost", TRUE}, - { "foobar", "barfoo", FALSE}, - { "foobar", "foobar", TRUE}, - { "192.168.0.1", "foobar", FALSE}, - diff --git a/net-misc/curl/files/curl-7.86.0-proxy-noproxy-tailmatching.patch b/net-misc/curl/files/curl-7.86.0-proxy-noproxy-tailmatching.patch deleted file mode 100644 index 15f5e64c91f3..000000000000 --- a/net-misc/curl/files/curl-7.86.0-proxy-noproxy-tailmatching.patch +++ /dev/null @@ -1,66 +0,0 @@ -https://bugs.gentoo.org/878365#c2 -https://github.com/curl/curl/issues/9821 -https://github.com/curl/curl/commit/b830f9ba9e94acf672cd191993ff679fa888838b - -From b830f9ba9e94acf672cd191993ff679fa888838b Mon Sep 17 00:00:00 2001 -From: Daniel Stenberg <daniel@haxx.se> -Date: Fri, 28 Oct 2022 10:51:49 +0200 -Subject: [PATCH] noproxy: fix tail-matching - -Also ignore trailing dots in both host name and comparison pattern. - -Regression in 7.86.0 (from 1e9a538e05c0) - -Extended test 1614 to verify better. - -Reported-by: Henning Schild -Fixes #9821 -Closes #9822 ---- a/lib/noproxy.c -+++ b/lib/noproxy.c -@@ -153,9 +153,14 @@ bool Curl_check_noproxy(const char *name, const char *no_proxy) - } - else { - unsigned int address; -+ namelen = strlen(name); - if(1 == Curl_inet_pton(AF_INET, name, &address)) - type = TYPE_IPV4; -- namelen = strlen(name); -+ else { -+ /* ignore trailing dots in the host name */ -+ if(name[namelen - 1] == '.') -+ namelen--; -+ } - } - - while(*p) { -@@ -177,12 +182,23 @@ bool Curl_check_noproxy(const char *name, const char *no_proxy) - if(tokenlen) { - switch(type) { - case TYPE_HOST: -- if(*token == '.') { -- ++token; -- --tokenlen; -- /* tailmatch */ -- match = (tokenlen <= namelen) && -- strncasecompare(token, name + (namelen - tokenlen), namelen); -+ /* ignore trailing dots in the token to check */ -+ if(token[tokenlen - 1] == '.') -+ tokenlen--; -+ -+ if(tokenlen && (*token == '.')) { -+ /* A: example.com matches '.example.com' -+ B: www.example.com matches '.example.com' -+ C: nonexample.com DOES NOT match '.example.com' -+ */ -+ if((tokenlen - 1) == namelen) -+ /* case A, exact match without leading dot */ -+ match = strncasecompare(token + 1, name, namelen); -+ else if(tokenlen < namelen) -+ /* case B, tailmatch with leading dot */ -+ match = strncasecompare(token, name + (namelen - tokenlen), -+ tokenlen); -+ /* case C passes through, not a match */ - } - else - match = (tokenlen == namelen) && diff --git a/net-misc/curl/files/curl-7.88.0-http2.patch b/net-misc/curl/files/curl-7.88.0-http2.patch new file mode 100644 index 000000000000..49d90e901823 --- /dev/null +++ b/net-misc/curl/files/curl-7.88.0-http2.patch @@ -0,0 +1,93 @@ +https://github.com/curl/curl/commit/87ed650d04dc1a6f7944a5d952f7d5b0934a19ac +Author: Harry Sintonen <sintonen@iki.fi> +Date: Thu Feb 16 06:26:26 2023 +0200 + + 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 + +--- a/lib/http2.c ++++ b/lib/http2.c +@@ -868,6 +868,14 @@ static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame, + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + } ++ if(frame->hd.flags & NGHTTP2_FLAG_END_STREAM) { ++ /* Stream has ended. If there is pending data, ensure that read ++ will occur to consume it. */ ++ if(!data->state.drain && stream->memlen) { ++ drain_this(cf, data_s); ++ Curl_expire(data, 0, EXPIRE_RUN_NOW); ++ } ++ } + break; + case NGHTTP2_HEADERS: + DEBUGF(LOG_CF(data_s, cf, "[h2sid=%u] recv frame HEADERS", stream_id)); + +https://github.com/curl/curl/commit/3103de2053ca8cacf9cdbe78764ba6814481709f +Author: Stefan Eissing <stefan@eissing.org> +Date: Wed Feb 15 22:11:13 2023 +0100 + + 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 + +--- a/lib/http2.c ++++ b/lib/http2.c +@@ -467,6 +467,7 @@ static CURLcode flush_output(struct Curl_cfilter *cf, + } + if((size_t)written < buflen) { + Curl_dyn_tail(&ctx->outbuf, buflen - (size_t)written); ++ return CURLE_AGAIN; + } + else { + Curl_dyn_reset(&ctx->outbuf); +@@ -1790,6 +1791,7 @@ static ssize_t cf_h2_recv(struct Curl_cfilter *cf, struct Curl_easy *data, + + stream->pausedata += nread; + stream->pauselen -= nread; ++ drain_this(cf, data); + + if(stream->pauselen == 0) { + DEBUGF(LOG_CF(data, cf, "[h2sid=%u] Unpaused", stream->stream_id)); +@@ -1798,18 +1800,6 @@ static ssize_t cf_h2_recv(struct Curl_cfilter *cf, struct Curl_easy *data, + + stream->pausedata = NULL; + stream->pauselen = 0; +- +- /* When NGHTTP2_ERR_PAUSE is returned from +- data_source_read_callback, we might not process DATA frame +- fully. Calling nghttp2_session_mem_recv() again will +- continue to process DATA frame, but if there is no incoming +- frames, then we have to call it again with 0-length data. +- Without this, on_stream_close callback will not be called, +- and stream could be hanged. */ +- if(h2_process_pending_input(cf, data, err) != 0) { +- nread = -1; +- goto out; +- } + } + DEBUGF(LOG_CF(data, cf, "[h2sid=%u] recv: returns unpaused %zd bytes", + stream->stream_id, nread)); +@@ -1933,6 +1923,7 @@ static ssize_t cf_h2_recv(struct Curl_cfilter *cf, struct Curl_easy *data, + drained_transfer(cf, data); + } + ++ *err = CURLE_OK; + nread = retlen; + DEBUGF(LOG_CF(data, cf, "[h2sid=%u] cf_h2_recv -> %zd", + stream->stream_id, nread)); diff --git a/net-misc/curl/files/curl-7.88.0-test-gnuserv-tls-srp.patch b/net-misc/curl/files/curl-7.88.0-test-gnuserv-tls-srp.patch deleted file mode 100644 index fb9e89fd48cb..000000000000 --- a/net-misc/curl/files/curl-7.88.0-test-gnuserv-tls-srp.patch +++ /dev/null @@ -1,39 +0,0 @@ -https://github.com/curl/curl/commit/2fdc1d816ebf3c77f43068103bec1b3a3767881a.patch -From: Daniel Stenberg <daniel@haxx.se> -Date: Wed, 15 Feb 2023 15:04:07 +0100 -Subject: [PATCH] tests: make sure gnuserv-tls has SRP support before using it - -Reported-by: fundawang on github -Fixes #10522 -Closes #10524 ---- a/tests/runtests.pl -+++ b/tests/runtests.pl -@@ -5382,7 +5382,7 @@ sub startservers { - elsif($what eq "httptls") { - if(!$httptlssrv) { - # for now, we can't run http TLS-EXT tests without gnutls-serv -- return "no gnutls-serv"; -+ return "no gnutls-serv (with SRP support)"; - } - if($torture && $run{'httptls'} && - !responsive_httptls_server($verbose, "IPv4")) { ---- a/tests/sshhelp.pm -+++ b/tests/sshhelp.pm -@@ -408,7 +408,16 @@ sub find_sshkeygen { - # Find httptlssrv (gnutls-serv) and return canonical filename - # - sub find_httptlssrv { -- return find_exe_file_hpath($httptlssrvexe); -+ my $p = find_exe_file_hpath($httptlssrvexe); -+ my @o = `$p -l`; -+ my $found; -+ for(@o) { -+ if(/Key exchange: SRP/) { -+ $found = 1; -+ last; -+ } -+ } -+ return $p if($found); - } - - diff --git a/net-misc/curl/files/curl-7.88.0-test-uninitialised-value.patch b/net-misc/curl/files/curl-7.88.0-test-uninitialised-value.patch deleted file mode 100644 index c5ce31d4e427..000000000000 --- a/net-misc/curl/files/curl-7.88.0-test-uninitialised-value.patch +++ /dev/null @@ -1,30 +0,0 @@ -https://github.com/curl/curl/commit/f1d09231adfc695d15995b9ef2c8c6e568c28091 -From: Daniel Stenberg <daniel@haxx.se> -Date: Wed, 15 Feb 2023 13:03:21 +0100 -Subject: [PATCH] runtests: fix "uninitialized value $port" - -by using a more appropriate variable - -Reported-by: fundawang on github -Fixes #10518 -Closes #10520 ---- a/tests/runtests.pl -+++ b/tests/runtests.pl -@@ -1740,7 +1740,7 @@ sub runhttpserver { - } - - # where is it? -- my $port; -+ my $port = 0; - if(!$port_or_path) { - $port = $port_or_path = pidfromfile($portfile); - } -@@ -1758,7 +1758,7 @@ sub runhttpserver { - $pid2 = $pid3; - - if($verbose) { -- logmsg "RUN: $srvrname server is on PID $httppid port $port\n"; -+ logmsg "RUN: $srvrname server is on PID $httppid port $port_or_path\n"; - } - - return ($httppid, $pid2, $port); diff --git a/net-misc/curl/files/curl-7.88.0-tests.patch b/net-misc/curl/files/curl-7.88.0-tests.patch new file mode 100644 index 000000000000..81131dc6bc64 --- /dev/null +++ b/net-misc/curl/files/curl-7.88.0-tests.patch @@ -0,0 +1,120 @@ +https://github.com/curl/curl/commit/f1d09231adfc695d15995b9ef2c8c6e568c28091 +Author: Stefan Eissing <stefan@eissing.org> +Date: Tue Feb 14 14:29:13 2023 +0100 + + tests: make the telnet server shut down a socket gracefully + + - test 1452 failed occasionally with ECONNRESET errnos in curl when the + server closed the connection in an unclean state. + + Closes #10509 + +--- a/tests/negtelnetserver.py ++++ b/tests/negtelnetserver.py +@@ -29,7 +29,9 @@ from __future__ import (absolute_import, division, print_function, + import argparse + import logging + import os ++import socket + import sys ++import time + + from util import ClosingFileHandler + +@@ -90,7 +92,7 @@ class NegotiatingTelnetHandler(socketserver.BaseRequestHandler): + neg.send_wont("NAWS") + + # Get the data passed through the negotiator +- data = neg.recv(1024) ++ data = neg.recv(4*1024) + log.debug("Incoming data: %r", data) + + if VERIFIED_REQ.encode('utf-8') in data: +@@ -109,6 +111,12 @@ class NegotiatingTelnetHandler(socketserver.BaseRequestHandler): + log.debug("Sending %r", response_data) + self.request.sendall(response_data) + ++ # put some effort into making a clean socket shutdown ++ # that does not give the client ECONNRESET ++ self.request.settimeout(0.1) ++ self.request.recv(4*1024) ++ self.request.shutdown(socket.SHUT_RDWR) ++ + except IOError: + log.exception("IOError hit during request") + + +https://github.com/curl/curl/commit/2fdc1d816ebf3c77f43068103bec1b3a3767881a +Author: Daniel Stenberg <daniel@haxx.se> +Date: Wed Feb 15 15:04:07 2023 +0100 + + tests: make sure gnuserv-tls has SRP support before using it + + Reported-by: fundawang on github + Fixes #10522 + Closes #10524 + +--- a/tests/runtests.pl ++++ b/tests/runtests.pl +@@ -5382,7 +5382,7 @@ sub startservers { + elsif($what eq "httptls") { + if(!$httptlssrv) { + # for now, we can't run http TLS-EXT tests without gnutls-serv +- return "no gnutls-serv"; ++ return "no gnutls-serv (with SRP support)"; + } + if($torture && $run{'httptls'} && + !responsive_httptls_server($verbose, "IPv4")) { +--- a/tests/sshhelp.pm ++++ b/tests/sshhelp.pm +@@ -408,7 +408,16 @@ sub find_sshkeygen { + # Find httptlssrv (gnutls-serv) and return canonical filename + # + sub find_httptlssrv { +- return find_exe_file_hpath($httptlssrvexe); ++ my $p = find_exe_file_hpath($httptlssrvexe); ++ my @o = `$p -l`; ++ my $found; ++ for(@o) { ++ if(/Key exchange: SRP/) { ++ $found = 1; ++ last; ++ } ++ } ++ return $p if($found); + } + + + +https://github.com/curl/curl/commit/79d0b3c0c0bb00829f10ec139dbf3823c249ae72 +Author: Daniel Stenberg <daniel@haxx.se> +Date: Wed Feb 15 13:03:21 2023 +0100 + + runtests: fix "uninitialized value $port" + + by using a more appropriate variable + + Reported-by: fundawang on github + Fixes #10518 + Closes #10520 + +--- a/tests/runtests.pl ++++ b/tests/runtests.pl +@@ -1740,7 +1740,7 @@ sub runhttpserver { + } + + # where is it? +- my $port; ++ my $port = 0; + if(!$port_or_path) { + $port = $port_or_path = pidfromfile($portfile); + } +@@ -1758,7 +1758,7 @@ sub runhttpserver { + $pid2 = $pid3; + + if($verbose) { +- logmsg "RUN: $srvrname server is on PID $httppid port $port\n"; ++ logmsg "RUN: $srvrname server is on PID $httppid port $port_or_path\n"; + } + + return ($httppid, $pid2, $port); |