X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=src%2Fphp_http_header_parser.c;h=6700c496865d62cb7f7bbc1d1d33455921cc55d7;hp=b97ae6b62796b6e5e58f6ebb45f53fed4884eac7;hb=640b762aa5a5fdf571e44f7a66725c097b7dc0f1;hpb=13662c61792685435496cd25c95ee1c1950cd9d7 diff --git a/src/php_http_header_parser.c b/src/php_http_header_parser.c index b97ae6b..6700c49 100644 --- a/src/php_http_header_parser.c +++ b/src/php_http_header_parser.c @@ -40,7 +40,13 @@ php_http_header_parser_t *php_http_header_parser_init(php_http_header_parser_t * return parser; } -#define php_http_header_parser_state_push(parser, state) zend_ptr_stack_push(&(parser)->stack, (void *) (state)), (state) +static inline php_http_header_parser_state_t +php_http_header_parser_state_push(php_http_header_parser_t *parser, php_http_header_parser_state_t state) +{ + zend_ptr_stack_push(&(parser)->stack, (void *) (state)); + return state; +} + #define php_http_header_parser_state_ex(parser) ((parser)->stack.top \ ? (php_http_header_parser_state_t) (parser)->stack.elements[(parser)->stack.top - 1] \ : PHP_HTTP_HEADER_PARSER_STATE_START) @@ -74,9 +80,14 @@ void php_http_header_parser_free(php_http_header_parser_t **parser) /* NOTE: 'str' has to be null terminated */ static void php_http_header_parser_error(size_t valid_len, char *str, size_t len, const char *eol_str ) { - zend_string *escaped_str = zend_string_init(str, len, 0); + zend_string *escaped_str, *zstr_str = zend_string_init(str, len, 0); - escaped_str = php_addcslashes(escaped_str, 1, ZEND_STRL("\x0..\x1F\x7F..\xFF")); +#if PHP_VERSION_ID < 70300 + escaped_str = php_addcslashes(zstr_str, 1, ZEND_STRL("\x0..\x1F\x7F..\xFF")); +#else + escaped_str = php_addcslashes(zstr_str, ZEND_STRL("\x0..\x1F\x7F..\xFF")); + zend_string_release_ex(zstr_str, 0); +#endif if (valid_len != len && (!eol_str || (str+valid_len) != eol_str)) { php_error_docref(NULL, E_WARNING, "Failed to parse headers: unexpected character '\\%03o' at pos %zu of '%s'", str[valid_len], valid_len, escaped_str->val); @@ -423,7 +434,7 @@ static zend_function_entry php_http_header_parser_methods[] = { PHP_ME(HttpHeaderParser, getState, ai_HttpHeaderParser_getState, ZEND_ACC_PUBLIC) PHP_ME(HttpHeaderParser, parse, ai_HttpHeaderParser_parse, ZEND_ACC_PUBLIC) PHP_ME(HttpHeaderParser, stream, ai_HttpHeaderParser_stream, ZEND_ACC_PUBLIC) - {NULL, NULL, NULL} + {0} }; PHP_MINIT_FUNCTION(http_header_parser)