X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=php_http_env.c;h=99ea0e00f4d8732c8ac7261e480d2d8c1f54b5f8;hb=c257c6b60913ad43e74d7b5937f5c9f8144d8907;hp=4c74966fb71eca4eea267c065ce5a51c614ab157;hpb=7cf7de66661e7e40a63c960f5df17fdeb362cb73;p=m6w6%2Fext-http diff --git a/php_http_env.c b/php_http_env.c index 4c74966..99ea0e0 100644 --- a/php_http_env.c +++ b/php_http_env.c @@ -37,12 +37,10 @@ PHP_RINIT_FUNCTION(http_env) sapi_post_entry *post_entry = NULL; if ((post_entry = zend_hash_find_ptr(&SG(known_post_content_types), key_str))) { - if (post_entry) { - SG(request_info).post_entry = post_entry; + SG(request_info).post_entry = post_entry; - if (post_entry->post_reader) { - post_entry->post_reader(); - } + if (post_entry->post_reader) { + post_entry->post_reader(); } if (sapi_module.default_post_reader) { @@ -53,9 +51,12 @@ PHP_RINIT_FUNCTION(http_env) /* * the rfc1867 handler is an awkward buddy + * FIXME: this leaks because php_auto_globals_create_files() + * as well as the rfc1867_handler call + * array_init(&PG(http_globals)[TRACK_VARS_FILES]) */ Z_TRY_ADDREF(PG(http_globals)[TRACK_VARS_FILES]); - zend_hash_str_update(&EG(symbol_table).ht, "_FILES", sizeof("_FILES"), &PG(http_globals)[TRACK_VARS_FILES]); + zend_hash_str_update(&EG(symbol_table).ht, "_FILES", lenof("_FILES"), &PG(http_globals)[TRACK_VARS_FILES]); } } zend_hash_destroy(¶ms); @@ -414,6 +415,9 @@ static void grab_header(void *data, void *arg) && !strncmp(header->header, args->name_str, args->name_len) ) { args->value_ptr = &header->header[args->name_len + 1]; + while (PHP_HTTP_IS_CTYPE(space, *args->value_ptr)) { + ++args->value_ptr; + } } } @@ -776,15 +780,15 @@ ZEND_END_ARG_INFO(); static PHP_METHOD(HttpEnv, setResponseHeader) { char *header_name_str; - int header_name_len; + size_t header_name_len; zval *header_value = NULL; - long code = 0; + zend_long code = 0; zend_bool replace_header = 1; if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS(), "s|z!lb", &header_name_str, &header_name_len, &header_value, &code, &replace_header)) { return; } - RETURN_BOOL(SUCCESS == php_http_env_set_response_header_value(code, header_name_str, header_name_len, header_value, replace_header TSRMLS_CC)); + RETURN_BOOL(SUCCESS == php_http_env_set_response_header_value(code, header_name_str, header_name_len, header_value, replace_header)); } ZEND_BEGIN_ARG_INFO_EX(ai_HttpEnv_setResponseCode, 0, 0, 1) @@ -948,14 +952,15 @@ static SAPI_POST_HANDLER_FUNC(php_http_json_post_handler) if (json) { if (json->len) { - zval zjson; + zval tmp; + + ZVAL_NULL(&tmp); + php_json_decode(&tmp, json->val, json->len, 1, PG(max_input_nesting_level)); - ZVAL_NULL(&zjson); - php_json_decode(&zjson, json->val, json->len, 1, PG(max_input_nesting_level)); - if (Z_TYPE(zjson) != IS_NULL) { - zval_dtor(zarg); - ZVAL_COPY_VALUE(zarg, (&zjson)); + if (Z_TYPE(tmp) == IS_ARRAY) { + array_copy(Z_ARRVAL(tmp), Z_ARRVAL_P(zarg)); } + zval_ptr_dtor(&tmp); } zend_string_release(json); }