X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=php_http_message_parser.c;h=e4eab11f94addea20d0f8ba1a69812ee641036b5;hb=49c4716aa5a97b2ae94491e74f5ff5c13c0ddee3;hp=fb5b26fde910562aef7da6fa1ebe5abb5de020da;hpb=d8beb35c8d7194ef1688cfd8dd6ed40ec8e31464;p=m6w6%2Fext-http diff --git a/php_http_message_parser.c b/php_http_message_parser.c index fb5b26f..e4eab11 100644 --- a/php_http_message_parser.c +++ b/php_http_message_parser.c @@ -250,13 +250,16 @@ php_http_message_parser_state_t php_http_message_parser_parse(php_http_message_p zval h, *h_loc = NULL, *h_con = NULL, *h_cl, *h_cr, *h_te, *h_ce; if ((h_te = php_http_message_header(*message, ZEND_STRL("Transfer-Encoding")))) { + Z_TRY_ADDREF_P(h_te); zend_hash_str_update(&(*message)->hdrs, "X-Original-Transfer-Encoding", lenof("X-Original-Transfer-Encoding"), h_te); zend_hash_str_del(&(*message)->hdrs, "Transfer-Encoding", lenof("Transfer-Encoding")); } if ((h_cl = php_http_message_header(*message, ZEND_STRL("Content-Length")))) { - zend_hash_str_update(&(*message)->hdrs, "X-Original-Content-Length", lenof("X-Original-Content-Length"), h_cl); + Z_TRY_ADDREF_P(h_cl); + h_cl = zend_hash_str_update(&(*message)->hdrs, "X-Original-Content-Length", lenof("X-Original-Content-Length"), h_cl); } if ((h_cr = php_http_message_header(*message, ZEND_STRL("Content-Range")))) { + Z_TRY_ADDREF_P(h_cr); zend_hash_str_update(&(*message)->hdrs, "X-Original-Content-Range", sizeof("X-Original-Content-Range"), h_cr); zend_hash_str_del(&(*message)->hdrs, "Content-Range", lenof("Content-Range")); } @@ -298,10 +301,9 @@ php_http_message_parser_state_t php_http_message_parser_parse(php_http_message_p } else { parser->inflate = php_http_encoding_stream_init(NULL, php_http_encoding_stream_get_inflate_ops(), 0); } + Z_TRY_ADDREF_P(h_ce); zend_hash_str_update(&(*message)->hdrs, "X-Original-Content-Encoding", lenof("X-Original-Content-Encoding"), h_ce); zend_hash_str_del(&(*message)->hdrs, "Content-Encoding", lenof("Content-Encoding")); - } else { - zval_ptr_dtor(h_ce); } } @@ -576,7 +578,9 @@ static PHP_METHOD(HttpMessageParser, parse) php_http_buffer_append(&parser_obj->buffer, data_str, data_len); RETVAL_LONG(php_http_message_parser_parse(parser_obj->parser, &parser_obj->buffer, flags, &parser_obj->parser->message)); + ZVAL_DEREF(zmsg); zval_dtor(zmsg); + ZVAL_NULL(zmsg); if (parser_obj->parser->message) { php_http_message_t *msg_cpy = php_http_message_copy(parser_obj->parser->message, NULL); php_http_message_object_t *msg_obj = php_http_message_object_new_ex(php_http_message_class_entry, msg_cpy); @@ -606,7 +610,9 @@ static PHP_METHOD(HttpMessageParser, stream) parser_obj = PHP_HTTP_OBJ(NULL, getThis()); RETVAL_LONG(php_http_message_parser_parse_stream(parser_obj->parser, &parser_obj->buffer, s, flags, &parser_obj->parser->message)); + ZVAL_DEREF(zmsg); zval_dtor(zmsg); + ZVAL_NULL(zmsg); if (parser_obj->parser->message) { php_http_message_t *msg_cpy = php_http_message_copy(parser_obj->parser->message, NULL); php_http_message_object_t *msg_obj = php_http_message_object_new_ex(php_http_message_class_entry, msg_cpy);