Date: Tuesday, February 19, 2019 @ 06:09:29 Author: heftig Revision: 346502
archrelease: copy trunk to testing-x86_64 Added: curl/repos/testing-x86_64/ curl/repos/testing-x86_64/0001-connection_check-restore-original-conn-data-after-th.patch (from rev 346501, curl/trunk/0001-connection_check-restore-original-conn-data-after-th.patch) curl/repos/testing-x86_64/0001-connection_check-set-data-to-the-transfer-doing-the-.patch (from rev 346501, curl/trunk/0001-connection_check-set-data-to-the-transfer-doing-the-.patch) curl/repos/testing-x86_64/0001-multi-remove-verbose-Expire-in-messages.patch (from rev 346501, curl/trunk/0001-multi-remove-verbose-Expire-in-messages.patch) curl/repos/testing-x86_64/PKGBUILD (from rev 346501, curl/trunk/PKGBUILD) -----------------------------------------------------------------+ 0001-connection_check-restore-original-conn-data-after-th.patch | 77 ++++++++++ 0001-connection_check-set-data-to-the-transfer-doing-the-.patch | 31 ++++ 0001-multi-remove-verbose-Expire-in-messages.patch | 26 +++ PKGBUILD | 67 ++++++++ 4 files changed, 201 insertions(+) Copied: curl/repos/testing-x86_64/0001-connection_check-restore-original-conn-data-after-th.patch (from rev 346501, curl/trunk/0001-connection_check-restore-original-conn-data-after-th.patch) =================================================================== --- testing-x86_64/0001-connection_check-restore-original-conn-data-after-th.patch (rev 0) +++ testing-x86_64/0001-connection_check-restore-original-conn-data-after-th.patch 2019-02-19 06:09:29 UTC (rev 346502) @@ -0,0 +1,77 @@ +From 4015fae044ce52a639c9358e22a9e948f287c89f Mon Sep 17 00:00:00 2001 +Message-Id: <4015fae044ce52a639c9358e22a9e948f287c89f.1550326608.git.jan.steff...@gmail.com> +From: Jay Satiro <raysat...@yahoo.com> +Date: Mon, 11 Feb 2019 23:00:00 -0500 +Subject: [PATCH] connection_check: restore original conn->data after the check + +- Save the original conn->data before it's changed to the specified + data transfer for the connection check and then restore it afterwards. + +This is a follow-up to 38d8e1b 2019-02-11. + +History: + +It was discovered a month ago that before checking whether to extract a +dead connection that that connection should be associated with a "live" +transfer for the check (ie original conn->data ignored and set to the +passed in data). A fix was landed in 54b201b which did that and also +cleared conn->data after the check. The original conn->data was not +restored, so presumably it was thought that a valid conn->data was no +longer needed. + +Several days later it was discovered that a valid conn->data was needed +after the check and follow-up fix was landed in bbae24c which partially +reverted the original fix and attempted to limit the scope of when +conn->data was changed to only when pruning dead connections. In that +case conn->data was not cleared and the original conn->data not +restored. + +A month later it was discovered that the original fix was somewhat +correct; a "live" transfer is needed for the check in all cases +because original conn->data could be null which could cause a bad deref +at arbitrary points in the check. A fix was landed in 38d8e1b which +expanded the scope to all cases. conn->data was not cleared and the +original conn->data not restored. + +A day later it was discovered that not restoring the original conn->data +may lead to busy loops in applications that use the event interface, and +given this observation it's a pretty safe assumption that there is some +code path that still needs the original conn->data. This commit is the +follow-up fix for that, it restores the original conn->data after the +connection check. + +Assisted-by: tho...@users.noreply.github.com +Reported-by: tho...@users.noreply.github.com + +Fixes https://github.com/curl/curl/issues/3542 +Closes #3559 +--- + lib/url.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/lib/url.c b/lib/url.c +index bc47685db..46c8fb5fb 100644 +--- a/lib/url.c ++++ b/lib/url.c +@@ -964,8 +964,10 @@ static bool extract_if_dead(struct connectdata *conn, + /* The protocol has a special method for checking the state of the + connection. Use it to check if the connection is dead. */ + unsigned int state; ++ struct Curl_easy *olddata = conn->data; + conn->data = data; /* use this transfer for now */ + state = conn->handler->connection_check(conn, CONNCHECK_ISDEAD); ++ conn->data = olddata; + dead = (state & CONNRESULT_DEAD); + } + else { +@@ -994,7 +996,6 @@ struct prunedead { + static int call_extract_if_dead(struct connectdata *conn, void *param) + { + struct prunedead *p = (struct prunedead *)param; +- conn->data = p->data; /* transfer to use for this check */ + if(extract_if_dead(conn, p->data)) { + /* stop the iteration here, pass back the connection that was extracted */ + p->extracted = conn; +-- +2.20.1 + Copied: curl/repos/testing-x86_64/0001-connection_check-set-data-to-the-transfer-doing-the-.patch (from rev 346501, curl/trunk/0001-connection_check-set-data-to-the-transfer-doing-the-.patch) =================================================================== --- testing-x86_64/0001-connection_check-set-data-to-the-transfer-doing-the-.patch (rev 0) +++ testing-x86_64/0001-connection_check-set-data-to-the-transfer-doing-the-.patch 2019-02-19 06:09:29 UTC (rev 346502) @@ -0,0 +1,31 @@ +From 38d8e1bd4ed1ae52930ae466ecbac78e888b142f Mon Sep 17 00:00:00 2001 +Message-Id: <38d8e1bd4ed1ae52930ae466ecbac78e888b142f.1550283194.git.jan.steff...@gmail.com> +From: Daniel Stenberg <dan...@haxx.se> +Date: Mon, 11 Feb 2019 07:56:00 +0100 +Subject: [PATCH] connection_check: set ->data to the transfer doing the check + +The http2 code for connection checking needs a transfer to use. Make +sure a working one is set before handler->connection_check() is called. + +Reported-by: jnbr on github +Fixes #3541 +Closes #3547 +--- + lib/url.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/lib/url.c b/lib/url.c +index bdb472999..bc47685db 100644 +--- a/lib/url.c ++++ b/lib/url.c +@@ -964,6 +964,7 @@ static bool extract_if_dead(struct connectdata *conn, + /* The protocol has a special method for checking the state of the + connection. Use it to check if the connection is dead. */ + unsigned int state; ++ conn->data = data; /* use this transfer for now */ + state = conn->handler->connection_check(conn, CONNCHECK_ISDEAD); + dead = (state & CONNRESULT_DEAD); + } +-- +2.20.1 + Copied: curl/repos/testing-x86_64/0001-multi-remove-verbose-Expire-in-messages.patch (from rev 346501, curl/trunk/0001-multi-remove-verbose-Expire-in-messages.patch) =================================================================== --- testing-x86_64/0001-multi-remove-verbose-Expire-in-messages.patch (rev 0) +++ testing-x86_64/0001-multi-remove-verbose-Expire-in-messages.patch 2019-02-19 06:09:29 UTC (rev 346502) @@ -0,0 +1,26 @@ +From aabc7ae5ecf70973add429b5acbc86d6a57e4da5 Mon Sep 17 00:00:00 2001 +From: Daniel Stenberg <dan...@haxx.se> +Date: Mon, 11 Feb 2019 22:57:33 +0100 +Subject: [PATCH] multi: remove verbose "Expire in" ... messages + +Reported-by: James Brown +Bug: https://curl.haxx.se/mail/archive-2019-02/0013.html +Closes #3558 +--- + lib/multi.c | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/lib/multi.c b/lib/multi.c +index 6b891620f6..cd9d758ca4 100644 +--- a/lib/multi.c ++++ b/lib/multi.c +@@ -3032,9 +3032,6 @@ void Curl_expire(struct Curl_easy *data, time_t milli, expire_id id) + + DEBUGASSERT(id < EXPIRE_LAST); + +- infof(data, "Expire in %ld ms for %x (transfer %p)\n", +- (long)milli, id, data); +- + set = Curl_now(); + set.tv_sec += milli/1000; + set.tv_usec += (unsigned int)(milli%1000)*1000; Copied: curl/repos/testing-x86_64/PKGBUILD (from rev 346501, curl/trunk/PKGBUILD) =================================================================== --- testing-x86_64/PKGBUILD (rev 0) +++ testing-x86_64/PKGBUILD 2019-02-19 06:09:29 UTC (rev 346502) @@ -0,0 +1,67 @@ +# Maintainer: Dave Reisner <dreis...@archlinux.org> +# Contributor: Angel Velasquez <an...@archlinux.org> +# Contributor: Eric Belanger <e...@archlinux.org> +# Contributor: Lucien Immink <l.imm...@student.fnt.hvu.nl> +# Contributor: Daniel J Griffiths <ghost1...@archlinux.us> + +pkgname=curl +pkgver=7.64.0 +pkgrel=8 +pkgdesc="An URL retrieval utility and library" +arch=('x86_64') +url="https://curl.haxx.se" +license=('MIT') +depends=('ca-certificates' 'krb5' 'libssh2' 'openssl' 'zlib' 'libpsl' 'libnghttp2' + 'libidn2' 'libidn2.so') +provides=('libcurl.so') +source=("https://curl.haxx.se/download/$pkgname-$pkgver.tar.gz"{,.asc} + "0001-connection_check-set-data-to-the-transfer-doing-the-.patch" + "0001-connection_check-restore-original-conn-data-after-th.patch" + "0001-multi-remove-verbose-Expire-in-messages.patch") +sha512sums=('ea0e68f9cbf2eb4f235d8506962dcc7709f769ef3526c0e4c130fdaf7186a1a13b303c6ce919cb9125bbf7c64ddf4f8efb3d9269b906f856e6d7b3def027fb81' + 'SKIP' + 'e9fdd70ec6798f48080582e4cb554fc4cd247075c293c66dcf8b27cab151def1c709c306e4dc8a1439b9843f31fe51248b5d6c7f5183e4af65819a084fddcb1f' + 'adcbf6309e5d69ede876966790dd504da3097a9e03fedf77d44e10fddcb24a5eaa29b4c9229c813d54bd0c2141211e46b50ca58d89608f7c391434e469316cbd' + 'f09b63c36bd958c35bf6e3885efe46fea75fa2780510cac66220bfc1d771de9040560586e0672dac5eb7db7acf67051cf74e56518a8ada6f691c6d8f9dc84fa4') +validpgpkeys=('27EDEAF22F3ABCEB50DB9A125CC908FDB71E12C2') # Daniel Stenberg + +prepare() { + cd "$pkgname-$pkgver" + + patch -Np1 < ../0001-multi-remove-verbose-Expire-in-messages.patch + + # Crash in cargo: + # https://github.com/curl/curl/issues/3541 + patch -Np1 < ../0001-connection_check-set-data-to-the-transfer-doing-the-.patch + patch -Np1 < ../0001-connection_check-restore-original-conn-data-after-th.patch +} + +build() { + cd "$pkgname-$pkgver" + + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --disable-ldap \ + --disable-ldaps \ + --disable-manual \ + --enable-ipv6 \ + --enable-versioned-symbols \ + --enable-threaded-resolver \ + --with-gssapi \ + --with-libssh2 \ + --with-random=/dev/urandom \ + --with-ca-bundle=/etc/ssl/certs/ca-certificates.crt + + make +} + +package() { + cd "$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install + make DESTDIR="$pkgdir" install -C scripts + + # license + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +}