X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_header.c;h=d4f2b510b311e69f3f2bde61fd6825f97ed81748;hp=709b85bb3cea22f528bd3b13bb2adaeaa77ec16e;hb=f00dec5b0217c81cf9d71d96103106fdaf2ab310;hpb=03f11ce599fa5a89148d588caf6ccec7f939e9d4 diff --git a/php_http_header.c b/php_http_header.c index 709b85b..d4f2b51 100644 --- a/php_http_header.c +++ b/php_http_header.c @@ -19,13 +19,13 @@ ZEND_RESULT_CODE php_http_header_parse(const char *header, size_t length, HashTa php_http_header_parser_state_t rs; if (!php_http_buffer_from_string_ex(&buf, header, length)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not allocate buffer"); + php_error_docref(NULL, E_WARNING, "Could not allocate buffer"); return FAILURE; } - if (!php_http_header_parser_init(&ctx TSRMLS_CC)) { + if (!php_http_header_parser_init(&ctx)) { php_http_buffer_dtor(&buf); - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not initialize header parser"); + php_error_docref(NULL, E_WARNING, "Could not initialize header parser"); return FAILURE; } @@ -33,15 +33,10 @@ ZEND_RESULT_CODE php_http_header_parse(const char *header, size_t length, HashTa php_http_header_parser_dtor(&ctx); php_http_buffer_dtor(&buf); - if (rs == PHP_HTTP_HEADER_PARSER_STATE_FAILURE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not parse headers"); - return FAILURE; - } - - return SUCCESS; + return rs == PHP_HTTP_HEADER_PARSER_STATE_FAILURE ? FAILURE : SUCCESS; } -void php_http_header_to_callback(HashTable *headers, zend_bool crlf, php_http_pass_format_callback_t cb, void *cb_arg TSRMLS_DC) +void php_http_header_to_callback(HashTable *headers, zend_bool crlf, php_http_pass_format_callback_t cb, void *cb_arg) { php_http_arrkey_t key; zval *header, *single_header; @@ -72,20 +67,20 @@ void php_http_header_to_callback(HashTable *headers, zend_bool crlf, php_http_pa } } ZEND_HASH_FOREACH_END(); - } - } else { - zend_string *zs = php_http_header_value_to_string(header); + } else { + zend_string *zs = php_http_header_value_to_string(header); - cb(cb_arg, crlf ? "%s: %s" PHP_HTTP_CRLF : "%s: %s", key.key->val, zs->val); - zend_string_release(zs); + cb(cb_arg, crlf ? "%s: %s" PHP_HTTP_CRLF : "%s: %s", key.key->val, zs->val); + zend_string_release(zs); + } } } ZEND_HASH_FOREACH_END(); } -void php_http_header_to_string(php_http_buffer_t *str, HashTable *headers TSRMLS_DC) +void php_http_header_to_string(php_http_buffer_t *str, HashTable *headers) { - php_http_header_to_callback(headers, 1, (php_http_pass_format_callback_t) php_http_buffer_appendf, str TSRMLS_CC); + php_http_header_to_callback(headers, 1, (php_http_pass_format_callback_t) php_http_buffer_appendf, str); } zend_string *php_http_header_value_array_to_string(zval *header) @@ -149,13 +144,14 @@ PHP_METHOD(HttpHeader, serialize) if (SUCCESS == zend_parse_parameters_none()) { php_http_buffer_t buf; zend_string *zs; + zval name_tmp, value_tmp; php_http_buffer_init(&buf); - zs = zval_get_string(zend_read_property(php_http_header_class_entry, getThis(), ZEND_STRL("name"), 0)); + zs = zval_get_string(zend_read_property(php_http_header_class_entry, getThis(), ZEND_STRL("name"), 0, &name_tmp)); php_http_buffer_appendz(&buf, zs); zend_string_release(zs); - zs = zval_get_string(zend_read_property(php_http_header_class_entry, getThis(), ZEND_STRL("value"), 0)); + zs = zval_get_string(zend_read_property(php_http_header_class_entry, getThis(), ZEND_STRL("value"), 0, &value_tmp)); if (zs->len) { php_http_buffer_appends(&buf, ": "); php_http_buffer_appendz(&buf, zs); @@ -177,7 +173,7 @@ PHP_METHOD(HttpHeader, unserialize) char *serialized_str; size_t serialized_len; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &serialized_str, &serialized_len)) { + if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "s", &serialized_str, &serialized_len)) { HashTable ht; zend_hash_init(&ht, 1, NULL, ZVAL_PTR_DTOR, 0); @@ -187,7 +183,7 @@ PHP_METHOD(HttpHeader, unserialize) zend_ulong idx; zend_hash_internal_pointer_reset(&ht); - switch (zend_hash_get_current_key_ex(&ht, &key, &idx, NULL)) { + switch (zend_hash_get_current_key(&ht, &key, &idx)) { case HASH_KEY_IS_STRING: zend_update_property_str(php_http_header_class_entry, getThis(), ZEND_STRL("name"), key); break; @@ -217,12 +213,13 @@ PHP_METHOD(HttpHeader, match) size_t val_len; zend_long flags = PHP_HTTP_MATCH_LOOSE; zend_string *zs; + zval value_tmp; if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS(), "|sl", &val_str, &val_len, &flags)) { return; } - zs = zval_get_string(zend_read_property(php_http_header_class_entry, getThis(), ZEND_STRL("value"), 0)); + zs = zval_get_string(zend_read_property(php_http_header_class_entry, getThis(), ZEND_STRL("value"), 0, &value_tmp)); RETVAL_BOOL(php_http_match(zs->val, val_str, flags)); zend_string_release(zs); } @@ -234,7 +231,7 @@ ZEND_END_ARG_INFO(); PHP_METHOD(HttpHeader, negotiate) { HashTable *supported, *rs; - zval *rs_array = NULL; + zval name_tmp, value_tmp, *rs_array = NULL; zend_string *zs; char *sep_str = NULL; size_t sep_len = 0; @@ -243,11 +240,12 @@ PHP_METHOD(HttpHeader, negotiate) return; } if (rs_array) { + ZVAL_DEREF(rs_array); zval_dtor(rs_array); array_init(rs_array); } - zs = zval_get_string(zend_read_property(php_http_header_class_entry, getThis(), ZEND_STRL("name"), 0)); + zs = zval_get_string(zend_read_property(php_http_header_class_entry, getThis(), ZEND_STRL("name"), 0, &name_tmp)); if (zend_string_equals_literal(zs, "Accept")) { sep_str = "/"; sep_len = 1; @@ -257,7 +255,7 @@ PHP_METHOD(HttpHeader, negotiate) } zend_string_release(zs); - zs = zval_get_string(zend_read_property(php_http_header_class_entry, getThis(), ZEND_STRL("value"), 0)); + zs = zval_get_string(zend_read_property(php_http_header_class_entry, getThis(), ZEND_STRL("value"), 0, &value_tmp)); if ((rs = php_http_negotiate(zs->val, zs->len, supported, sep_str, sep_len))) { PHP_HTTP_DO_NEGOTIATE_HANDLE_RESULT(rs, supported, rs_array); } else { @@ -274,14 +272,14 @@ ZEND_BEGIN_ARG_INFO_EX(ai_HttpHeader_getParams, 0, 0, 0) ZEND_END_ARG_INFO(); PHP_METHOD(HttpHeader, getParams) { - zval zctor, zparams_obj, *zargs = NULL; + zval value_tmp, zctor, zparams_obj, *zargs = NULL; ZVAL_STRINGL(&zctor, "__construct", lenof("__construct")); object_init_ex(&zparams_obj, php_http_params_class_entry); zargs = (zval *) ecalloc(ZEND_NUM_ARGS()+1, sizeof(zval)); - ZVAL_COPY_VALUE(&zargs[0], zend_read_property(php_http_header_class_entry, getThis(), ZEND_STRL("value"), 0)); + ZVAL_COPY_VALUE(&zargs[0], zend_read_property(php_http_header_class_entry, getThis(), ZEND_STRL("value"), 0, &value_tmp)); if (ZEND_NUM_ARGS()) { zend_get_parameters_array(ZEND_NUM_ARGS(), ZEND_NUM_ARGS(), &zargs[1]); } @@ -290,6 +288,7 @@ PHP_METHOD(HttpHeader, getParams) RETVAL_ZVAL(&zparams_obj, 0, 1); } + zval_ptr_dtor(&zctor); if (zargs) { efree(zargs); } @@ -312,7 +311,7 @@ PHP_METHOD(HttpHeader, parse) zval_dtor(return_value); RETURN_FALSE; } else { - if (ce && instanceof_function(ce, php_http_header_class_entry TSRMLS_CC)) { + if (ce && instanceof_function(ce, php_http_header_class_entry)) { php_http_arrkey_t key; zval *val;