From d9a1752163f38455514c8a67c995129287e08b31 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Wed, 25 Sep 2013 21:19:52 +0100 Subject: [PATCH] resolve last errors / inconsistencies in ZTS mode --- Zend/zend_compile.c | 10 ++++++---- Zend/zend_opcode.c | 8 +++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index bd6b705715ecc..0b9edf1e28ebd 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2235,14 +2235,16 @@ void zend_do_create_anon_class(znode *result TSRMLS_DC) { /* {{{ */ Z_TYPE(result->u.constant) = IS_STRING; class_name_len = snprintf( - NULL, 0, "Class$$%lu", CG(anon_class_id))+1; - class_name = (char*) safe_emalloc(class_name_len+1, 1, 1); + NULL, 0, "Class$$%lu", CG(anon_class_id)); + class_name = (char*) emalloc(class_name_len+1); snprintf( - class_name, class_name_len, + class_name, class_name_len+1, "Class$$%lu", CG(anon_class_id) ); - Z_STRLEN(result->u.constant) = class_name_len; + class_name[class_name_len] = '\0'; + Z_STRLEN(result->u.constant) = class_name_len; + #ifndef ZTS Z_STRVAL(result->u.constant) = (char*) zend_new_interned_string( class_name, class_name_len+1, 0 TSRMLS_CC); diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c index 41b4bd25710fd..6392e0402c264 100644 --- a/Zend/zend_opcode.c +++ b/Zend/zend_opcode.c @@ -296,7 +296,13 @@ ZEND_API void destroy_zend_class(zend_class_entry **pce) efree(ce->default_static_members_table); } zend_hash_destroy(&ce->properties_info); - str_efree(ce->name); +#ifdef ZTS + if (!(ce->ce_flags & ZEND_ACC_ANON_CLASS)) { + str_efree(ce->name); + } +#else + str_efree(ce->name); +#endif zend_hash_destroy(&ce->function_table); zend_hash_destroy(&ce->constants_table); if (ce->num_interfaces > 0 && ce->interfaces) {