X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=php_http_env.c;h=af0039473eeb02e0e0b96da14857eabee55b3090;hb=c01b22de1d6070dcd589cf203de4f002e90eff55;hp=a2390b3284f08e88387f9742eadcec283a8f42bd;hpb=7b6175452cb0a9154da31dd571c1425951ec6547;p=m6w6%2Fext-http diff --git a/php_http_env.c b/php_http_env.c index a2390b3..af00394 100644 --- a/php_http_env.c +++ b/php_http_env.c @@ -33,16 +33,14 @@ PHP_RINIT_FUNCTION(http_env) zend_string *key_str; zend_ulong key_num; - if (HASH_KEY_IS_STRING == zend_hash_get_current_key_ex(¶ms, &key_str, &key_num, NULL)) { + if (HASH_KEY_IS_STRING == zend_hash_get_current_key(¶ms, &key_str, &key_num)) { 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); @@ -137,7 +138,7 @@ char *php_http_env_get_request_header(const char *name_str, size_t name_len, siz request_headers = PHP_HTTP_G->env.request.headers; } - if ((zvalue == zend_symtable_str_find(request_headers, key, name_len))) { + if ((zvalue = zend_symtable_str_find(request_headers, key, name_len))) { zend_string *zs = zval_get_string(zvalue); val = estrndup(zs->val, zs->len); @@ -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; + } } } @@ -526,7 +530,7 @@ ZEND_RESULT_CODE php_http_env_set_response_header_value(long http_code, const ch zval *data_ptr; HashTable *ht = HASH_OF(value); - ZEND_HASH_FOREACH_VAL(ht, data_ptr) + ZEND_HASH_FOREACH_VAL_IND(ht, data_ptr) { if (SUCCESS != php_http_env_set_response_header_value(http_code, name_str, name_len, data_ptr, first)) { return FAILURE; @@ -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) @@ -813,6 +817,7 @@ static PHP_METHOD(HttpEnv, negotiateLanguage) return; } if (rs_array) { + ZVAL_DEREF(rs_array); zval_dtor(rs_array); array_init(rs_array); } @@ -833,6 +838,7 @@ static PHP_METHOD(HttpEnv, negotiateCharset) return; } if (rs_array) { + ZVAL_DEREF(rs_array); zval_dtor(rs_array); array_init(rs_array); } @@ -852,6 +858,7 @@ static PHP_METHOD(HttpEnv, negotiateEncoding) return; } if (rs_array) { + ZVAL_DEREF(rs_array); zval_dtor(rs_array); array_init(rs_array); } @@ -871,6 +878,7 @@ static PHP_METHOD(HttpEnv, negotiateContentType) return; } if (rs_array) { + ZVAL_DEREF(rs_array); zval_dtor(rs_array); array_init(rs_array); } @@ -894,8 +902,8 @@ static PHP_METHOD(HttpEnv, negotiate) return; } - if (rs_array) { + ZVAL_DEREF(rs_array); zval_dtor(rs_array); array_init(rs_array); } @@ -944,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); }