From 9748cdee0eef4cf592a55934b8888f6cb05516ae Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Mon, 10 Oct 2005 07:14:53 +0000 Subject: [PATCH] - don't trap into any other transfer encoding than chunked --- http_message_api.c | 38 +++++++++++++++++------------------ tests/parse_message_002.phpt | 39 ++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 20 deletions(-) create mode 100644 tests/parse_message_002.phpt diff --git a/http_message_api.c b/http_message_api.c index 36b3098..be4d0c3 100644 --- a/http_message_api.c +++ b/http_message_api.c @@ -151,26 +151,24 @@ PHP_HTTP_API http_message *_http_message_parse_ex(http_message *msg, const char const char *continue_at = NULL; /* message has chunked transfer encoding */ - if (c = http_message_header(msg, "Transfer-Encoding")) { - if (!strcasecmp("chunked", Z_STRVAL_P(c))) { - char *decoded; - size_t decoded_len; - - /* decode and replace Transfer-Encoding with Content-Length header */ - if (continue_at = http_chunked_decode(body, message + message_length - body, &decoded, &decoded_len)) { - phpstr_from_string_ex(PHPSTR(msg), decoded, decoded_len); - efree(decoded); - { - zval *len; - char *tmp; - - spprintf(&tmp, 0, "%lu", (ulong) decoded_len); - MAKE_STD_ZVAL(len); - ZVAL_STRING(len, tmp, 0); - - zend_hash_del(&msg->hdrs, "Transfer-Encoding", sizeof("Transfer-Encoding")); - zend_hash_add(&msg->hdrs, "Content-Length", sizeof("Content-Length"), (void *) &len, sizeof(zval *), NULL); - } + if ((c = http_message_header(msg, "Transfer-Encoding")) && (!strcasecmp("chunked", Z_STRVAL_P(c)))) { + char *decoded; + size_t decoded_len; + + /* decode and replace Transfer-Encoding with Content-Length header */ + if (continue_at = http_chunked_decode(body, message + message_length - body, &decoded, &decoded_len)) { + phpstr_from_string_ex(PHPSTR(msg), decoded, decoded_len); + efree(decoded); + { + zval *len; + char *tmp; + + spprintf(&tmp, 0, "%lu", (ulong) decoded_len); + MAKE_STD_ZVAL(len); + ZVAL_STRING(len, tmp, 0); + + zend_hash_del(&msg->hdrs, "Transfer-Encoding", sizeof("Transfer-Encoding")); + zend_hash_add(&msg->hdrs, "Content-Length", sizeof("Content-Length"), (void *) &len, sizeof(zval *), NULL); } } } else diff --git a/tests/parse_message_002.phpt b/tests/parse_message_002.phpt new file mode 100644 index 0000000..d82aac9 --- /dev/null +++ b/tests/parse_message_002.phpt @@ -0,0 +1,39 @@ +--TEST-- +identity encoding trap +--SKIPIF-- + +--FILE-- + 2 + [httpVersion] => 1.1 + [responseCode] => 200 + [responseStatus] => Ok + [headers] => Array + ( + [Transfer-Encoding] => identity + [Content-Length] => 3 + [Content-Type] => text/plain + ) + + [body] => Hi! + [parentMessage] => +) +Done -- 2.30.2