From d926a12aeec96752456eddfbf9a04a002809a0d2 Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Wed, 1 Feb 2012 09:21:21 +0000 Subject: [PATCH] HTTP info test & fixes --- php_http_header_parser.c | 4 +-- php_http_info.c | 27 ++--------------- php_http_info.h | 2 -- tests/info_001.phpt | 65 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+), 29 deletions(-) create mode 100644 tests/info_001.phpt diff --git a/php_http_header_parser.c b/php_http_header_parser.c index 975df24..0dbaf84 100644 --- a/php_http_header_parser.c +++ b/php_http_header_parser.c @@ -120,8 +120,8 @@ PHP_HTTP_API STATUS php_http_header_parser_parse(php_http_header_parser_t *parse } case PHP_HTTP_HEADER_PARSER_STATE_KEY: { - const char *colon, *eol_str; - int eol_len; + const char *colon, *eol_str = NULL; + int eol_len = 0; if (buffer->data == (eol_str = php_http_locate_bin_eol(buffer->data, buffer->used, &eol_len))) { /* end of headers */ diff --git a/php_http_info.c b/php_http_info.c index 3bde791..cc015a8 100644 --- a/php_http_info.c +++ b/php_http_info.c @@ -12,29 +12,6 @@ #include "php_http_api.h" -PHP_HTTP_API void php_http_info_default_callback(void **nothing, HashTable **headers, php_http_info_t *info TSRMLS_DC) -{ - zval array; - (void) nothing; - - INIT_PZVAL_ARRAY(&array, *headers); - - switch (info->type) { - case PHP_HTTP_REQUEST: - add_assoc_string(&array, "Request Method", PHP_HTTP_INFO(info).request.method, 1); - add_assoc_string(&array, "Request Url", PHP_HTTP_INFO(info).request.url, 1); - break; - - case PHP_HTTP_RESPONSE: - add_assoc_long(&array, "Response Code", (long) PHP_HTTP_INFO(info).response.code); - add_assoc_string(&array, "Response Status", PHP_HTTP_INFO(info).response.status, 1); - break; - - case PHP_HTTP_NONE: - break; - } -} - PHP_HTTP_API php_http_info_t *php_http_info_init(php_http_info_t *i TSRMLS_DC) { if (!i) { @@ -134,7 +111,7 @@ PHP_HTTP_API php_http_info_t *php_http_info_parse(php_http_info_t *info, const c } /* is request */ - else if (!http[lenof("HTTP/1.x")] || http[lenof("HTTP/1.x")] == '\r' || http[lenof("HTTP/1.x")] == '\n') { + else if (*(http - 1) == ' ' && !http[lenof("HTTP/1.x")] || http[lenof("HTTP/1.x")] == '\r' || http[lenof("HTTP/1.x")] == '\n') { const char *url = strchr(pre_header, ' '); info->type = PHP_HTTP_REQUEST; @@ -145,7 +122,7 @@ PHP_HTTP_API php_http_info_t *php_http_info_parse(php_http_info_t *info, const c if (http > url) { PHP_HTTP_INFO(info).request.url = estrndup(url, http - url); } else { - efree(PHP_HTTP_INFO(info).request.method); + STR_SET(PHP_HTTP_INFO(info).request.method, NULL); return NULL; } } else { diff --git a/php_http_info.h b/php_http_info.h index ce65fd0..92a3f33 100644 --- a/php_http_info.h +++ b/php_http_info.h @@ -55,8 +55,6 @@ typedef struct php_http_info { typedef zend_bool (*php_http_info_callback_t)(void **callback_data, HashTable **headers, php_http_info_t *info TSRMLS_DC); -PHP_HTTP_API void php_http_info_default_callback(void **nothing, HashTable **headers, php_http_info_t *info TSRMLS_DC); - PHP_HTTP_API php_http_info_t *php_http_info_init(php_http_info_t *info TSRMLS_DC); PHP_HTTP_API php_http_info_t *php_http_info_parse(php_http_info_t *info, const char *pre_header TSRMLS_DC); PHP_HTTP_API void php_http_info_dtor(php_http_info_t *info); diff --git a/tests/info_001.phpt b/tests/info_001.phpt new file mode 100644 index 0000000..e79abd4 --- /dev/null +++ b/tests/info_001.phpt @@ -0,0 +1,65 @@ +--TEST-- +invalid HTTP info +--SKIPIF-- + +--FILE-- + +DONE +--EXPECTF-- +exception 'http\Exception' with message 'could not parse message: GET HTTP/1.1' in %s +Stack trace: +#0 %s: http\Message->__construct('GET HTTP/1.1') +#1 {main} +exception 'http\Exception' with message 'could not parse message: GET HTTP/1.123' in %s +Stack trace: +#0 %s: http\Message->__construct('GET HTTP/1.123') +#1 {main} +exception 'http\Exception' with message 'could not parse message: GETHTTP/1.1' in %s +Stack trace: +#0 %s: http\Message->__construct('GETHTTP/1.1') +#1 {main} +object(http\Message)#%d (10) { + ["errorHandling":protected]=> + NULL + ["type":protected]=> + int(1) + ["body":protected]=> + object(http\Message\Body)#%d (1) { + ["errorHandling":protected]=> + NULL + } + ["requestMethod":protected]=> + string(3) "GET" + ["requestUrl":protected]=> + string(1) "/" + ["responseStatus":protected]=> + string(0) "" + ["responseCode":protected]=> + int(0) + ["httpVersion":protected]=> + string(3) "1.1" + ["headers":protected]=> + array(0) { + } + ["parentMessage":protected]=> + NULL +} +DONE -- 2.30.2