From 624745ab20a7826e18f300cc19ef496f0224dad0 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 9 Nov 2006 21:54:33 +0000 Subject: [PATCH] Dmitriy Sergeyev found a SIGSEGV with his test04.c example posted on 7 Nov 2006. It turned out we wrongly assumed that the connection cache was present when tearing down a connection. --- CHANGES | 4 ++++ RELEASE-NOTES | 4 +++- lib/url.c | 5 ++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 154de4b12..d026cca0b 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,10 @@ Changelog Daniel (9 November 2006) +- Dmitriy Sergeyev found a SIGSEGV with his test04.c example posted on 7 Nov + 2006. It turned out we wrongly assumed that the connection cache was present + when tearing down a connection. + - Ciprian Badescu found a SIGSEGV when doing multiple TFTP transfers using the multi interface, but I could also repeat it doing multiple sequential ones with the easy interface. Using Ciprian's test case, I could fix it. diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 68c4e9953..4e409be84 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -20,6 +20,8 @@ This release includes the following bugfixes: was not enabled o multiple TFTP transfers on the same (easy or multi) handle could cause a crash + o SIGSEGV when disconnecting on a transfer on a re-used handle when the + host name didn't resolve Other curl-related news: @@ -33,6 +35,6 @@ This release would not have looked like this without help, code, reports and advice from friends like these: James Housley, Olaf Stueben, Yang Tse, Gisle Vanem, Bradford Bruce, - Ciprian Badescu + Ciprian Badescu, Dmitriy Sergeyev Thanks! (and sorry if I forgot to mention someone) diff --git a/lib/url.c b/lib/url.c index c5ce746c0..cc3c87eb9 100644 --- a/lib/url.c +++ b/lib/url.c @@ -1804,7 +1804,10 @@ CURLcode Curl_disconnect(struct connectdata *conn) if(-1 != conn->connectindex) { /* unlink ourselves! */ infof(data, "Closing connection #%ld\n", conn->connectindex); - data->state.connc->connects[conn->connectindex] = NULL; + if(data->state.connc) + /* only clear the table entry if we still know in which cache we + used to be in */ + data->state.connc->connects[conn->connectindex] = NULL; } #ifdef USE_LIBIDN