Merge branch 'master' into phpng
[m6w6/ext-http] / php_http_cookie.c
index 1a7e6a37273bb2a045468fd7a2164988838388ec..9625401aecdec149fdcaff522bd9e5f1269054ca 100644 (file)
@@ -113,27 +113,26 @@ void php_http_cookie_list_add_extra(php_http_cookie_list_t *list, const char *na
 #define _KEY_IS(s) (key->key && key->key->len == sizeof(s)-1 && !strncasecmp(key->key->val, (s), key->key->len))
 static void add_entry(php_http_cookie_list_t *list, char **allowed_extras, long flags, zend_hash_key *key, zval *val)
 {
-       zval *arg = val;
+       zval arg;
 
-       Z_TRY_ADDREF_P(arg);
-       SEPARATE_ZVAL(arg);
-       convert_to_string(arg);
+       ZVAL_DUP(&arg, val);
+       convert_to_string(&arg);
 
        if (!(flags & PHP_HTTP_COOKIE_PARSE_RAW)) {
-               Z_STRLEN_P(arg) = php_raw_url_decode(Z_STRVAL_P(arg), Z_STRLEN_P(arg));
-               zend_string_forget_hash_val(Z_STR_P(arg));
+               Z_STRLEN(arg) = php_raw_url_decode(Z_STRVAL(arg), Z_STRLEN(arg));
+               zend_string_forget_hash_val(Z_STR(arg));
        }
 
        if _KEY_IS("path") {
-               PTR_SET(list->path, estrndup(Z_STRVAL_P(arg), Z_STRLEN_P(arg)));
+               PTR_SET(list->path, estrndup(Z_STRVAL(arg), Z_STRLEN(arg)));
        } else if _KEY_IS("domain") {
-               PTR_SET(list->domain, estrndup(Z_STRVAL_P(arg), Z_STRLEN_P(arg)));
+               PTR_SET(list->domain, estrndup(Z_STRVAL(arg), Z_STRLEN(arg)));
        } else if _KEY_IS("expires") {
-               char *date = estrndup(Z_STRVAL_P(arg), Z_STRLEN_P(arg));
+               char *date = estrndup(Z_STRVAL(arg), Z_STRLEN(arg));
                list->expires = php_parse_date(date, NULL);
                efree(date);
        } else if _KEY_IS("max-age") {
-               list->max_age = strtol(Z_STRVAL_P(arg), NULL, 10);
+               list->max_age = zval_get_long(val);
        } else if _KEY_IS("secure") {
                list->flags |= PHP_HTTP_COOKIE_SECURE;
        } else if _KEY_IS("httpOnly") {
@@ -148,7 +147,7 @@ static void add_entry(php_http_cookie_list_t *list, char **allowed_extras, long
                        char **ae = allowed_extras;
                        for (; *ae; ++ae) {
                                if (!strncasecmp(*ae, tmp.key->val, tmp.key->len)) {
-                                       zend_symtable_update(&list->extras, tmp.key, arg);
+                                       zend_symtable_update(&list->extras, tmp.key, &arg);
                                        php_http_arrkey_dtor(&tmp);
                                        return;
                                }
@@ -156,13 +155,13 @@ static void add_entry(php_http_cookie_list_t *list, char **allowed_extras, long
                }
 
                /* cookie */
-               zend_symtable_update(&list->cookies, key->key, arg);
+               zend_symtable_update(&list->cookies, tmp.key, &arg);
 
                php_http_arrkey_dtor(&tmp);
                return;
        }
 
-       zval_ptr_dtor(arg);
+       zval_ptr_dtor(&arg);
 }
 
 php_http_cookie_list_t *php_http_cookie_list_parse(php_http_cookie_list_t *list, const char *str, size_t len, long flags, char **allowed_extras)
@@ -188,9 +187,11 @@ php_http_cookie_list_t *php_http_cookie_list_parse(php_http_cookie_list_t *list,
                                add_entry(list, NULL, flags, &k, val);
                        }
                        if ((args = zend_hash_str_find(Z_ARRVAL_P(param), ZEND_STRL("arguments"))) && Z_TYPE_P(args) == IS_ARRAY) {
-                               ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(args), arg_k.h, arg_k.key, arg) {
+                               ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(args), arg_k.h, arg_k.key, arg)
+                               {
                                        add_entry(list, allowed_extras, flags, &arg_k, arg);
-                               } ZEND_HASH_FOREACH_END();
+                               }
+                               ZEND_HASH_FOREACH_END();
                        }
                }
        }
@@ -234,16 +235,16 @@ php_http_cookie_list_t *php_http_cookie_list_from_struct(php_http_cookie_list_t
        ht = HASH_OF(strct);
        list = php_http_cookie_list_init(list);
 
-       if ((tmp = zend_hash_str_find(ht, ZEND_STRL("cookies"))) && Z_TYPE_P(tmp) == IS_ARRAY){
+       if ((tmp = zend_hash_str_find_ind(ht, ZEND_STRL("cookies"))) && Z_TYPE_P(tmp) == IS_ARRAY){
                array_copy(Z_ARRVAL_P(tmp), &list->cookies);
        }
-       if ((tmp = zend_hash_str_find(ht, ZEND_STRL("extras"))) && Z_TYPE_P(tmp) == IS_ARRAY){
+       if ((tmp = zend_hash_str_find_ind(ht, ZEND_STRL("extras"))) && Z_TYPE_P(tmp) == IS_ARRAY){
                array_copy(Z_ARRVAL_P(tmp), &list->extras);
        }
-       if ((tmp = zend_hash_str_find(ht, ZEND_STRL("flags")))) {
+       if ((tmp = zend_hash_str_find_ind(ht, ZEND_STRL("flags")))) {
                list->flags = zval_get_long(tmp);
        }
-       if ((tmp = zend_hash_str_find(ht, ZEND_STRL("expires")))) {
+       if ((tmp = zend_hash_str_find_ind(ht, ZEND_STRL("expires")))) {
                if (Z_TYPE_P(tmp) == IS_LONG) {
                        list->expires = Z_LVAL_P(tmp);
                } else {
@@ -259,7 +260,7 @@ php_http_cookie_list_t *php_http_cookie_list_from_struct(php_http_cookie_list_t
                        zend_string_release(lstr);
                }
        }
-       if ((tmp = zend_hash_str_find(ht, ZEND_STRL("max-age")))) {
+       if ((tmp = zend_hash_str_find_ind(ht, ZEND_STRL("max-age")))) {
                if (Z_TYPE_P(tmp) == IS_LONG) {
                        list->max_age = Z_LVAL_P(tmp);
                } else {
@@ -273,13 +274,13 @@ php_http_cookie_list_t *php_http_cookie_list_from_struct(php_http_cookie_list_t
                        zend_string_release(lstr);
                }
        }
-       if ((tmp = zend_hash_str_find(ht, ZEND_STRL("path")))) {
+       if ((tmp = zend_hash_str_find_ind(ht, ZEND_STRL("path")))) {
                zend_string *str = zval_get_string(tmp);
 
                list->path = estrndup(str->val, str->len);
                zend_string_release(str);
        }
-       if ((tmp = zend_hash_str_find(ht, ZEND_STRL("domain")))) {
+       if ((tmp = zend_hash_str_find_ind(ht, ZEND_STRL("domain")))) {
                zend_string *str = zval_get_string(tmp);
 
                list->domain = estrndup(str->val, str->len);
@@ -381,7 +382,7 @@ php_http_cookie_object_t *php_http_cookie_object_new_ex(zend_class_entry *ce, ph
                ce = php_http_cookie_class_entry;
        }
 
-       o = ecalloc(sizeof(*o) + sizeof(zval) * (ce->default_properties_count - 1), 1);
+       o = ecalloc(1, sizeof(*o) + zend_object_properties_size(ce));
        zend_object_std_init(&o->zo, ce);
        object_properties_init(&o->zo, ce);
        o->zo.handlers = &php_http_cookie_object_handlers;
@@ -412,7 +413,7 @@ zend_object *php_http_cookie_object_clone(zval *obj)
        return &new_obj->zo;
 }
 
-void php_http_cookie_object_free(zend_object *object TSRMLS_DC)
+void php_http_cookie_object_free(zend_object *object)
 {
        php_http_cookie_object_t *obj = PHP_HTTP_OBJ(object, NULL);
 
@@ -531,7 +532,7 @@ static PHP_METHOD(HttpCookie, setCookies)
                array_copy_strings(cookies, &obj->list->cookies);
        }
 
-       RETURN_ZVAL_FAST(getThis());
+       RETURN_ZVAL(getThis(), 1, 0);
 }
 
 ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_addCookies, 0, 0, 1)
@@ -550,7 +551,7 @@ static PHP_METHOD(HttpCookie, addCookies)
 
        array_join(cookies, &obj->list->cookies, 1, ARRAY_JOIN_STRONLY|ARRAY_JOIN_STRINGIFY);
 
-       RETVAL_ZVAL_FAST(getThis());
+       RETVAL_ZVAL(getThis(), 1, 0);
 }
 
 ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_getExtras, 0, 0, 0)
@@ -590,7 +591,7 @@ static PHP_METHOD(HttpCookie, setExtras)
                array_copy_strings(extras, &obj->list->extras);
        }
 
-       RETVAL_ZVAL_FAST(getThis());
+       RETVAL_ZVAL(getThis(), 1, 0);
 }
 
 ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_addExtras, 0, 0, 1)
@@ -609,7 +610,7 @@ static PHP_METHOD(HttpCookie, addExtras)
 
        array_join(extras, &obj->list->extras, 1, ARRAY_JOIN_STRONLY|ARRAY_JOIN_STRINGIFY);
 
-       RETVAL_ZVAL_FAST(getThis());
+       RETVAL_ZVAL(getThis(), 1, 0);
 }
 
 ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_getCookie, 0, 0, 1)
@@ -631,7 +632,7 @@ static PHP_METHOD(HttpCookie, getCookie)
        PHP_HTTP_COOKIE_OBJECT_INIT(obj);
 
        if (php_http_cookie_list_get_cookie(obj->list, name_str, name_len, &zvalue)) {
-               RETURN_ZVAL_FAST(&zvalue);
+               RETURN_ZVAL(&zvalue, 1, 0);
        }
 }
 
@@ -657,7 +658,7 @@ static PHP_METHOD(HttpCookie, setCookie)
                php_http_cookie_list_add_cookie(obj->list, name_str, name_len, value_str, value_len);
        }
 
-       RETVAL_ZVAL_FAST(getThis());
+       RETVAL_ZVAL(getThis(), 1, 0);
 }
 
 ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_addCookie, 0, 0, 2)
@@ -678,7 +679,7 @@ static PHP_METHOD(HttpCookie, addCookie)
 
        php_http_cookie_list_add_cookie(obj->list, name_str, name_len, value_str, value_len);
 
-       RETVAL_ZVAL_FAST(getThis());
+       RETVAL_ZVAL(getThis(), 1, 0);
 }
 
 ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_getExtra, 0, 0, 1)
@@ -700,7 +701,7 @@ static PHP_METHOD(HttpCookie, getExtra)
        PHP_HTTP_COOKIE_OBJECT_INIT(obj);
 
        if (php_http_cookie_list_get_extra(obj->list, name_str, name_len, &zvalue)) {
-               RETURN_ZVAL_FAST(&zvalue);
+               RETURN_ZVAL(&zvalue, 1, 0);
        }
 }
 
@@ -726,7 +727,7 @@ static PHP_METHOD(HttpCookie, setExtra)
                php_http_cookie_list_add_extra(obj->list, name_str, name_len, value_str, value_len);
        }
 
-       RETVAL_ZVAL_FAST(getThis());
+       RETVAL_ZVAL(getThis(), 1, 0);
 }
 
 ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_addExtra, 0, 0, 2)
@@ -747,7 +748,7 @@ static PHP_METHOD(HttpCookie, addExtra)
 
        php_http_cookie_list_add_extra(obj->list, name_str, name_len, value_str, value_len);
 
-       RETVAL_ZVAL_FAST(getThis());
+       RETVAL_ZVAL(getThis(), 1, 0);
 }
 
 ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_getDomain, 0, 0, 0)
@@ -786,7 +787,7 @@ static PHP_METHOD(HttpCookie, setDomain)
 
        PTR_SET(obj->list->domain, domain_str ? estrndup(domain_str, domain_len) : NULL);
 
-       RETVAL_ZVAL_FAST(getThis());
+       RETVAL_ZVAL(getThis(), 1, 0);
 }
 
 ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_getPath, 0, 0, 0)
@@ -825,7 +826,7 @@ static PHP_METHOD(HttpCookie, setPath)
 
        PTR_SET(obj->list->path, path_str ? estrndup(path_str, path_len) : NULL);
 
-       RETVAL_ZVAL_FAST(getThis());
+       RETVAL_ZVAL(getThis(), 1, 0);
 }
 
 ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_getExpires, 0, 0, 0)
@@ -861,7 +862,7 @@ static PHP_METHOD(HttpCookie, setExpires)
 
        obj->list->expires = ts;
 
-       RETVAL_ZVAL_FAST(getThis());
+       RETVAL_ZVAL(getThis(), 1, 0);
 }
 
 ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_getMaxAge, 0, 0, 0)
@@ -897,7 +898,7 @@ static PHP_METHOD(HttpCookie, setMaxAge)
 
        obj->list->max_age = ma;
 
-       RETVAL_ZVAL_FAST(getThis());
+       RETVAL_ZVAL(getThis(), 1, 0);
 }
 
 ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_getFlags, 0, 0, 0)
@@ -925,7 +926,7 @@ static PHP_METHOD(HttpCookie, setFlags)
        long flags = 0;
        php_http_cookie_object_t *obj;
 
-       php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &flags), invalid_arg, return);
+       php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &flags), invalid_arg, return);
 
        obj = PHP_HTTP_OBJ(NULL, getThis());
 
@@ -933,7 +934,7 @@ static PHP_METHOD(HttpCookie, setFlags)
 
        obj->list->flags = flags;
 
-       RETVAL_ZVAL_FAST(getThis());
+       RETVAL_ZVAL(getThis(), 1, 0);
 }
 
 ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_toString, 0, 0, 0)
@@ -1023,9 +1024,9 @@ PHP_MINIT_FUNCTION(http_cookie)
        php_http_cookie_object_handlers.clone_obj = php_http_cookie_object_clone;
        php_http_cookie_object_handlers.free_obj = php_http_cookie_object_free;
 
-       zend_declare_class_constant_long(php_http_cookie_class_entry, ZEND_STRL("PARSE_RAW"), PHP_HTTP_COOKIE_PARSE_RAW TSRMLS_CC);
-       zend_declare_class_constant_long(php_http_cookie_class_entry, ZEND_STRL("SECURE"), PHP_HTTP_COOKIE_SECURE TSRMLS_CC);
-       zend_declare_class_constant_long(php_http_cookie_class_entry, ZEND_STRL("HTTPONLY"), PHP_HTTP_COOKIE_HTTPONLY TSRMLS_CC);
+       zend_declare_class_constant_long(php_http_cookie_class_entry, ZEND_STRL("PARSE_RAW"), PHP_HTTP_COOKIE_PARSE_RAW);
+       zend_declare_class_constant_long(php_http_cookie_class_entry, ZEND_STRL("SECURE"), PHP_HTTP_COOKIE_SECURE);
+       zend_declare_class_constant_long(php_http_cookie_class_entry, ZEND_STRL("HTTPONLY"), PHP_HTTP_COOKIE_HTTPONLY);
 
        return SUCCESS;
 }