Merge branch 'master' into phpng
[m6w6/ext-http] / php_http_message_body.c
index b5f03c24604d424da006f1af326828edd81b11ac..1c540c77389dba84e58b1040128ae040579cfec8 100644 (file)
@@ -45,14 +45,13 @@ php_http_message_body_t *php_http_message_body_init(php_http_message_body_t **bo
        body->refcount = 1;
 
        if (stream) {
-               php_stream_auto_cleanup(stream);
                body->res = stream->res;
                ++GC_REFCOUNT(body->res);
        } else {
                stream = php_stream_temp_create(TEMP_STREAM_DEFAULT, 0xffff);
-               php_stream_auto_cleanup(stream);
                body->res = stream->res;
        }
+       php_stream_auto_cleanup(stream);
 
        if (body_ptr) {
                *body_ptr = body;
@@ -261,9 +260,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 +282,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 +339,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 +377,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);
@@ -555,7 +554,7 @@ php_http_message_body_object_t *php_http_message_body_object_new_ex(zend_class_e
 {
        php_http_message_body_object_t *o;
 
-       o = ecalloc(1, sizeof(php_http_message_body_object_t) + (ce->default_properties_count - 1) * sizeof(zval));
+       o = ecalloc(1, sizeof(*o) + zend_object_properties_size(ce));
        zend_object_std_init(&o->zo, php_http_message_body_class_entry);
        object_properties_init(&o->zo, ce);
 
@@ -882,8 +881,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;