X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=php_http_cookie.c;h=5b78abbe0dd161d9595839f14d88bbff065b47f8;hb=729594cae203b09419d195ec0dabde0430c9f1cd;hp=ef0947ea597d224863d1c4cd09edba79414fb377;hpb=bd80b17b026a00a254ee8693cd7bacf1ebdec4cf;p=m6w6%2Fext-http diff --git a/php_http_cookie.c b/php_http_cookie.c index ef0947e..5b78abb 100644 --- a/php_http_cookie.c +++ b/php_http_cookie.c @@ -136,22 +136,15 @@ static void add_entry(php_http_cookie_list_t *list, char **allowed_extras, long } else if _KEY_IS("httpOnly") { list->flags |= PHP_HTTP_COOKIE_HTTPONLY; } else { - char buf[0x20], *key_str; - int key_len; + char buf[0x20]; - if (key->type == HASH_KEY_IS_LONG) { - key_len = slprintf(buf, sizeof(buf) - 1, "%ld", key->num) + 1; - key_str = &buf[0]; - } else { - key_len = key->len; - key_str = key->str; - } + php_http_array_hashkey_stringify(key); /* check for extra */ if (allowed_extras) { char **ae = allowed_extras; for (; *ae; ++ae) { - if (!strncasecmp(key_str, *ae, key_len)) { + if (!strncasecmp(key->str, *ae, key->len)) { if (key->type == HASH_KEY_IS_LONG) { zend_hash_index_update(&list->extras, key->num, (void *) &arg, sizeof(zval *), NULL); } else { @@ -161,6 +154,7 @@ static void add_entry(php_http_cookie_list_t *list, char **allowed_extras, long } } } + php_http_array_hashkey_stringfree(key); /* cookie */ if (key->type == HASH_KEY_IS_LONG) { @@ -308,15 +302,11 @@ PHP_HTTP_API void php_http_cookie_list_to_string(php_http_cookie_list_t *list, c FOREACH_HASH_KEYVAL(pos, &list->cookies, key, val) { zval *tmp = php_http_ztyp(IS_STRING, *val); - if (key.type == HASH_KEY_IS_STRING && key.len) { - append_encoded(&buf, key.str, key.len-1, Z_STRVAL_P(tmp), Z_STRLEN_P(tmp)); - } else if (key.type == HASH_KEY_IS_LONG) { - int enc_len; - char *enc_str = php_raw_url_encode(Z_STRVAL_P(tmp), Z_STRLEN_P(tmp), &enc_len); - php_http_buffer_appendf(&buf, "%ld=%.*s; ", key.num, enc_len, enc_str); - efree(enc_str); - } + php_http_array_hashkey_stringify(&key); + append_encoded(&buf, key.str, key.len-1, Z_STRVAL_P(tmp), Z_STRLEN_P(tmp)); + php_http_array_hashkey_stringfree(&key); + zval_ptr_dtor(&tmp); } @@ -334,15 +324,11 @@ PHP_HTTP_API void php_http_cookie_list_to_string(php_http_cookie_list_t *list, c FOREACH_HASH_KEYVAL(pos, &list->extras, key, val) { zval *tmp = php_http_ztyp(IS_STRING, *val); - if (key.type == HASH_KEY_IS_STRING && key.len) { - append_encoded(&buf, key.str, key.len-1, Z_STRVAL_P(tmp), Z_STRLEN_P(tmp)); - } else if (key.type == HASH_KEY_IS_LONG) { - int enc_len; - char *enc_str = php_raw_url_encode(Z_STRVAL_P(tmp), Z_STRLEN_P(tmp), &enc_len); - php_http_buffer_appendf(&buf, "%ld=%.*s; ", key.num, enc_len, enc_str); - efree(enc_str); - } + php_http_array_hashkey_stringify(&key); + append_encoded(&buf, key.str, key.len-1, Z_STRVAL_P(tmp), Z_STRLEN_P(tmp)); + php_http_array_hashkey_stringfree(&key); + zval_ptr_dtor(&tmp); } @@ -477,7 +463,11 @@ zend_object_value php_http_cookie_object_new_ex(zend_class_entry *ce, php_http_c o = ecalloc(sizeof(*o), 1); zend_object_std_init((zend_object *) o, ce TSRMLS_CC); +#if PHP_VERSION_ID < 50339 + zend_hash_copy(((zend_object *) o)->properties, &(ce->default_properties), (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval*)); +#else object_properties_init((zend_object *) o, ce); +#endif if (list) { o->list = list;