diff --git a/NEWS b/NEWS index 4c9bc776f51..5fd1ce39d55 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,9 @@ PHP NEWS . Fixed GH-18695 (zend_ast_export() - float number is not preserved). (Oleg Efimov) +- Curl: + . Fix memory leak when setting a list via curl_setopt fails. (nielsdos) + - Date: . Fix leaks with multiple calls to DatePeriod iterator current(). (nielsdos) diff --git a/ext/curl/interface.c b/ext/curl/interface.c index 4bf0c84c67a..3b13744abce 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -2166,12 +2166,14 @@ static zend_result _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue ZEND_HASH_FOREACH_VAL(ph, current) { ZVAL_DEREF(current); val = zval_get_tmp_string(current, &tmp_val); - slist = curl_slist_append(slist, ZSTR_VAL(val)); + struct curl_slist *new_slist = curl_slist_append(slist, ZSTR_VAL(val)); zend_tmp_string_release(tmp_val); - if (!slist) { + if (!new_slist) { + curl_slist_free_all(slist); php_error_docref(NULL, E_WARNING, "Could not build curl_slist"); return FAILURE; } + slist = new_slist; } ZEND_HASH_FOREACH_END(); if (slist) {