diff --git a/ext/curl/interface.c b/ext/curl/interface.c index 3aeae5c575f82..31c150da06081 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -378,6 +378,28 @@ PHP_MINFO_FUNCTION(curl) } /* }}} */ +static void *zend_curl_malloc(size_t size) { + return emalloc(size); +} + +static void zend_curl_free(void *ptr) { + if (ptr) { + efree(ptr); + } +} + +static void *zend_curl_realloc(void *ptr, size_t size) { + return erealloc(ptr, size); +} + +static char *zend_curl_strdup(const char *s) { + return estrdup(s); +} + +static void *zend_curl_calloc(size_t nmemb, size_t size) { + return ecalloc(nmemb, size); +} + /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(curl) { @@ -403,7 +425,7 @@ PHP_MINIT_FUNCTION(curl) } #endif - if (curl_global_init(CURL_GLOBAL_DEFAULT) != CURLE_OK) { + if (curl_global_init_mem(CURL_GLOBAL_DEFAULT, zend_curl_malloc, zend_curl_free, zend_curl_realloc, zend_curl_strdup, zend_curl_calloc) != CURLE_OK) { return FAILURE; } diff --git a/ext/curl/tests/bug45161.phpt b/ext/curl/tests/bug45161.phpt index 7e67b6d741ed5..742c44f684401 100644 --- a/ext/curl/tests/bug45161.phpt +++ b/ext/curl/tests/bug45161.phpt @@ -25,11 +25,14 @@ for ($i = 0; $i < 100; $i++) { */ // Start actual test -$start = memory_get_usage() + 1024; for($i = 0; $i < 1024; $i++) { curl_setopt($ch, CURLOPT_URL, "{$host}/get.inc"); curl_setopt($ch, CURLOPT_FILE, $fp); curl_exec($ch); + + if ($i === 0) { + $start = memory_get_usage(); + } } if ($start < memory_get_usage()) { echo 'FAIL';