fix handling of indirect zvals of properties hashtables
[m6w6/ext-http] / php_http_message_body.c
index b5f03c24604d424da006f1af326828edd81b11ac..500448936c7d2a9c3078a18df3e0ce9ce887122b 100644 (file)
@@ -261,9 +261,9 @@ void php_http_message_body_add_part(php_http_message_body_t *body, php_http_mess
 
 ZEND_RESULT_CODE php_http_message_body_add_form_field(php_http_message_body_t *body, const char *name, const char *value_str, size_t value_len)
 {
-       zend_string *safe_name;
+       zend_string *safe_name = zend_string_init(name, strlen(name), 0);
 
-       safe_name = php_addslashes(estrdup(name), strlen(name), 1);
+       safe_name = php_addslashes(safe_name, 1);
 
        BOUNDARY_OPEN(body);
        php_http_message_body_appendf(
@@ -283,9 +283,9 @@ ZEND_RESULT_CODE php_http_message_body_add_form_file(php_http_message_body_t *bo
 {
        size_t path_len = strlen(path);
        char *path_dup = estrndup(path, path_len);
-       zend_string *safe_name, *base_name;
+       zend_string *base_name, *safe_name = zend_string_init(name, strlen(name), 0);
 
-       safe_name = php_addslashes(estrdup(name), strlen(name), 1);
+       safe_name = php_addslashes(safe_name, 1);
        base_name = php_basename(path_dup, path_len, NULL, 0);
 
        BOUNDARY_OPEN(body);
@@ -340,7 +340,7 @@ static ZEND_RESULT_CODE add_recursive_fields(php_http_message_body_t *body, cons
 
        if (!ZEND_HASH_GET_APPLY_COUNT(fields)) {
                ZEND_HASH_INC_APPLY_COUNT(fields);
-               ZEND_HASH_FOREACH_KEY_VAL(fields, key.h, key.key, val)
+               ZEND_HASH_FOREACH_KEY_VAL_IND(fields, key.h, key.key, val)
                {
                        char *str = format_key(&key, name);
 
@@ -378,7 +378,7 @@ static ZEND_RESULT_CODE add_recursive_files(php_http_message_body_t *body, const
 
                if (!ZEND_HASH_GET_APPLY_COUNT(files)) {
                        ZEND_HASH_INC_APPLY_COUNT(files);
-                       ZEND_HASH_FOREACH_KEY_VAL(files, key.h, key.key, val)
+                       ZEND_HASH_FOREACH_KEY_VAL_IND(files, key.h, key.key, val)
                        {
                                if (Z_TYPE_P(val) == IS_ARRAY || Z_TYPE_P(val) == IS_OBJECT) {
                                        char *str = format_key(&key, name);
@@ -882,8 +882,9 @@ PHP_MINIT_FUNCTION(http_message_body)
        php_http_message_body_class_entry = zend_register_internal_class(&ce);
        php_http_message_body_class_entry->create_object = php_http_message_body_object_new;
        memcpy(&php_http_message_body_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
+       php_http_message_body_object_handlers.offset = XtOffsetOf(php_http_message_body_object_t, zo);
        php_http_message_body_object_handlers.clone_obj = php_http_message_body_object_clone;
-       php_http_message_body_object_handlers.dtor_obj = php_http_message_body_object_free;
+       php_http_message_body_object_handlers.free_obj = php_http_message_body_object_free;
        zend_class_implements(php_http_message_body_class_entry, 1, zend_ce_serializable);
 
        return SUCCESS;