]> granicus.if.org Git - php/commitdiff
Move zend_object->guards into additional slot of zend_object->properties_table[]...
authorDmitry Stogov <dmitry@zend.com>
Wed, 4 Feb 2015 12:24:13 +0000 (15:24 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 4 Feb 2015 12:24:13 +0000 (15:24 +0300)
39 files changed:
Zend/zend_API.c
Zend/zend_compile.c
Zend/zend_compile.h
Zend/zend_inheritance.c
Zend/zend_object_handlers.c
Zend/zend_objects.c
Zend/zend_objects_API.h
Zend/zend_types.h
ext/date/php_date.c
ext/dom/php_dom.c
ext/fileinfo/fileinfo.c
ext/gmp/gmp.c
ext/intl/collator/collator_class.c
ext/intl/converter/converter.c
ext/intl/dateformat/dateformat_class.c
ext/intl/formatter/formatter_class.c
ext/intl/msgformat/msgformat_class.c
ext/intl/resourcebundle/resourcebundle_class.c
ext/intl/spoofchecker/spoofchecker_class.c
ext/intl/transliterator/transliterator_class.c
ext/mysqli/mysqli.c
ext/pdo/pdo_dbh.c
ext/pdo/pdo_stmt.c
ext/reflection/php_reflection.c
ext/simplexml/simplexml.c
ext/snmp/snmp.c
ext/spl/spl_array.c
ext/spl/spl_directory.c
ext/spl/spl_dllist.c
ext/spl/spl_fixedarray.c
ext/spl/spl_heap.c
ext/spl/spl_iterators.c
ext/spl/spl_observer.c
ext/sqlite3/sqlite3.c
ext/tidy/tidy.c
ext/xmlreader/php_xmlreader.c
ext/xmlwriter/php_xmlwriter.c
ext/xsl/php_xsl.c
ext/zip/php_zip.c

index 440e96d3113628a1b5f734e9b297202450faddab..7abbf31cb2bc081605d9cf3b0936c9f62f7c3b4b 100644 (file)
@@ -2086,12 +2086,16 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio
                                __tostring = reg_function;
                        } else if (zend_string_equals_literal(lowercase_name, ZEND_GET_FUNC_NAME)) {
                                __get = reg_function;
+                               scope->ce_flags |= ZEND_ACC_USE_GUARDS;
                        } else if (zend_string_equals_literal(lowercase_name, ZEND_SET_FUNC_NAME)) {
                                __set = reg_function;
+                               scope->ce_flags |= ZEND_ACC_USE_GUARDS;
                        } else if (zend_string_equals_literal(lowercase_name, ZEND_UNSET_FUNC_NAME)) {
                                __unset = reg_function;
+                               scope->ce_flags |= ZEND_ACC_USE_GUARDS;
                        } else if (zend_string_equals_literal(lowercase_name, ZEND_ISSET_FUNC_NAME)) {
                                __isset = reg_function;
+                               scope->ce_flags |= ZEND_ACC_USE_GUARDS;
                        } else if (zend_string_equals_literal(lowercase_name, ZEND_DEBUGINFO_FUNC_NAME)) {
                                __debugInfo = reg_function;
                        } else {
index cffed9c7d486405ece9fcf2881b45e3659e3504f..bdd0c17583b9c05ef01e02deef69afa5c8ee3896 100644 (file)
@@ -4130,24 +4130,28 @@ void zend_begin_method_decl(zend_op_array *op_array, zend_string *name, zend_boo
                                        "public visibility and cannot be static");
                        }
                        ce->__get = (zend_function *) op_array;
+                       ce->ce_flags |= ZEND_ACC_USE_GUARDS;
                } else if (zend_string_equals_literal(lcname, ZEND_SET_FUNC_NAME)) {
                        if (!is_public || is_static) {
                                zend_error(E_WARNING, "The magic method __set() must have "
                                        "public visibility and cannot be static");
                        }
                        ce->__set = (zend_function *) op_array;
+                       ce->ce_flags |= ZEND_ACC_USE_GUARDS;
                } else if (zend_string_equals_literal(lcname, ZEND_UNSET_FUNC_NAME)) {
                        if (!is_public || is_static) {
                                zend_error(E_WARNING, "The magic method __unset() must have "
                                        "public visibility and cannot be static");
                        }
                        ce->__unset = (zend_function *) op_array;
+                       ce->ce_flags |= ZEND_ACC_USE_GUARDS;
                } else if (zend_string_equals_literal(lcname, ZEND_ISSET_FUNC_NAME)) {
                        if (!is_public || is_static) {
                                zend_error(E_WARNING, "The magic method __isset() must have "
                                        "public visibility and cannot be static");
                        }
                        ce->__isset = (zend_function *) op_array;
+                       ce->ce_flags |= ZEND_ACC_USE_GUARDS;
                } else if (zend_string_equals_literal(lcname, ZEND_TOSTRING_FUNC_NAME)) {
                        if (!is_public || is_static) {
                                zend_error(E_WARNING, "The magic method __toString() must have "
index 7c82c67d6dff5e578b52055834619f7b9601a8ba..8a9b37cc6c6f8f39535cd62f78f0ff4211e1ae9f 100644 (file)
@@ -242,6 +242,9 @@ typedef struct _zend_try_catch_element {
 #define ZEND_ACC_RETURN_REFERENCE              0x4000000
 #define ZEND_ACC_DONE_PASS_TWO                 0x8000000
 
+/* class has magic methods __get/__set/__unset/__isset that use guards */
+#define ZEND_ACC_USE_GUARDS                            0x1000000
+
 /* function has arguments with type hinting */
 #define ZEND_ACC_HAS_TYPE_HINTS                        0x10000000
 
index 10b0ae5e844b9a02ad11f3e4dbea968cadff7c3e..bcbf3c7b758a45c9e6713ae91cba7ac8dce04e0f 100644 (file)
@@ -904,7 +904,7 @@ ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent
                /* The verification will be done in runtime by ZEND_VERIFY_ABSTRACT_CLASS */
                zend_verify_abstract_class(ce);
        }
-       ce->ce_flags |= parent_ce->ce_flags & ZEND_HAS_STATIC_IN_METHODS;
+       ce->ce_flags |= parent_ce->ce_flags & (ZEND_HAS_STATIC_IN_METHODS | ZEND_ACC_USE_GUARDS);
 }
 /* }}} */
 
@@ -1044,14 +1044,18 @@ static void zend_add_magic_methods(zend_class_entry* ce, zend_string* mname, zen
                ce->destructor = fe; fe->common.fn_flags |= ZEND_ACC_DTOR;
        } else if (!strncmp(mname->val, ZEND_GET_FUNC_NAME, mname->len)) {
                ce->__get = fe;
+               ce->ce_flags |= ZEND_ACC_USE_GUARDS;
        } else if (!strncmp(mname->val, ZEND_SET_FUNC_NAME, mname->len)) {
                ce->__set = fe;
+               ce->ce_flags |= ZEND_ACC_USE_GUARDS;
        } else if (!strncmp(mname->val, ZEND_CALL_FUNC_NAME, mname->len)) {
                ce->__call = fe;
        } else if (!strncmp(mname->val, ZEND_UNSET_FUNC_NAME, mname->len)) {
                ce->__unset = fe;
+               ce->ce_flags |= ZEND_ACC_USE_GUARDS;
        } else if (!strncmp(mname->val, ZEND_ISSET_FUNC_NAME, mname->len)) {
                ce->__isset = fe;
+               ce->ce_flags |= ZEND_ACC_USE_GUARDS;
        } else if (!strncmp(mname->val, ZEND_CALLSTATIC_FUNC_NAME, mname->len)) {
                ce->__callstatic = fe;
        } else if (!strncmp(mname->val, ZEND_TOSTRING_FUNC_NAME, mname->len)) {
index f316bc81d417dbfd24928a1e9e9415e5a209e6c8..7a94a3dcd30de7a217c8e9adbe647597fbc1894c 100644 (file)
@@ -482,17 +482,27 @@ static void zend_property_guard_dtor(zval *el) /* {{{ */ {
 
 static zend_long *zend_get_property_guard(zend_object *zobj, zend_string *member) /* {{{ */
 {
+       HashTable *guards;
        zend_long stub, *guard;
+       zval tmp;
 
-       if (!zobj->guards) {
-               ALLOC_HASHTABLE(zobj->guards);
-               zend_hash_init(zobj->guards, 8, NULL, zend_property_guard_dtor, 0);
-       } else if ((guard = (zend_long *)zend_hash_find_ptr(zobj->guards, member)) != NULL) {
-               return guard;
+       ZEND_ASSERT(GC_FLAGS(zobj) & IS_OBJ_USE_GUARDS);
+       if (GC_FLAGS(zobj) & IS_OBJ_HAS_GUARDS) {
+               guards = Z_PTR(zobj->properties_table[zobj->ce->default_properties_count]);
+               ZEND_ASSERT(guards != NULL);
+               if ((guard = (zend_long *)zend_hash_find_ptr(guards, member)) != NULL) {
+                       return guard;
+               }
+       } else {
+               ALLOC_HASHTABLE(guards);
+               zend_hash_init(guards, 8, NULL, zend_property_guard_dtor, 0);
+               ZVAL_PTR(&tmp, guards);
+               Z_PTR(zobj->properties_table[zobj->ce->default_properties_count]) = guards;
+               GC_FLAGS(zobj) |= IS_OBJ_HAS_GUARDS;
        }
 
        stub = 0;
-       return (zend_long *)zend_hash_add_mem(zobj->guards, member, &stub, sizeof(zend_ulong));
+       return (zend_long *)zend_hash_add_mem(guards, member, &stub, sizeof(zend_ulong));
 }
 /* }}} */
 
index 8ba1f5a78d104d0469fa040006afe245513bf555..60e446b4fd6ff041e4a0de29040e11d9081f662a 100644 (file)
@@ -32,7 +32,6 @@ ZEND_API void zend_object_std_init(zend_object *object, zend_class_entry *ce)
        GC_TYPE_INFO(object) = IS_OBJECT;
        object->ce = ce;
        object->properties = NULL;
-       object->guards = NULL;
        zend_objects_store_put(object);
        if (EXPECTED(ce->default_properties_count != 0)) {
                zval *p = object->properties_table;
@@ -43,16 +42,17 @@ ZEND_API void zend_object_std_init(zend_object *object, zend_class_entry *ce)
                        p++;
                } while (p != end);
        }
+       if (ce->ce_flags & ZEND_ACC_USE_GUARDS) {
+               GC_FLAGS(object) |= IS_OBJ_USE_GUARDS;
+               ZVAL_UNDEF(&object->properties_table[ce->default_properties_count]);
+               Z_PTR(object->properties_table[ce->default_properties_count]) = NULL;
+       }
 }
 
 ZEND_API void zend_object_std_dtor(zend_object *object)
 {
        int i, count;
 
-       if (object->guards) {
-               zend_hash_destroy(object->guards);
-               FREE_HASHTABLE(object->guards);
-       }
        if (object->properties) {
                zend_array_destroy(object->properties);
                FREE_HASHTABLE(object->properties);
@@ -61,6 +61,13 @@ ZEND_API void zend_object_std_dtor(zend_object *object)
        for (i = 0; i < count; i++) {
                i_zval_ptr_dtor(&object->properties_table[i] ZEND_FILE_LINE_CC);
        }
+       if (GC_FLAGS(object) & IS_OBJ_HAS_GUARDS) {
+               HashTable *guards = Z_PTR(object->properties_table[count]);
+
+               ZEND_ASSERT(guards != NULL);
+               zend_hash_destroy(guards);
+               FREE_HASHTABLE(guards);
+       }
 }
 
 ZEND_API void zend_objects_destroy_object(zend_object *object)
@@ -131,7 +138,7 @@ ZEND_API void zend_objects_destroy_object(zend_object *object)
 
 ZEND_API zend_object *zend_objects_new(zend_class_entry *ce)
 {
-       zend_object *object = emalloc(sizeof(zend_object) + sizeof(zval) * (ce->default_properties_count - 1));
+       zend_object *object = emalloc(sizeof(zend_object) + zend_object_properties_size(ce));
 
        zend_object_std_init(object, ce);
        object->handlers = &std_object_handlers;
index cffdb4876be90f92f9a8e04a794323e9850f4f48..5bc7d774bce2288a718585776d2e430d2688b53b 100644 (file)
@@ -23,6 +23,7 @@
 #define ZEND_OBJECTS_API_H
 
 #include "zend.h"
+#include "zend_compile.h"
 
 #define OBJ_BUCKET_INVALID                     (1<<0)
 
@@ -80,6 +81,13 @@ static zend_always_inline void zend_object_release(zend_object *obj)
        }
 }
 
+static zend_always_inline size_t zend_object_properties_size(zend_class_entry *ce)
+{
+       return sizeof(zval) *
+               (ce->default_properties_count -
+                       ((ce->ce_flags & ZEND_ACC_USE_GUARDS) ? 0 : 1));
+}
+
 #endif /* ZEND_OBJECTS_H */
 
 /*
index 5c00cb133f49a1956de612cec14074b390034b78..80e17003739f2ea6433875b3f071bc166e2a93cd 100644 (file)
@@ -189,7 +189,6 @@ struct _zend_object {
        zend_class_entry *ce;
        const zend_object_handlers *handlers;
        HashTable        *properties;
-       HashTable        *guards; /* protects from __get/__set ... recursion */
        zval              properties_table[1];
 };
 
@@ -325,6 +324,8 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) {
 #define IS_OBJ_APPLY_COUNT                     0x07
 #define IS_OBJ_DESTRUCTOR_CALLED       (1<<3)
 #define IS_OBJ_FREE_CALLED                     (1<<4)
+#define IS_OBJ_USE_GUARDS           (1<<5)
+#define IS_OBJ_HAS_GUARDS           (1<<6)
 
 #define Z_OBJ_APPLY_COUNT(zval) \
        (Z_GC_FLAGS(zval) & IS_OBJ_APPLY_COUNT)
index a00c4c5a949acda4aa1437ac94d0490a5307bf9c..a89636c36c57abab8a0352d1693c9170db80dcd3 100644 (file)
@@ -2069,7 +2069,7 @@ static inline zend_object *date_object_new_date_ex(zend_class_entry *class_type,
 {
        php_date_obj *intern;
 
-       intern = ecalloc(1, sizeof(php_date_obj) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(php_date_obj) + zend_object_properties_size(class_type));
 
        zend_object_std_init(&intern->std, class_type);
        if (init_props) {
@@ -2200,7 +2200,7 @@ static inline zend_object *date_object_new_timezone_ex(zend_class_entry *class_t
 {
        php_timezone_obj *intern;
 
-       intern = ecalloc(1, sizeof(php_timezone_obj) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(php_timezone_obj) + zend_object_properties_size(class_type));
 
        zend_object_std_init(&intern->std, class_type);
        if (init_props) {
@@ -2291,7 +2291,7 @@ static inline zend_object *date_object_new_interval_ex(zend_class_entry *class_t
 {
        php_interval_obj *intern;
 
-       intern = ecalloc(1, sizeof(php_interval_obj) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(php_interval_obj) + zend_object_properties_size(class_type));
 
        zend_object_std_init(&intern->std, class_type);
        if (init_props) {
@@ -2372,7 +2372,7 @@ static inline zend_object *date_object_new_period_ex(zend_class_entry *class_typ
 {
        php_period_obj *intern;
 
-       intern = ecalloc(1, sizeof(php_period_obj) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(php_period_obj) + zend_object_properties_size(class_type));
 
        zend_object_std_init(&intern->std, class_type);
        if (init_props) {
index 6797e894b54438100feb30a5c8453d707577a254..b6b66fc5074517e2812d4036caa184fd1e136699 100644 (file)
@@ -1081,7 +1081,7 @@ void dom_namednode_iter(dom_object *basenode, int ntype, dom_object *intern, xml
 
 static dom_object* dom_objects_set_class(zend_class_entry *class_type, zend_bool hash_copy) /* {{{ */
 {
-       dom_object *intern = ecalloc(1, sizeof(dom_object) + sizeof(zval) * (class_type->default_properties_count - 1));
+       dom_object *intern = ecalloc(1, sizeof(dom_object) + zend_object_properties_size(class_type));
 
        zend_class_entry *base_class = class_type;
        while (base_class->type != ZEND_INTERNAL_CLASS && base_class->parent != NULL) {
@@ -1112,7 +1112,7 @@ zend_object *dom_objects_new(zend_class_entry *class_type)
 /* {{{ zend_object_value dom_xpath_objects_new(zend_class_entry *class_type) */
 zend_object *dom_xpath_objects_new(zend_class_entry *class_type)
 {
-       dom_xpath_object *intern = ecalloc(1, sizeof(dom_xpath_object) + sizeof(zval) * (class_type->default_properties_count - 1));
+       dom_xpath_object *intern = ecalloc(1, sizeof(dom_xpath_object) + zend_object_properties_size(class_type));
 
        ALLOC_HASHTABLE(intern->registered_phpfunctions);
        zend_hash_init(intern->registered_phpfunctions, 0, NULL, ZVAL_PTR_DTOR, 0);
index f9eebd0484fa7578f5c5766dc579ad240c024e9c..b4a556d57bcd501f4ff283b71db99689fa843b66 100644 (file)
@@ -103,7 +103,7 @@ PHP_FILEINFO_API zend_object *finfo_objects_new(zend_class_entry *class_type)
 {
        finfo_object *intern;
 
-       intern = ecalloc(1, sizeof(finfo_object) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(finfo_object) + zend_object_properties_size(class_type));
 
        zend_object_std_init(&intern->zo, class_type);
        object_properties_init(&intern->zo, class_type);
index f4742a6cced419988b7d530715a0b0c27cd10243..75b157b890ef5810c89b566e119b3eea348dda60 100644 (file)
@@ -378,8 +378,7 @@ static void gmp_free_object_storage(zend_object *obj) /* {{{ */
 
 static inline zend_object *gmp_create_object_ex(zend_class_entry *ce, mpz_ptr *gmpnum_target) /* {{{ */
 {
-       gmp_object *intern = emalloc(sizeof(gmp_object)
-                       + sizeof(zval) * (ce->default_properties_count - 1));
+       gmp_object *intern = emalloc(sizeof(gmp_object) + zend_object_properties_size(ce));
 
        zend_object_std_init(&intern->std, ce);
        object_properties_init(&intern->std, ce);
index 48fc36806080015c6d45b362943e05061918edac..4fc7067708030cf7cd3da8e004517306f88e0f38 100644 (file)
@@ -58,7 +58,7 @@ zend_object *Collator_object_create(zend_class_entry *ce )
 {
        Collator_object*     intern;
 
-       intern = ecalloc(1, sizeof(Collator_object) + sizeof(zval) * (ce->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(Collator_object) + zend_object_properties_size(ce));
        intl_error_init(COLLATOR_ERROR_P(intern));
        zend_object_std_init(&intern->zo, ce );
        object_properties_init(&intern->zo, ce);
index a02edd4efedbf1906e5bd32c88db1da965556b8d..9bba427409a9fb3490adb1dce8824bff59a5c874 100644 (file)
@@ -1033,7 +1033,7 @@ static void php_converter_dtor_object(zend_object *obj) {
 static zend_object *php_converter_object_ctor(zend_class_entry *ce, php_converter_object **pobjval) {
        php_converter_object *objval;
 
-       objval = ecalloc(1, sizeof(php_converter_object) + sizeof(zval) * (ce->default_properties_count - 1));
+       objval = ecalloc(1, sizeof(php_converter_object) + zend_object_properties_size(ce));
 
        zend_object_std_init(&objval->obj, ce );
        intl_error_init(&(objval->error));
index a10b6defc53fa5533e13629d943734c580d939bd..afdde13dece288931ef00b0e15488432019a80f2 100644 (file)
@@ -61,7 +61,7 @@ zend_object *IntlDateFormatter_object_create(zend_class_entry *ce)
 {
        IntlDateFormatter_object*     intern;
 
-       intern = ecalloc( 1, sizeof(IntlDateFormatter_object) + sizeof(zval) * (ce->default_properties_count - 1) );
+       intern = ecalloc( 1, sizeof(IntlDateFormatter_object) + zend_object_properties_size(ce));
        dateformat_data_init( &intern->datef_data );
        zend_object_std_init( &intern->zo, ce );
        object_properties_init(&intern->zo, ce);
index df1086573ff0b302dc78df1a61a2a32dd05b7f61..287d19aaa92a3a84a37722cc8d5af017384f9528 100644 (file)
@@ -56,7 +56,7 @@ zend_object *NumberFormatter_object_create(zend_class_entry *ce)
 {
        NumberFormatter_object*     intern;
 
-       intern = ecalloc( 1, sizeof(NumberFormatter_object) + sizeof(zval) * (ce->default_properties_count - 1) );
+       intern = ecalloc( 1, sizeof(NumberFormatter_object) + zend_object_properties_size(ce));
        formatter_data_init( &intern->nf_data );
        zend_object_std_init( &intern->zo, ce );
        object_properties_init(&intern->zo, ce);
index bb66bb4ba1603dd2ce4c03f8ab86bf653a307c7b..8d464c6ca48d6dfb4edf57aa7ee2930d1ad9b214 100644 (file)
@@ -56,7 +56,7 @@ zend_object *MessageFormatter_object_create(zend_class_entry *ce)
 {
        MessageFormatter_object*     intern;
 
-       intern = ecalloc( 1, sizeof(MessageFormatter_object) + sizeof(zval) * (ce->default_properties_count - 1));
+       intern = ecalloc( 1, sizeof(MessageFormatter_object) + zend_object_properties_size(ce));
        msgformat_data_init( &intern->mf_data );
        zend_object_std_init( &intern->zo, ce );
        object_properties_init(&intern->zo, ce);
index 9ce33736bb8cb1730b4bdf43a5b3c352a1e24995..b8d27c940af6d84a871ab3bc414cebe3b3a1c408 100644 (file)
@@ -58,7 +58,7 @@ static zend_object *ResourceBundle_object_create( zend_class_entry *ce )
 {
        ResourceBundle_object *rb;
 
-       rb = ecalloc( 1, sizeof(ResourceBundle_object) + sizeof(zval) * (ce->default_properties_count - 1) );
+       rb = ecalloc( 1, sizeof(ResourceBundle_object) + zend_object_properties_size(ce));
 
        zend_object_std_init( &rb->zend, ce );
        object_properties_init( &rb->zend, ce);
index d2f2b4c873feae1ba6644e1c09b60bbe2d4df604..d93c709bd7d158ffc2e31eb7dbca03988ad944c1 100644 (file)
@@ -53,7 +53,7 @@ zend_object *Spoofchecker_object_create(
 {
        Spoofchecker_object*     intern;
 
-       intern = ecalloc(1, sizeof(Spoofchecker_object) + sizeof(zval) * (ce->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(Spoofchecker_object) + zend_object_properties_size(ce));
        intl_error_init(SPOOFCHECKER_ERROR_P(intern));
        zend_object_std_init(&intern->zo, ce);
        object_properties_init(&intern->zo, ce);
index c40c5e33ceabcd2527c2a424a01bc0bd20089181..4395cc086a0a57c53bd0b0401eb359aee53b5b77 100644 (file)
@@ -121,7 +121,7 @@ static zend_object *Transliterator_object_create(
 {
        Transliterator_object* intern;
 
-       intern = ecalloc( 1, sizeof( Transliterator_object ) + sizeof(zval) * (ce->default_properties_count - 1));
+       intern = ecalloc( 1, sizeof( Transliterator_object ) + zend_object_properties_size(ce));
 
        zend_object_std_init( &intern->zo, ce );
     object_properties_init( &intern->zo, ce );
index 2debf256e27dd5a8802d8225f02595f37005cbf1..9be31960c51c5019adbff040dae80f731a4b1c86 100644 (file)
@@ -453,7 +453,7 @@ PHP_MYSQLI_EXPORT(zend_object *) mysqli_objects_new(zend_class_entry *class_type
        zend_class_entry *mysqli_base_class;
        zend_object_handlers *handlers;
 
-       intern = ecalloc(1, sizeof(mysqli_object) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(mysqli_object) + zend_object_properties_size(class_type));
 
        mysqli_base_class = class_type;
        while (mysqli_base_class->type != ZEND_INTERNAL_CLASS &&
index 1e282d0b437602f0ac278e510c8de912616b2f9c..de9a6abbdc2e46570fdc9ef891b9c3bbcca52317 100644 (file)
@@ -1544,7 +1544,7 @@ zend_object *pdo_dbh_new(zend_class_entry *ce)
 {
        pdo_dbh_object_t *dbh;
 
-       dbh = ecalloc(1, sizeof(pdo_dbh_object_t) + sizeof(zval) * (ce->default_properties_count - 1));
+       dbh = ecalloc(1, sizeof(pdo_dbh_object_t) + zend_object_properties_size(ce));
        zend_object_std_init(&dbh->std, ce);
        object_properties_init(&dbh->std, ce);
        rebuild_object_properties(&dbh->std);
index dc1201ccdaff619b353e9bb3b57b45e10c1a0689..c6ebc37ec2283d0f1889545999fd4d6575a4ad7e 100644 (file)
@@ -2254,7 +2254,7 @@ static zend_object *dbstmt_clone_obj(zval *zobject)
        pdo_stmt_t *stmt;
        pdo_stmt_t *old_stmt;
 
-       stmt = ecalloc(1, sizeof(pdo_stmt_t) + sizeof(zval) * (Z_OBJCE_P(zobject)->default_properties_count - 1));
+       stmt = ecalloc(1, sizeof(pdo_stmt_t) + zend_object_properties_size(Z_OBJCE_P(zobject)));
        zend_object_std_init(&stmt->std, Z_OBJCE_P(zobject));
        object_properties_init(&stmt->std, Z_OBJCE_P(zobject));
 
@@ -2357,7 +2357,7 @@ zend_object *pdo_dbstmt_new(zend_class_entry *ce)
 {
        pdo_stmt_t *stmt;
 
-       stmt = ecalloc(1, sizeof(pdo_stmt_t) + sizeof(zval) * (ce->default_properties_count - 1));
+       stmt = ecalloc(1, sizeof(pdo_stmt_t) + zend_object_properties_size(ce));
        zend_object_std_init(&stmt->std, ce);
        object_properties_init(&stmt->std, ce);
 
index 9f5ad8cdd431c813c2468418baaa968ff18062d6..194c7ee99b9996b795f33379bee9d5fa02617c2b 100644 (file)
@@ -329,7 +329,7 @@ static zend_object *reflection_objects_new(zend_class_entry *class_type) /* {{{
 {
        reflection_object *intern;
 
-       intern = ecalloc(1, sizeof(reflection_object) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(reflection_object) + zend_object_properties_size(class_type));
        intern->zo.ce = class_type;
 
        zend_object_std_init(&intern->zo, class_type);
@@ -4217,7 +4217,7 @@ ZEND_METHOD(reflection_class, getModifiers)
        }
        GET_REFLECTION_OBJECT_PTR(ce);
 
-       RETURN_LONG(ce->ce_flags & ~ZEND_ACC_CONSTANTS_UPDATED);
+       RETURN_LONG(ce->ce_flags & ~(ZEND_ACC_CONSTANTS_UPDATED|ZEND_ACC_USE_GUARDS));
 }
 /* }}} */
 
index ceba129560bdffa614a848fccfd7e762adf5d63f..b125d16f7199c50e6af797a19528f001d982e680 100644 (file)
@@ -2057,7 +2057,7 @@ static php_sxe_object* php_sxe_object_new(zend_class_entry *ce)
        zend_class_entry *parent = ce;
        int inherited = 0;
 
-       intern = ecalloc(1, sizeof(php_sxe_object) + sizeof(zval) * (parent->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(php_sxe_object) + zend_object_properties_size(parent));
 
        intern->iter.type = SXE_ITER_NONE;
        intern->iter.nsprefix = NULL;
index ab8a25b9af1cf9a54e5ba8b815b958136f254393..930affa0416d37af8b764d2eff65ff32d5c87b13 100644 (file)
@@ -493,7 +493,7 @@ static zend_object *php_snmp_object_new(zend_class_entry *class_type) /* {{{ */
        php_snmp_object *intern;
 
        /* Allocate memory for it */
-       intern = ecalloc(1, sizeof(php_snmp_object) + sizeof(zval) *  (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(php_snmp_object) + zend_object_properties_size(class_type));
 
        zend_object_std_init(&intern->zo, class_type);
        object_properties_init(&intern->zo, class_type);
index 38a4aaede225bf8d67fcd20217c2426d51356996..0ae066dbfbf5273dbe48c9167eb8b33df02ed128 100644 (file)
@@ -181,7 +181,7 @@ static zend_object *spl_array_object_new_ex(zend_class_entry *class_type, zval *
        zend_class_entry *parent = class_type;
        int inherited = 0;
 
-       intern = ecalloc(1, sizeof(spl_array_object) + sizeof(zval) * (parent->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(spl_array_object) + zend_object_properties_size(parent));
 
        zend_object_std_init(&intern->std, class_type);
        object_properties_init(&intern->std, class_type);
index e2a836bfa33e5e2f14bec2fe72083419672566e1..a7d699b635c70d900f2d0912048b68e86d2b9935 100644 (file)
@@ -143,7 +143,7 @@ static zend_object *spl_filesystem_object_new_ex(zend_class_entry *class_type)
 {
        spl_filesystem_object *intern;
 
-       intern = ecalloc(1, sizeof(spl_filesystem_object) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(spl_filesystem_object) + zend_object_properties_size(class_type));
        /* intern->type = SPL_FS_INFO; done by set 0 */
        intern->file_class = spl_ce_SplFileObject;
        intern->info_class = spl_ce_SplFileInfo;
index 8dbd11df22e62f85b0c80a59742ce67ea9c8ee42..3db762883702686852ed40ef9985e8210fd55e49 100644 (file)
@@ -373,7 +373,7 @@ static zend_object *spl_dllist_object_new_ex(zend_class_entry *class_type, zval
        zend_class_entry  *parent = class_type;
        int                inherited = 0;
 
-       intern = ecalloc(1, sizeof(spl_dllist_object) + sizeof(zval) * (parent->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(spl_dllist_object) + zend_object_properties_size(parent));
 
        zend_object_std_init(&intern->std, class_type);
        object_properties_init(&intern->std, class_type);
index a974a2008f6e637f97fd54ae5da619dc119a4313..cd83a17b56f1caf9e94a84fc4731bda195b8cb5e 100644 (file)
@@ -220,7 +220,7 @@ static zend_object *spl_fixedarray_object_new_ex(zend_class_entry *class_type, z
        zend_class_entry     *parent = class_type;
        int                   inherited = 0;
 
-       intern = ecalloc(1, sizeof(spl_fixedarray_object) + (sizeof(zval) * parent->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(spl_fixedarray_object) + zend_object_properties_size(parent));
 
        zend_object_std_init(&intern->std, class_type);
        object_properties_init(&intern->std, class_type);
index 35e2806f7ccd2ee28abb066b60d7328f5e1a0834..8e9f3ad66f1efe19270c9a92e9b23518db2cc528 100644 (file)
@@ -386,7 +386,7 @@ static zend_object *spl_heap_object_new_ex(zend_class_entry *class_type, zval *o
        zend_class_entry  *parent = class_type;
        int                inherited = 0;
 
-       intern = ecalloc(1, sizeof(spl_heap_object) + sizeof(zval) * (parent->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(spl_heap_object) + zend_object_properties_size(parent));
 
        zend_object_std_init(&intern->std, class_type);
        object_properties_init(&intern->std, class_type);
index 80dcabb907510282f920885e7e8ea12f21331f62..bb7424a395fb407ab7b6694e91bcbfc74bd83c5a 100644 (file)
@@ -948,7 +948,7 @@ static zend_object *spl_RecursiveIteratorIterator_new_ex(zend_class_entry *class
 {
        spl_recursive_it_object *intern;
 
-       intern = ecalloc(1, sizeof(spl_recursive_it_object) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(spl_recursive_it_object) + zend_object_properties_size(class_type));
 
        if (init_prefix) {
                smart_str_appendl(&intern->prefix[0], "",    0);
@@ -2377,7 +2377,7 @@ static zend_object *spl_dual_it_new(zend_class_entry *class_type)
 {
        spl_dual_it_object *intern;
 
-       intern = ecalloc(1, sizeof(spl_dual_it_object) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(spl_dual_it_object) + zend_object_properties_size(class_type));
        intern->dit_type = DIT_Unknown;
 
        zend_object_std_init(&intern->std, class_type);
index 929b20d5d8615bc2ff5bc0fb4931d671454b3d5c..9c63b448c6406e20e86a1559d3686834df57026d 100644 (file)
@@ -256,7 +256,7 @@ static zend_object *spl_object_storage_new_ex(zend_class_entry *class_type, zval
        spl_SplObjectStorage *intern;
        zend_class_entry *parent = class_type;
 
-       intern = emalloc(sizeof(spl_SplObjectStorage) + sizeof(zval) * (parent->default_properties_count - 1));
+       intern = emalloc(sizeof(spl_SplObjectStorage) + zend_object_properties_size(parent));
        memset(intern, 0, sizeof(spl_SplObjectStorage) - sizeof(zval));
        intern->pos = INVALID_IDX;
 
index 31b9f1aa5b7aeeb6cee4262dfbd96093cba02811..556f7861f60a4ae23e7a9636b6f3f5f95e10f575 100644 (file)
@@ -2113,7 +2113,7 @@ static zend_object *php_sqlite3_object_new(zend_class_entry *class_type) /* {{{
        php_sqlite3_db_object *intern;
 
        /* Allocate memory for it */
-       intern = ecalloc(1, sizeof(php_sqlite3_db_object) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(php_sqlite3_db_object) + zend_object_properties_size(class_type));
 
        /* Need to keep track of things to free */
        zend_llist_init(&(intern->free_list),  sizeof(php_sqlite3_free_list *), (llist_dtor_func_t)php_sqlite3_free_list_dtor, 0);
@@ -2132,7 +2132,7 @@ static zend_object *php_sqlite3_stmt_object_new(zend_class_entry *class_type) /*
        php_sqlite3_stmt *intern;
 
        /* Allocate memory for it */
-       intern = ecalloc(1, sizeof(php_sqlite3_stmt) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(php_sqlite3_stmt) + zend_object_properties_size(class_type));
 
        zend_object_std_init(&intern->zo, class_type);
        object_properties_init(&intern->zo, class_type);
@@ -2148,7 +2148,7 @@ static zend_object *php_sqlite3_result_object_new(zend_class_entry *class_type)
        php_sqlite3_result *intern;
 
        /* Allocate memory for it */
-       intern = ecalloc(1, sizeof(php_sqlite3_result) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(php_sqlite3_result) + zend_object_properties_size(class_type));
 
        zend_object_std_init(&intern->zo, class_type);
        object_properties_init(&intern->zo, class_type);
index 03d8dd4b9a0a73e40e96653cb11e9c545532cc01..b0fe2935a005320d6fb354734af54a9a6430a4e5 100644 (file)
@@ -677,7 +677,7 @@ static zend_object *tidy_object_new(zend_class_entry *class_type, zend_object_ha
 {
        PHPTidyObj *intern;
 
-       intern = ecalloc(1, sizeof(PHPTidyObj) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(PHPTidyObj) + zend_object_properties_size(class_type));
        zend_object_std_init(&intern->std, class_type);
        object_properties_init(&intern->std, class_type);
 
index af34f08cc254e612793c5b6eaaeea5359c51d586..b572c85adaf8e84f1cdb46b55d8fb64efa95cd2e 100644 (file)
@@ -385,7 +385,7 @@ zend_object *xmlreader_objects_new(zend_class_entry *class_type)
 {
        xmlreader_object *intern;
 
-       intern = ecalloc(1, sizeof(xmlreader_object) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(xmlreader_object) + zend_object_properties_size(class_type));
        zend_object_std_init(&intern->std, class_type);
        object_properties_init(&intern->std, class_type);
        intern->prop_handler = &xmlreader_prop_handlers;
index 9e79e14ea51654cb54563e85a0cfd7b01c5c06f8..f2e458f64f54ea76afa96459fa05b49d764dc156 100644 (file)
@@ -141,7 +141,7 @@ static zend_object *xmlwriter_object_new(zend_class_entry *class_type)
 {
        ze_xmlwriter_object *intern;
 
-       intern = ecalloc(1, sizeof(ze_xmlwriter_object) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(ze_xmlwriter_object) + zend_object_properties_size(class_type));
        zend_object_std_init(&intern->std, class_type);
        object_properties_init(&intern->std, class_type);
        intern->std.handlers = &xmlwriter_object_handlers;
index 0f665c937eb0873078e4063037d5f13c011ea0fa..793c0fc6db1141d4d73cf80eb3a46ddf0926b398 100644 (file)
@@ -114,7 +114,7 @@ zend_object *xsl_objects_new(zend_class_entry *class_type)
 {
        xsl_object *intern;
 
-       intern = ecalloc(1, sizeof(xsl_object) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(xsl_object) + zend_object_properties_size(class_type));
        intern->securityPrefs = XSL_SECPREF_DEFAULT;
 
        zend_object_std_init(&intern->std, class_type);
index 927e66e794e8bbf6ad8accbab0c4add2990ceceb..e90ee9f9792048f73be3647d4b4da6c2a817f0bd 100644 (file)
@@ -1014,7 +1014,7 @@ static zend_object *php_zip_object_new(zend_class_entry *class_type) /* {{{ */
 {
        ze_zip_object *intern;
 
-       intern = ecalloc(1, sizeof(ze_zip_object) + sizeof(zval) * (class_type->default_properties_count - 1));
+       intern = ecalloc(1, sizeof(ze_zip_object) + zend_object_properties_size(class_type));
        intern->prop_handler = &zip_prop_handlers;
        zend_object_std_init(&intern->zo, class_type);
        object_properties_init(&intern->zo, class_type);