reset the content length when the body was reset
authorMichael Wallner <mike@php.net>
Thu, 24 Apr 2014 09:01:27 +0000 (11:01 +0200)
committerMichael Wallner <mike@php.net>
Thu, 24 Apr 2014 09:01:27 +0000 (11:01 +0200)
php_http_message.c
tests/client014.phpt [new file with mode: 0644]

index 0ffdd9e5002572110231e9fd768554a332934af1..8c1f40ccbd077da096d6037d02a298a78014ceae 100644 (file)
@@ -300,6 +300,14 @@ void php_http_message_update_headers(php_http_message_t *msg)
                                zval_ptr_dtor(&h);
                        }
                }
+       } else if ((h = php_http_message_header(msg, ZEND_STRL("Content-Length"), 1))) {
+               zval *h_cpy = php_http_ztyp(IS_LONG, h);
+
+               zval_ptr_dtor(&h);
+               if (Z_LVAL_P(h_cpy)) {
+                       zend_hash_del(&msg->hdrs, "Content-Length", sizeof("Content-Length"));
+               }
+               zval_ptr_dtor(&h_cpy);
        }
 }
 
diff --git a/tests/client014.phpt b/tests/client014.phpt
new file mode 100644 (file)
index 0000000..d0ff471
--- /dev/null
@@ -0,0 +1,26 @@
+--TEST--
+reset content length when resetting body
+--SKIPIF--
+<?php 
+include "skipif.inc";
+?>
+--FILE--
+<?php 
+
+echo "Test\n";
+
+$client = new http\Client;
+$request = new http\Client\Request("PUT", "put.php");
+$request->setBody(new http\Message\Body(fopen(__FILE__, "r")));
+$client->enqueue($request);
+var_dump($request->getHeader("Content-Length"));
+$request->setBody(new http\Message\Body);
+$client->requeue($request);
+var_dump($request->getHeader("Content-Length"));
+?>
+===DONE===
+--EXPECTF--
+Test
+int(379)
+bool(false)
+===DONE===