]> granicus.if.org Git - php/commitdiff
Fix #79078: Hypothetical use-after-free in curl_multi_add_handle()
authorChristoph M. Becker <cmbecker69@gmx.de>
Wed, 8 Jan 2020 10:52:24 +0000 (11:52 +0100)
committerChristoph M. Becker <cmbecker69@gmx.de>
Wed, 8 Jan 2020 17:29:10 +0000 (18:29 +0100)
To avoid this, we have to verify the handlers already in
`curl_multi_add_handle()`, not only in `curl_multi_exec()`.

NEWS
ext/curl/multi.c
ext/curl/tests/bug48203_multi.phpt

diff --git a/NEWS b/NEWS
index 2c2b7481a664b1b4a29596389f7ebcf43322aedc..b91211ce27465cac7ff134a60eb83b07e3c3a7f4 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,10 @@ PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? ????, PHP 7.3.15
 
+- CURL:
+  . Fixed bug #79078 (Hypothetical use-after-free in curl_multi_add_handle()).
+    (cmb)
+
 23 Jan 2020, PHP 7.3.14
 
 - Core
index d10a03f7419910d9312541476284c312939305c4..af31e28adf32b47faa0b3f2447f153def9fc419c 100644 (file)
@@ -92,6 +92,8 @@ PHP_FUNCTION(curl_multi_add_handle)
                RETURN_FALSE;
        }
 
+       _php_curl_verify_handlers(ch, 1);
+
        _php_curl_cleanup_handle(ch);
 
        GC_ADDREF(Z_RES_P(z_ch));
index 5f9e2ba6b212def577f910f5608cbf3a86e05807..3834b5bcd52d0aa81bb5d4fb1c51b9854f5cd502 100644 (file)
@@ -67,25 +67,25 @@ foreach($options_to_check as $option) {
 --CLEAN--
 <?php @unlink(dirname(__FILE__) . '/bug48203.tmp'); ?>
 --EXPECTF--
-Warning: curl_multi_exec(): CURLOPT_STDERR resource has gone away, resetting to stderr in %s on line %d
-
-Warning: curl_multi_exec(): CURLOPT_STDERR resource has gone away, resetting to stderr in %s on line %d
+Warning: curl_multi_add_handle(): CURLOPT_STDERR resource has gone away, resetting to stderr in %s on line %d
+%A
+Warning: curl_multi_add_handle(): CURLOPT_STDERR resource has gone away, resetting to stderr in %s on line %d
 %A
 Ok for CURLOPT_STDERR
 
-Warning: curl_multi_exec(): CURLOPT_WRITEHEADER resource has gone away, resetting to default in %s on line %d
+Warning: curl_multi_add_handle(): CURLOPT_WRITEHEADER resource has gone away, resetting to default in %s on line %d
 
-Warning: curl_multi_exec(): CURLOPT_WRITEHEADER resource has gone away, resetting to default in %s on line %d
+Warning: curl_multi_add_handle(): CURLOPT_WRITEHEADER resource has gone away, resetting to default in %s on line %d
 Ok for CURLOPT_WRITEHEADER
 
-Warning: curl_multi_exec(): CURLOPT_FILE resource has gone away, resetting to default in %s on line %d
+Warning: curl_multi_add_handle(): CURLOPT_FILE resource has gone away, resetting to default in %s on line %d
 
-Warning: curl_multi_exec(): CURLOPT_FILE resource has gone away, resetting to default in %s on line %d
+Warning: curl_multi_add_handle(): CURLOPT_FILE resource has gone away, resetting to default in %s on line %d
 Hello World!
 Hello World!Hello World!
 Hello World!Ok for CURLOPT_FILE
 
-Warning: curl_multi_exec(): CURLOPT_INFILE resource has gone away, resetting to default in %s on line %d
+Warning: curl_multi_add_handle(): CURLOPT_INFILE resource has gone away, resetting to default in %s on line %d
 
-Warning: curl_multi_exec(): CURLOPT_INFILE resource has gone away, resetting to default in %s on line %d
+Warning: curl_multi_add_handle(): CURLOPT_INFILE resource has gone away, resetting to default in %s on line %d
 Ok for CURLOPT_INFILE