From 3a1a205f2a3a275713197d540f73ae8fc6b9619d Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Fri, 8 Nov 2024 18:47:49 +0100 Subject: [PATCH] Fix GH-16723: CURLMOPT_PUSHFUNCTION issues We copy the source handler's FCCs to those of the destination. We also fix the erroneous test assumption that the trampoline wouldn't be called. Closes GH-16732. --- NEWS | 3 +++ ext/curl/interface.c | 6 +++--- ext/curl/tests/curl_pushfunction_trampoline.phpt | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 86672aea04a..50248f5a7e2 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,9 @@ PHP NEWS - Calendar: . Fixed jdtogregorian overflow. (David Carlier) +- Curl: + . Fixed bug GH-16723 (CURLMOPT_PUSHFUNCTION issues). (cmb) + - PDO: . Fixed memory leak of `setFetchMode()`. (SakiTakamachi) diff --git a/ext/curl/interface.c b/ext/curl/interface.c index b75dce2e4c7..c7309b829f6 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -1284,13 +1284,13 @@ void _php_setup_easy_copy_handlers(php_curl *ch, php_curl *source) ch->handlers.read->res = source->handlers.read->res; if (ZEND_FCC_INITIALIZED(source->handlers.read->fcc)) { - zend_fcc_dup(&source->handlers.read->fcc, &source->handlers.read->fcc); + zend_fcc_dup(&ch->handlers.read->fcc, &source->handlers.read->fcc); } if (ZEND_FCC_INITIALIZED(source->handlers.write->fcc)) { - zend_fcc_dup(&source->handlers.write->fcc, &source->handlers.write->fcc); + zend_fcc_dup(&ch->handlers.write->fcc, &source->handlers.write->fcc); } if (ZEND_FCC_INITIALIZED(source->handlers.write_header->fcc)) { - zend_fcc_dup(&source->handlers.write_header->fcc, &source->handlers.write_header->fcc); + zend_fcc_dup(&ch->handlers.write_header->fcc, &source->handlers.write_header->fcc); } curl_easy_setopt(ch->cp, CURLOPT_ERRORBUFFER, ch->err.str); diff --git a/ext/curl/tests/curl_pushfunction_trampoline.phpt b/ext/curl/tests/curl_pushfunction_trampoline.phpt index 741f3fa6662..73a23097968 100644 --- a/ext/curl/tests/curl_pushfunction_trampoline.phpt +++ b/ext/curl/tests/curl_pushfunction_trampoline.phpt @@ -60,6 +60,7 @@ sort($responses); print_r($responses); ?> --EXPECT-- +Trampoline for trampoline Array ( [0] => main response