followup on #44
[m6w6/ext-http] / src / php_http_client_curl.c
index e9fa1126e5c6cd72822002d15d64c5582657fab5..423e12e3c6214c3e5f034e8b5e4c5e375f7dbc4a 100644 (file)
@@ -198,14 +198,10 @@ static php_resource_factory_ops_t php_http_curlm_resource_factory_ops = {
 
 static size_t php_http_curle_read_callback(void *data, size_t len, size_t n, void *ctx)
 {
-       php_http_message_body_t *body = ctx;
+       php_stream *s = php_http_message_body_stream(ctx);
 
-       if (body && body->res) {
-               php_stream *s = php_http_message_body_stream(body);
-
-               if (s) {
-                       return php_stream_read(s, data, len * n);
-               } else abort();
+       if (s) {
+               return php_stream_read(s, data, len * n);
        }
        return 0;
 }
@@ -629,7 +625,7 @@ static php_http_message_t *php_http_curlm_responseparser(php_http_client_curl_ha
 {
        php_http_message_t *response;
        php_http_header_parser_t parser;
-       zval *zh;
+       zval *zh, tmp;
 
        response = php_http_message_init(NULL, 0, h->response.body);
        php_http_header_parser_init(&parser);
@@ -658,23 +654,23 @@ static php_http_message_t *php_http_curlm_responseparser(php_http_client_curl_ha
 
        /* let's update the response headers */
        if ((zh = php_http_message_header(response, ZEND_STRL("Content-Length")))) {
-               Z_TRY_ADDREF_P(zh);
-               zend_hash_str_update(&response->hdrs, "X-Original-Content-Length", lenof("X-Original-Content-Length"), zh);
+               ZVAL_COPY(&tmp, zh);
+               zend_hash_str_update(&response->hdrs, "X-Original-Content-Length", lenof("X-Original-Content-Length"), &tmp);
        }
        if ((zh = php_http_message_header(response, ZEND_STRL("Transfer-Encoding")))) {
-               Z_TRY_ADDREF_P(zh);
-               zend_hash_str_update(&response->hdrs, "X-Original-Transfer-Encoding", lenof("X-Original-Transfer-Encoding"), zh);
+               ZVAL_COPY(&tmp, zh);
                zend_hash_str_del(&response->hdrs, "Transfer-Encoding", lenof("Transfer-Encoding"));
+               zend_hash_str_update(&response->hdrs, "X-Original-Transfer-Encoding", lenof("X-Original-Transfer-Encoding"), &tmp);
        }
        if ((zh = php_http_message_header(response, ZEND_STRL("Content-Range")))) {
-               Z_TRY_ADDREF_P(zh);
-               zend_hash_str_update(&response->hdrs, "X-Original-Content-Range", lenof("X-Original-Content-Range"), zh);
+               ZVAL_COPY(&tmp, zh);
                zend_hash_str_del(&response->hdrs, "Content-Range", lenof("Content-Range"));
+               zend_hash_str_update(&response->hdrs, "X-Original-Content-Range", lenof("X-Original-Content-Range"), &tmp);
        }
        if ((zh = php_http_message_header(response, ZEND_STRL("Content-Encoding")))) {
-               Z_TRY_ADDREF_P(zh);
-               zend_hash_str_update(&response->hdrs, "X-Original-Content-Encoding", lenof("X-Original-Content-Encoding"), zh);
+               ZVAL_COPY(&tmp, zh);
                zend_hash_str_del(&response->hdrs, "Content-Encoding", lenof("Content-Encoding"));
+               zend_hash_str_update(&response->hdrs, "X-Original-Content-Encoding", lenof("X-Original-Content-Encoding"), &tmp);
        }
        php_http_message_update_headers(response);