X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=http_headers_api.c;h=09673e99a884d9f6c23a5a4dda075ca704535f21;hb=47c525716db7a03c84af5efc9953db3634084263;hp=b9fe7b15b7b582b6d7f98e2908cef91ec83e6282;hpb=ea4a01823cd060d527b8e23521b6848710f23f8c;p=m6w6%2Fext-http diff --git a/http_headers_api.c b/http_headers_api.c index b9fe7b1..09673e9 100644 --- a/http_headers_api.c +++ b/http_headers_api.c @@ -111,7 +111,7 @@ PHP_HTTP_API http_range_status _http_get_request_ranges(HashTable *ranges, size_ range = Z_STRVAL_P(zrange); if (strncmp(range, "bytes=", sizeof("bytes=") - 1)) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Range header misses bytes="); + http_error(E_NOTICE, HTTP_E_HEADER, "Range header misses bytes="); return RANGE_NO; } @@ -248,7 +248,8 @@ PHP_HTTP_API STATUS _http_parse_headers_ex(char *header, size_t header_len, Z_ARRVAL(array) = headers; - if (header_len < 2) { + if (header_len < 2 || !strchr(header, ':')) { + http_error(E_WARNING, HTTP_E_PARSE, "Cannot parse too short or malformed HTTP headers"); return FAILURE; } @@ -271,14 +272,14 @@ PHP_HTTP_API STATUS _http_parse_headers_ex(char *header, size_t header_len, Z_ARRVAL(array) = headers; } } else - + /* "header: value" pair */ if (colon) { /* skip empty key */ if (header != colon) { zval **previous = NULL; - char *value = empty_string; + char *value; int keylen = colon - header; char *key = estrndup(header, keylen); @@ -296,6 +297,7 @@ PHP_HTTP_API STATUS _http_parse_headers_ex(char *header, size_t header_len, if (value_len > 0) { value = estrndup(colon, value_len); } else { + value = estrdup(""); value_len = 0; } @@ -343,7 +345,7 @@ PHP_HTTP_API void _http_parse_headers_default_callback(void **cb_data, char *htt { zval array; Z_ARRVAL(array) = *headers; - + /* response */ if (!strncmp(http_line, "HTTP/1.", lenof("HTTP/1."))) { add_assoc_stringl(&array, "Response Status", http_line + lenof("HTTP/1.x "), line_length - lenof("HTTP/1.x \r\n"), 1); @@ -351,7 +353,7 @@ PHP_HTTP_API void _http_parse_headers_default_callback(void **cb_data, char *htt /* request */ if (!strncmp(http_line + line_length - lenof("HTTP/1.x\r\n"), "HTTP/1.", lenof("HTTP/1."))) { char *sep = strchr(http_line, ' '); - + add_assoc_stringl(&array, "Request Method", http_line, sep - http_line, 1); add_assoc_stringl(&array, "Request Uri", sep + 1, strstr(sep, "HTTP/1.") - sep + 1 + 1, 1); }