curl/lib
Jay Satiro 4015fae044
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: tholin@users.noreply.github.com
Reported-by: tholin@users.noreply.github.com

Fixes https://github.com/curl/curl/issues/3542
Closes #3559
2019-02-14 17:42:43 +01:00
..
vauth ntlm: fix *_type3_message size check to avoid buffer overflow 2019-02-04 08:22:32 +01:00
vtls schannel: restore some debug output but only for debug builds 2019-02-12 19:54:08 -05:00
.gitattributes
.gitignore
amigaos.c
amigaos.h whitespace fixes 2018-09-23 22:24:02 +00:00
arpa_telnet.h travis: add build for "configure --disable-verbose" 2018-10-18 14:51:49 +02:00
asyn-ares.c curl_multi_remove_handle() don't block terminating c-ares requests 2019-01-07 10:05:20 +01:00
asyn-thread.c curl_multi_remove_handle() don't block terminating c-ares requests 2019-01-07 10:05:20 +01:00
asyn.h curl_multi_remove_handle() don't block terminating c-ares requests 2019-01-07 10:05:20 +01:00
base64.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
checksrc.pl checksrc: add COPYRIGHTYEAR check 2018-12-03 23:13:40 +01:00
CMakeLists.txt CMake: Improve config installation 2018-10-01 16:16:29 -04:00
config-amigaos.h
config-dos.h whitespace fixes 2018-09-23 22:24:02 +00:00
config-mac.h
config-os400.h
config-riscos.h
config-symbian.h
config-tpf.h
config-vxworks.h config: Remove unused SIZEOF_VOIDP 2018-10-24 11:20:57 +02:00
config-win32.h config_win32: enable LDAPS 2018-10-19 09:23:14 +02:00
config-win32ce.h
conncache.c cleanup: make local functions static 2019-02-10 18:38:57 +01:00
conncache.h conncache_unlock: avoid indirection by changing input argument type 2018-12-22 18:14:56 +01:00
connect.c cleanup: make local functions static 2019-02-10 18:38:57 +01:00
connect.h cleanup: make local functions static 2019-02-10 18:38:57 +01:00
content_encoding.c content_encoding: accept up to 4 unknown trailer bytes after raw deflate data 2018-07-12 22:46:15 +02:00
content_encoding.h
cookie.c cookie: fix comment typo (url_path_len -> uri_path_len) 2019-01-14 23:02:34 +01:00
cookie.h cookies: leave secure cookies alone 2018-12-13 09:57:58 +01:00
curl_addrinfo.c curl_addrinfo: use same #ifdef conditions in source as header 2018-06-01 14:40:35 +02:00
curl_addrinfo.h
curl_base64.h
curl_config.h.cmake config: Remove unused SIZEOF_VOIDP 2018-10-24 11:20:57 +02:00
curl_ctype.c URL: fix ASCII dependency in strcpy_url and strlen_url 2018-05-03 15:19:20 +02:00
curl_ctype.h URL: fix ASCII dependency in strcpy_url and strlen_url 2018-05-03 15:19:20 +02:00
curl_des.c
curl_des.h
curl_endian.c cleanup: make local functions static 2019-02-10 18:38:57 +01:00
curl_endian.h
curl_fnmatch.c fnmatch: disable if FTP is disabled 2019-02-12 07:50:39 +01:00
curl_fnmatch.h
curl_gethostname.c
curl_gethostname.h
curl_gssapi.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
curl_gssapi.h gssapi: fix deprecated header warnings 2019-02-14 08:38:43 +01:00
curl_hmac.h
curl_ldap.h whitespace fixes 2018-09-23 22:24:02 +00:00
curl_md4.h
curl_md5.h
curl_memory.h
curl_memrchr.c
curl_memrchr.h
curl_multibyte.c curl_multibyte: fix a malloc overcalculation 2018-11-06 03:11:05 -05:00
curl_multibyte.h
curl_ntlm_core.c cleanup: make local functions static 2019-02-10 18:38:57 +01:00
curl_ntlm_core.h
curl_ntlm_wb.c curl_ntlm_wb: check aprintf() return codes 2018-10-08 12:06:33 +02:00
curl_ntlm_wb.h
curl_path.c curl_path: only enabled for SSH builds 2019-02-12 07:50:39 +01:00
curl_path.h headers: end all headers with guard comment 2018-10-23 10:02:24 +02:00
curl_printf.h snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
curl_range.c
curl_range.h
curl_rtmp.c rtmp: fix for compiling with lwIP 2018-10-26 00:04:02 +02:00
curl_rtmp.h
curl_sasl.c urldata: rename easy_conn to just conn 2019-01-11 15:35:13 +01:00
curl_sasl.h
curl_sec.h
curl_setup_once.h whitespace fixes 2018-09-23 22:24:02 +00:00
curl_setup.h cleanup: make local functions static 2019-02-10 18:38:57 +01:00
curl_sha256.h
curl_sspi.c comment: Fix multiple typos in function parameters 2018-10-03 10:27:27 +02:00
curl_sspi.h
curl_threads.c curl_threads: fix classic MinGW compile break 2018-09-27 09:13:20 +02:00
curl_threads.h Windows: fixes for MinGW targeting Windows Vista 2018-10-09 08:33:45 +02:00
curlx.h snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
dict.c url: use the URL API internally as well 2018-09-22 11:58:10 +02:00
dict.h
doh.c printf: fix format specifiers 2019-01-04 23:50:48 +01:00
doh.h headers: end all headers with guard comment 2018-10-23 10:02:24 +02:00
dotdot.c Curl_dedotdotify(): always nul terminate returned string. 2018-09-24 07:48:41 +02:00
dotdot.h headers: end all headers with guard comment 2018-10-23 10:02:24 +02:00
easy.c urldata: rename easy_conn to just conn 2019-01-11 15:35:13 +01:00
easyif.h whitespace fixes 2018-09-23 22:24:02 +00:00
escape.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
escape.h whitespace fixes 2018-09-23 22:24:02 +00:00
file.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
file.h whitespace fixes 2018-09-23 22:24:02 +00:00
fileinfo.c ftplistparser: keep state between invokes 2018-04-24 14:23:20 +02:00
fileinfo.h ftplistparser: keep state between invokes 2018-04-24 14:23:20 +02:00
firefox-db2pem.sh whitespace fixes 2018-09-23 22:24:02 +00:00
formdata.c curl-compilers: enable -Wimplicit-fallthrough=4 for GCC 2018-08-21 18:53:45 +02:00
formdata.h
ftp.c pingpong: ignore regular timeout in disconnect phase 2018-12-17 12:33:00 +01:00
ftp.h url: use the URL API internally as well 2018-09-22 11:58:10 +02:00
ftplistparser.c ftp: avoid two unsigned int overflows in FTP listing parser 2018-11-09 23:08:46 +01:00
ftplistparser.h
getenv.c
getinfo.c urldata: rename easy_conn to just conn 2019-01-11 15:35:13 +01:00
getinfo.h
gopher.c gopher: fix memory leak from 9026083ddb 2018-12-13 15:06:17 +01:00
gopher.h
hash.c cppcheck: fix warnings 2018-06-11 11:14:48 +02:00
hash.h
hmac.c checksrc: make sure sizeof() is used *with* parentheses 2018-05-21 23:21:47 +02:00
hostasyn.c dns: release sharelock as soon as possible 2019-02-11 13:34:11 +01:00
hostcheck.c axtls: removed 2018-11-01 10:29:53 +01:00
hostcheck.h whitespace fixes 2018-09-23 22:24:02 +00:00
hostip4.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
hostip6.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
hostip.c Curl_resolv: fix a gcc -Werror=maybe-uninitialized warning 2019-02-12 19:19:55 +01:00
hostip.h cleanup: make local functions static 2019-02-10 18:38:57 +01:00
hostsyn.c
http2.c http2: multi_connchanged() moved from multi.c, only used for h2 2019-02-12 14:40:37 +01:00
http2.h cleanup: make local functions static 2019-02-10 18:38:57 +01:00
http_chunks.c ctype: restore character classification for non-ASCII platforms 2018-04-24 14:36:06 +02:00
http_chunks.h whitespace fixes 2018-09-23 22:24:02 +00:00
http_digest.c
http_digest.h
http_negotiate.c spnego_sspi: add support for channel binding 2019-02-01 09:56:27 +01:00
http_negotiate.h
http_ntlm.c spnego_sspi: add support for channel binding 2019-02-01 09:56:27 +01:00
http_ntlm.h
http_proxy.c urldata: rename easy_conn to just conn 2019-01-11 15:35:13 +01:00
http_proxy.h
http.c cleanup: make local functions static 2019-02-10 18:38:57 +01:00
http.h http: Implement trailing headers for chunked transfers 2018-12-14 10:10:48 +01:00
idn_win32.c
if2ip.c if2ip: remove unused function Curl_if_is_interface_name 2018-12-21 10:46:05 +01:00
if2ip.h if2ip: remove unused function Curl_if_is_interface_name 2018-12-21 10:46:05 +01:00
imap.c memcmp: avoid doing single char memcmp 2019-01-20 21:59:04 +01:00
imap.h imap: change from "FETCH" to "UID FETCH" 2018-09-06 10:57:48 +02:00
inet_ntop.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
inet_ntop.h whitespace fixes 2018-09-23 22:24:02 +00:00
inet_pton.c
inet_pton.h whitespace fixes 2018-09-23 22:24:02 +00:00
krb5.c sendf: use failf() rather than Curl_failf() 2018-09-13 10:48:21 +02:00
ldap.c ldap: fix LDAP URL parsing regressions 2018-12-11 13:20:12 +01:00
libcurl.plist
libcurl.rc (lib)curl.rc: fixup for minor bugs 2018-12-10 00:10:04 +01:00
libcurl.vers.in
llist.c
llist.h whitespace fixes 2018-09-23 22:24:02 +00:00
Makefile.am configure: rewrite --enable-code-coverage 2019-01-26 00:29:50 +01:00
makefile.amiga whitespace fixes 2018-09-23 22:24:02 +00:00
makefile.dj whitespace fixes 2018-09-23 22:24:02 +00:00
Makefile.inc axtls: removed 2018-11-01 10:29:53 +01:00
Makefile.m32 whitespace fixes 2018-09-23 22:24:02 +00:00
Makefile.netware openssl: Remove SSLEAY leftovers 2018-11-17 21:36:10 +01:00
Makefile.vxworks
Makefile.Watcom openssl: Remove SSLEAY leftovers 2018-11-17 21:36:10 +01:00
md4.c checksrc: add COPYRIGHTYEAR check 2018-12-03 23:13:40 +01:00
md5.c axtls: removed 2018-11-01 10:29:53 +01:00
memdebug.c memdebug: bring back curl_mark_sclose 2019-02-14 17:34:55 +01:00
memdebug.h getnameinfo: not used 2018-06-27 13:49:18 +02:00
mime.c mime: put the boundary buffer into the curl_mime struct 2019-02-12 22:55:32 +01:00
mime.h mime: put the boundary buffer into the curl_mime struct 2019-02-12 22:55:32 +01:00
mk-ca-bundle.pl mk-ca-bundle.pl: make -u delete certdata.txt if found not changed 2018-06-14 00:02:20 +02:00
mk-ca-bundle.vbs
mprintf.c mprintf: avoid unsigned integer overflow warning 2018-11-02 11:07:04 +01:00
multi.c multi: Dereference of null pointer 2019-02-13 08:06:35 +01:00
multihandle.h psl: use latest psl and refresh it periodically 2018-05-28 20:37:14 +02:00
multiif.h urldata: rename easy_conn to just conn 2019-01-11 15:35:13 +01:00
netrc.c netrc: don't ignore the login name specified with "--user" 2018-11-05 20:34:01 +01:00
netrc.h netrc: don't ignore the login name specified with "--user" 2018-11-05 20:34:01 +01:00
non-ascii.c non-ascii.c: fix typos in comments 2019-02-12 10:24:29 +01:00
non-ascii.h
nonblock.c nonblock: fix unused parameter warning 2018-10-14 21:07:45 +02:00
nonblock.h whitespace fixes 2018-09-23 22:24:02 +00:00
nwlib.c memory: ensure to check allocation results 2018-10-03 23:45:38 +02:00
nwos.c
openldap.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
parsedate.c
parsedate.h whitespace fixes 2018-09-23 22:24:02 +00:00
pingpong.c pingpong: ignore regular timeout in disconnect phase 2018-12-17 12:33:00 +01:00
pingpong.h pingpong: ignore regular timeout in disconnect phase 2018-12-17 12:33:00 +01:00
pipeline.c http2: several cleanups 2018-07-20 22:58:42 +02:00
pipeline.h
pop3.c memcmp: avoid doing single char memcmp 2019-01-20 21:59:04 +01:00
pop3.h
progress.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
progress.h whitespace fixes 2018-09-23 22:24:02 +00:00
psl.c psl: use latest psl and refresh it periodically 2018-05-28 20:37:14 +02:00
psl.h psl: use latest psl and refresh it periodically 2018-05-28 20:37:14 +02:00
rand.c rand: add comment to skip a clang-tidy false positive 2018-10-27 15:59:44 +02:00
rand.h
rtsp.c cleanup: make local functions static 2019-02-10 18:38:57 +01:00
rtsp.h whitespace fixes 2018-09-23 22:24:02 +00:00
security.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
select.c cppcheck: fix warnings 2018-06-11 11:14:48 +02:00
select.h whitespace fixes 2018-09-23 22:24:02 +00:00
sendf.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
sendf.h travis: add build for "configure --disable-verbose" 2018-10-18 14:51:49 +02:00
setopt.c cleanup: make local functions static 2019-02-10 18:38:57 +01:00
setopt.h
setup-os400.h
setup-vms.h
sha256.c http: fix for tiny "HTTP/0.9" response 2018-08-13 23:16:01 +02:00
share.c psl: use latest psl and refresh it periodically 2018-05-28 20:37:14 +02:00
share.h psl: use latest psl and refresh it periodically 2018-05-28 20:37:14 +02:00
sigpipe.h sigpipe: if mbedTLS is used, ignore SIGPIPE 2019-01-28 12:03:33 +01:00
slist.c whitespace fixes 2018-09-23 22:24:02 +00:00
slist.h whitespace fixes 2018-09-23 22:24:02 +00:00
smb.c smb: fix incorrect path in request if connection reused 2018-12-19 09:52:36 +01:00
smb.h smb: fix memory leak on early failure 2018-07-30 17:59:36 +02:00
smtp.c smtp: avoid risk of buffer overflow in strtol 2019-02-04 08:22:32 +01:00
smtp.h
sockaddr.h whitespace fixes 2018-09-23 22:24:02 +00:00
socks_gssapi.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
socks_sspi.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
socks.c whitespace fixes 2018-09-23 22:24:02 +00:00
socks.h whitespace fixes 2018-09-23 22:24:02 +00:00
speedcheck.c
speedcheck.h
splay.c whitespace fixes 2018-09-23 22:24:02 +00:00
splay.h
ssh-libssh.c libssh: do not let libssh create socket 2019-01-24 09:03:11 +01:00
ssh.c ssh: log the libssh2 error message when ssh session startup fails 2019-01-17 15:03:16 +01:00
ssh.h all: s/int/size_t cleanup 2018-09-01 10:40:42 +02:00
strcase.c
strcase.h Remove unused definitions 2018-08-21 18:53:43 +02:00
strdup.c Curl_saferealloc: Fixed typo in docblock 2018-09-21 14:24:55 +02:00
strdup.h
strerror.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
strerror.h
strtok.c
strtok.h
strtoofft.c
strtoofft.h
system_win32.c Silence GCC 8 cast-function-type warnings 2018-08-11 19:19:03 +02:00
system_win32.h
telnet.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
telnet.h whitespace fixes 2018-09-23 22:24:02 +00:00
tftp.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
tftp.h whitespace fixes 2018-09-23 22:24:02 +00:00
timeval.c timeval: Disable MSVC Analyzer GetTickCount warning 2019-01-28 01:16:00 -05:00
timeval.h printf: introduce CURL_FORMAT_TIMEDIFF_T 2019-01-04 23:51:13 +01:00
transfer.c transfer.c: do not compute length of undefined hex buffer. 2019-02-14 16:03:24 +01:00
transfer.h whitespace fixes 2018-09-23 22:24:02 +00:00
url.c connection_check: restore original conn->data after the check 2019-02-14 17:42:43 +01:00
url.h urldata: rename easy_conn to just conn 2019-01-11 15:35:13 +01:00
urlapi-int.h tests: add urlapi unittest 2018-12-11 15:02:24 +01:00
urlapi.c cleanup: make local functions static 2019-02-10 18:38:57 +01:00
urldata.h gssapi: fix deprecated header warnings 2019-02-14 08:38:43 +01:00
version.c snprintf: renamed and we now only use msnprintf() 2018-11-23 08:26:51 +01:00
warnless.c cleanup: make local functions static 2019-02-10 18:38:57 +01:00
warnless.h cleanup: make local functions static 2019-02-10 18:38:57 +01:00
wildcard.c ftplistparser: keep state between invokes 2018-04-24 14:23:20 +02:00
wildcard.h
x509asn1.c x509asn1: "Dereference of null pointer" 2019-02-14 14:54:01 +01:00
x509asn1.h