Skip to content

Commit 0dda4a8

Browse files
committed
Fix #79078: Hypothetical use-after-free in curl_multi_add_handle()
To avoid this, we have to verify the handlers already in `curl_multi_add_handle()`, not only in `curl_multi_exec()`.
1 parent 38c0a53 commit 0dda4a8

File tree

3 files changed

+15
-9
lines changed

3 files changed

+15
-9
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33
?? ??? ????, PHP 7.3.15
44

5+
- CURL:
6+
. Fixed bug #79078 (Hypothetical use-after-free in curl_multi_add_handle()).
7+
(cmb)
8+
59
23 Jan 2020, PHP 7.3.14
610

711
- Core

ext/curl/multi.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ PHP_FUNCTION(curl_multi_add_handle)
9292
RETURN_FALSE;
9393
}
9494

95+
_php_curl_verify_handlers(ch, 1);
96+
9597
_php_curl_cleanup_handle(ch);
9698

9799
GC_ADDREF(Z_RES_P(z_ch));

ext/curl/tests/bug48203_multi.phpt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,25 +67,25 @@ foreach($options_to_check as $option) {
6767
--CLEAN--
6868
<?php @unlink(dirname(__FILE__) . '/bug48203.tmp'); ?>
6969
--EXPECTF--
70-
Warning: curl_multi_exec(): CURLOPT_STDERR resource has gone away, resetting to stderr in %s on line %d
71-
72-
Warning: curl_multi_exec(): CURLOPT_STDERR resource has gone away, resetting to stderr in %s on line %d
70+
Warning: curl_multi_add_handle(): CURLOPT_STDERR resource has gone away, resetting to stderr in %s on line %d
71+
%A
72+
Warning: curl_multi_add_handle(): CURLOPT_STDERR resource has gone away, resetting to stderr in %s on line %d
7373
%A
7474
Ok for CURLOPT_STDERR
7575

76-
Warning: curl_multi_exec(): CURLOPT_WRITEHEADER resource has gone away, resetting to default in %s on line %d
76+
Warning: curl_multi_add_handle(): CURLOPT_WRITEHEADER resource has gone away, resetting to default in %s on line %d
7777

78-
Warning: curl_multi_exec(): CURLOPT_WRITEHEADER resource has gone away, resetting to default in %s on line %d
78+
Warning: curl_multi_add_handle(): CURLOPT_WRITEHEADER resource has gone away, resetting to default in %s on line %d
7979
Ok for CURLOPT_WRITEHEADER
8080

81-
Warning: curl_multi_exec(): CURLOPT_FILE resource has gone away, resetting to default in %s on line %d
81+
Warning: curl_multi_add_handle(): CURLOPT_FILE resource has gone away, resetting to default in %s on line %d
8282

83-
Warning: curl_multi_exec(): CURLOPT_FILE resource has gone away, resetting to default in %s on line %d
83+
Warning: curl_multi_add_handle(): CURLOPT_FILE resource has gone away, resetting to default in %s on line %d
8484
Hello World!
8585
Hello World!Hello World!
8686
Hello World!Ok for CURLOPT_FILE
8787

88-
Warning: curl_multi_exec(): CURLOPT_INFILE resource has gone away, resetting to default in %s on line %d
88+
Warning: curl_multi_add_handle(): CURLOPT_INFILE resource has gone away, resetting to default in %s on line %d
8989

90-
Warning: curl_multi_exec(): CURLOPT_INFILE resource has gone away, resetting to default in %s on line %d
90+
Warning: curl_multi_add_handle(): CURLOPT_INFILE resource has gone away, resetting to default in %s on line %d
9191
Ok for CURLOPT_INFILE

0 commit comments

Comments
 (0)