add CURLINFO_RETRY_AFTER
[m6w6/ext-http] / src / php_http_header_parser.c
index b97ae6b62796b6e5e58f6ebb45f53fed4884eac7..6700c496865d62cb7f7bbc1d1d33455921cc55d7 100644 (file)
@@ -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)