X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_env_request.c;h=0ee68f464ade730199dc260857d70c221072bc61;hp=6e2af5379c9ce415583dc561444484f1bf3ba58d;hb=d83a87724867f87e236c466df3dbb9a68c1670ba;hpb=7b6175452cb0a9154da31dd571c1425951ec6547 diff --git a/php_http_env_request.c b/php_http_env_request.c index 6e2af53..0ee68f4 100644 --- a/php_http_env_request.c +++ b/php_http_env_request.c @@ -33,15 +33,15 @@ static int grab_file(zval *tmp_name, int argc, va_list argv, zend_hash_key *key) array_init(&entry); - Z_ADDREF_P(tmp_name); + Z_TRY_ADDREF_P(tmp_name); add_assoc_zval_ex(&entry, ZEND_STRL("file"), tmp_name); - Z_ADDREF_P(zname); + Z_TRY_ADDREF_P(zname); add_assoc_zval_ex(&entry, ZEND_STRL("name"), zname); - Z_ADDREF_P(zsize); + Z_TRY_ADDREF_P(zsize); add_assoc_zval_ex(&entry, ZEND_STRL("size"), zsize); - Z_ADDREF_P(ztype); + Z_TRY_ADDREF_P(ztype); add_assoc_zval_ex(&entry, ZEND_STRL("type"), ztype); - Z_ADDREF_P(zerror); + Z_TRY_ADDREF_P(zerror); add_assoc_zval_ex(&entry, ZEND_STRL("error"), zerror); if (file_key->key && (array = zend_hash_find(Z_ARRVAL_P(zfiles), file_key->key))) { @@ -64,7 +64,7 @@ static int grab_file(zval *tmp_name, int argc, va_list argv, zend_hash_key *key) return ZEND_HASH_APPLY_KEEP; } -static int grab_files(zval *val TSRMLS_DC, int argc, va_list argv, zend_hash_key *key) +static int grab_files(zval *val, int argc, va_list argv, zend_hash_key *key) { zval *zfiles, *name, *tmp_name, *error, *type, *size; @@ -91,18 +91,18 @@ static int grab_files(zval *val TSRMLS_DC, int argc, va_list argv, zend_hash_key return ZEND_HASH_APPLY_STOP; } } else { - zval *tmp; + zval *tmp, entry; - SEPARATE_ZVAL(val); + ZVAL_DUP(&entry, val); if ((tmp = zend_hash_str_find(Z_ARRVAL_P(val), ZEND_STRL("tmp_name")))) { Z_ADDREF_P(tmp); - add_assoc_zval_ex(val, ZEND_STRL("file"), tmp); - zend_hash_str_del(Z_ARRVAL_P(val), ZEND_STRL("tmp_name")); + add_assoc_zval_ex(&entry, ZEND_STRL("file"), tmp); + zend_hash_str_del(Z_ARRVAL(entry), ZEND_STRL("tmp_name")); } if (key->key) { - zend_hash_update(Z_ARRVAL_P(zfiles), key->key, val); + zend_hash_update(Z_ARRVAL_P(zfiles), key->key, &entry); } else { - zend_hash_index_update(Z_ARRVAL_P(zfiles), key->h, val); + zend_hash_index_update(Z_ARRVAL_P(zfiles), key->h, &entry); } } } @@ -164,15 +164,16 @@ static PHP_METHOD(HttpEnvRequest, __construct) zend_fcall_info_cache fcc; \ zval rv, mn, *args = ecalloc(sizeof(zval), ZEND_NUM_ARGS()); \ zval *this_ptr = getThis(); \ - zval *qs = zend_read_property(Z_OBJCE_P(this_ptr), this_ptr, ZEND_STRL(prop), 0); \ + zval qs_tmp, *qs = zend_read_property(Z_OBJCE_P(this_ptr), this_ptr, ZEND_STRL(prop), 0, &qs_tmp); \ \ + ZVAL_NULL(&rv); \ array_init(&mn); \ Z_TRY_ADDREF_P(qs); \ add_next_index_zval(&mn, qs); \ add_next_index_stringl(&mn, ZEND_STRL("get")); \ zend_fcall_info_init(&mn, 0, &fci, &fcc, NULL, NULL); \ zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args); \ - zend_fcall_info_argp(&fci TSRMLS_CC, ZEND_NUM_ARGS(), args); \ + zend_fcall_info_argp(&fci, ZEND_NUM_ARGS(), args); \ zend_fcall_info_call(&fci, &fcc, &rv, NULL); \ zend_fcall_info_args_clear(&fci, 1); \ efree(args); \ @@ -191,8 +192,8 @@ static PHP_METHOD(HttpEnvRequest, getForm) if (ZEND_NUM_ARGS()) { call_querystring_get("form"); } else { - zval *zform = zend_read_property(php_http_env_request_class_entry, getThis(), ZEND_STRL("form"), 0); - RETURN_ZVAL_FAST(zform); + zval zform_tmp, *zform = zend_read_property(php_http_env_request_class_entry, getThis(), ZEND_STRL("form"), 0, &zform_tmp); + RETURN_ZVAL(zform, 1, 0); } } @@ -207,8 +208,8 @@ static PHP_METHOD(HttpEnvRequest, getQuery) if (ZEND_NUM_ARGS()) { call_querystring_get("query"); } else { - zval *zquery = zend_read_property(php_http_env_request_class_entry, getThis(), ZEND_STRL("query"), 0); - RETURN_ZVAL_FAST(zquery); + zval zquery_tmp, *zquery = zend_read_property(php_http_env_request_class_entry, getThis(), ZEND_STRL("query"), 0, &zquery_tmp); + RETURN_ZVAL(zquery, 1, 0); } } @@ -223,8 +224,8 @@ static PHP_METHOD(HttpEnvRequest, getCookie) if (ZEND_NUM_ARGS()) { call_querystring_get("cookie"); } else { - zval *zcookie = zend_read_property(php_http_env_request_class_entry, getThis(), ZEND_STRL("cookie"), 0); - RETURN_ZVAL_FAST(zcookie); + zval zcookie_tmp, *zcookie = zend_read_property(php_http_env_request_class_entry, getThis(), ZEND_STRL("cookie"), 0, &zcookie_tmp); + RETURN_ZVAL(zcookie, 1, 0); } } @@ -233,8 +234,8 @@ ZEND_END_ARG_INFO(); static PHP_METHOD(HttpEnvRequest, getFiles) { if (SUCCESS == zend_parse_parameters_none()) { - zval *zfiles = zend_read_property(php_http_env_request_class_entry, getThis(), ZEND_STRL("files"), 0); - RETURN_ZVAL_FAST(zfiles); + zval zfiles_tmp, *zfiles = zend_read_property(php_http_env_request_class_entry, getThis(), ZEND_STRL("files"), 0, &zfiles_tmp); + RETURN_ZVAL(zfiles, 1, 0); } }