diff options
Diffstat (limited to 'net-misc/curl/files/curl-7.17.1-null-handler-segfault.patch')
-rw-r--r-- | net-misc/curl/files/curl-7.17.1-null-handler-segfault.patch | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/net-misc/curl/files/curl-7.17.1-null-handler-segfault.patch b/net-misc/curl/files/curl-7.17.1-null-handler-segfault.patch new file mode 100644 index 000000000000..0d3b766e9175 --- /dev/null +++ b/net-misc/curl/files/curl-7.17.1-null-handler-segfault.patch @@ -0,0 +1,69 @@ +Segfault in CURL (used from PHP) +Found by Robin H. Johnson <robbat2@gentoo.org> +This was because of an invalid URL: /hash/597cfbe5740d2bf91eb4b037e6750bacd76d3729/added + +#0 0x00002b33e61ba166 in Curl_disconnect (conn=0xe46210) at url.c:2077 +2077 if(conn->handler->disconnect) +(gdb) print conn->handler +$1 = (const struct Curl_handler *) 0x0 +(gdb) bt full +#0 0x00002b33e61ba166 in Curl_disconnect (conn=0xe46210) at url.c:2077 + data = (struct SessionHandle *) 0xe363d0 +#1 0x00002b33e61bc27e in Curl_connect (data=0xe363d0, in_connect=0x7fffc6067818, asyncp=0x7fffc6067827, protocol_done=0x7fffc6067826) at url.c:4255 + connected = false + code = CURLE_OK + dns = (struct Curl_dns_entry *) 0x0 +#2 0x00002b33e61c67db in Curl_perform (data=0xe363d0) at transfer.c:2333 + res = CURLE_OK + res2 = <value optimized out> + conn = (struct connectdata *) 0xe46210 + newurl = 0x0 + retry = 232 +#3 0x0000000000472005 in zif_curl_exec () +#4 0x000000000061bd42 in ?? () +#5 0x000000000061ae23 in execute () +#6 0x000000000061b815 in ?? () +#7 0x000000000061ae23 in execute () +#8 0x00000000005fcef3 in zend_execute_scripts () +#9 0x00000000005bd468 in php_execute_script () +#10 0x00000000006791ab in main () + +diff -Nuar curl-7.17.1-20071013.orig/lib/url.c curl-7.17.1-20071013/lib/url.c +--- curl-7.17.1-20071013.orig/lib/url.c 2007-10-13 02:00:02.000000000 +0000 ++++ curl-7.17.1-20071013/lib/url.c 2007-11-12 13:13:37.401514781 +0000 +@@ -2594,7 +2594,7 @@ + curl_socket_t *socks, + int numsocks) + { +- if(conn->handler->proto_getsock) ++ if(conn && conn->handler && conn->handler->proto_getsock) + return conn->handler->proto_getsock(conn, socks, numsocks); + return GETSOCK_BLANK; + } +@@ -4325,7 +4325,7 @@ + } + + /* this calls the protocol-specific function pointer previously set */ +- if(conn->handler->done) ++ if(conn->handler && conn->handler->done) + result = conn->handler->done(conn, status, premature); + else + result = CURLE_OK; +@@ -4378,7 +4378,7 @@ + conn->bits.done = FALSE; /* Curl_done() is not called yet */ + conn->bits.do_more = FALSE; /* by default there's no curl_do_more() to use */ + +- if(conn->handler->do_it) { ++ if(conn->handler && conn->handler->do_it) { + /* generic protocol-specific function pointer set in curl_connect() */ + result = conn->handler->do_it(conn, done); + +@@ -4441,7 +4441,7 @@ + { + CURLcode result=CURLE_OK; + +- if(conn->handler->do_more) ++ if(conn->handler && conn->handler->do_more) + result = conn->handler->do_more(conn); + + return result; |