aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2006-11-09 21:54:33 +0000
committerDaniel Stenberg <daniel@haxx.se>2006-11-09 21:54:33 +0000
commit624745ab20a7826e18f300cc19ef496f0224dad0 (patch)
tree50c0d387ade37f25fa30c7ceb013c4faaa9f1150
parent9354822e09ce11fce78a45a897fe2a184565a35e (diff)
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.
-rw-r--r--CHANGES4
-rw-r--r--RELEASE-NOTES4
-rw-r--r--lib/url.c5
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