diff -u ../pecl_http-1.6.2/http_cookie_api.c ./http_cookie_api.c --- ../pecl_http-1.6.2/http_cookie_api.c 2008-12-05 01:31:39.000000000 -0800 +++ ./http_cookie_api.c 2009-01-28 14:46:50.000000000 -0800 @@ -253,6 +253,7 @@ convert_to_long_ex(&cpy); list->flags = Z_LVAL_PP(tmp); if (cpy != *tmp) { + ZVAL_ADDREF(*tmp); zval_ptr_dtor(&cpy); } break; @@ -280,6 +281,7 @@ } } if (cpy != *tmp) { + ZVAL_ADDREF(*tmp); zval_ptr_dtor(&cpy); } break; diff -u ../pecl_http-1.6.2/http_filter_api.c ./http_filter_api.c --- ../pecl_http-1.6.2/http_filter_api.c 2008-12-05 01:31:39.000000000 -0800 +++ ./http_filter_api.c 2009-01-28 14:46:16.000000000 -0800 @@ -504,7 +504,10 @@ convert_to_long_ex(tmp); flags |= (Z_LVAL_PP(tmp) & 0x0fffffff); - if (orig != *tmp) zval_ptr_dtor(tmp); + if (orig != *tmp) { + ZVAL_ADDREF(orig); + zval_ptr_dtor(tmp); + } } } } diff -u ../pecl_http-1.6.2/http_headers_api.c ./http_headers_api.c --- ../pecl_http-1.6.2/http_headers_api.c 2008-12-05 01:31:39.000000000 -0800 +++ ./http_headers_api.c 2009-01-28 14:45:53.000000000 -0800 @@ -505,6 +505,7 @@ convert_to_string_ex(&zvalue); result = (match_case ? strcmp(Z_STRVAL_P(zvalue), value) : strcasecmp(Z_STRVAL_P(zvalue), value)) ? 0 : 1; if (zvalue != *data) { + ZVAL_ADDREF(*data); zval_ptr_dtor(&zvalue); } } diff -u ../pecl_http-1.6.2/http_message_object.c ./http_message_object.c --- ../pecl_http-1.6.2/http_message_object.c 2008-12-05 01:31:39.000000000 -0800 +++ ./http_message_object.c 2009-01-28 14:45:05.000000000 -0800 @@ -618,6 +618,7 @@ break; } if (cpy != value) { + ZVAL_ADDREF(value); zval_ptr_dtor(&cpy); } } diff -u ../pecl_http-1.6.2/http_request_api.c ./http_request_api.c --- ../pecl_http-1.6.2/http_request_api.c 2009-01-22 15:14:47.000000000 -0800 +++ ./http_request_api.c 2009-01-28 14:45:36.000000000 -0800 @@ -644,9 +644,11 @@ HTTP_CURL_OPT(CURLOPT_LOCALPORTRANGE, labs(Z_LVAL_P(prs_cpy)-Z_LVAL_P(pre_cpy))+1L); } if (prs_cpy != *prs) { + ZVAL_ADDREF(*prs); zval_ptr_dtor(&prs_cpy); } if (pre_cpy != *pre) { + ZVAL_ADDREF(*pre); zval_ptr_dtor(&pre_cpy); } } @@ -732,9 +734,11 @@ phpstr_appendf(&rs, "%ld-%ld,", Z_LVAL_P(rbl), Z_LVAL_P(rel)); } if (rbl != *rb) { + ZVAL_ADDREF(*rb); zval_ptr_dtor(&rbl); } if (rel != *re) { + ZVAL_ADDREF(*re); zval_ptr_dtor(&rel); } } @@ -832,6 +836,7 @@ convert_to_string_ex(&val); phpstr_appendf(&request->_cache.cookies, "%s=%s; ", cookie_key.str, Z_STRVAL_P(val)); if (val != *cookie_val) { + ZVAL_ADDREF(*cookie_val); zval_ptr_dtor(&val); } } diff -u ../pecl_http-1.6.2/http_request_body_api.c ./http_request_body_api.c --- ../pecl_http-1.6.2/http_request_body_api.c 2008-12-05 01:31:39.000000000 -0800 +++ ./http_request_body_api.c 2009-01-28 14:46:38.000000000 -0800 @@ -63,6 +63,7 @@ ); if (orig != *data) { + ZVAL_ADDREF(orig); zval_ptr_dtor(data); } @@ -110,10 +111,19 @@ CURLFORM_END ); - if (ofile != *file) zval_ptr_dtor(file); - if (otype != *type) zval_ptr_dtor(type); - if (oname != *name) zval_ptr_dtor(name); - + if (ofile != *file) { + ZVAL_ADDREF(ofile); + zval_ptr_dtor(file); + } + if (otype != *type) { + ZVAL_ADDREF(otype); + zval_ptr_dtor(type); + } + if (oname != *name) { + ZVAL_ADDREF(oname); + zval_ptr_dtor(name); + } + if (CURLE_OK != err) { http_error_ex(HE_WARNING, HTTP_E_ENCODING, "Could not encode post files: %s", curl_easy_strerror(err)); curl_formfree(http_post_data[0]); diff -u ../pecl_http-1.6.2/http_send_api.c ./http_send_api.c --- ../pecl_http-1.6.2/http_send_api.c 2008-12-05 01:31:39.000000000 -0800 +++ ./http_send_api.c 2009-01-28 14:46:07.000000000 -0800 @@ -212,6 +212,7 @@ convert_to_string_ex(data); http_send_header_ex(name, name_len, Z_STRVAL_PP(data), Z_STRLEN_PP(data), first, NULL); if (orig != *data) { + ZVAL_ADDREF(orig); zval_ptr_dtor(data); } first = 0; @@ -222,6 +223,7 @@ convert_to_string_ex(val); http_send_header_ex(name, name_len, Z_STRVAL_PP(val), Z_STRLEN_PP(val), replace, NULL); if (orig != *val) { + ZVAL_ADDREF(orig); zval_ptr_dtor(val); } } diff -u ../pecl_http-1.6.2/php_http_request_int.h ./php_http_request_int.h --- ../pecl_http-1.6.2/php_http_request_int.h 2008-12-05 01:31:39.000000000 -0800 +++ ./php_http_request_int.h 2009-01-28 14:53:22.000000000 -0800 @@ -47,6 +47,7 @@ } \ HTTP_CURL_OPT(optname, Z_STRVAL_P(copy)); \ if (copy_tmp) { \ + ZVAL_ADDREF(*param); \ zval_ptr_dtor(©_tmp); \ } \ continue; \ @@ -62,6 +63,7 @@ convert_to_long_ex(©); \ HTTP_CURL_OPT(optname, Z_LVAL_P(copy)); \ if (copy != *param) { \ + ZVAL_ADDREF(*param); \ zval_ptr_dtor(©); \ } \ continue; \