com php-src: Fix copying of constants for ZTS: Zend/zend_cons tants.c
| From: | Dmitry Stogov | Date: | Wed, 09 Apr 2014 21:41:17 +0000 |
| Subject: | com php-src: Fix copying of constants for ZTS: Zend/zend_cons tants.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-77446@lists.php.net to get a copy of this message | ||
Commit: 19ccd7994235a127db0ed6f9582d324244d5fad1
Author: Nikita Popov <nikic@php.net> Wed, 9 Apr 2014 23:00:49 +0200
Parents: 3ce96eabc0f8d2f1ab697cd1cdfc3d4883b50e11
Branches: phpng
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=19ccd7994235a127db0ed6f9582d324244d5fad1
Log:
Fix copying of constants for ZTS
Just a quick hack, should probably add an internal_copy_ctor
function for this.
Changed paths:
M Zend/zend_constants.c
Diff:
diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c
index c807b0a..8227f18 100644
--- a/Zend/zend_constants.c
+++ b/Zend/zend_constants.c
@@ -49,11 +49,19 @@ static void copy_zend_constant(zval *zv)
Z_PTR_P(zv) = malloc(sizeof(zend_constant)/*, c->flags & CONST_PERSISTENT*/);
memcpy(Z_PTR_P(zv), c, sizeof(zend_constant));
+
+ c = Z_PTR_P(zv);
//??? c->name = STR_DUP(c->name, c->flags & CONST_PERSISTENT);
c->name = STR_COPY(c->name);
-//??? if (!(c->flags & CONST_PERSISTENT)) {
+ if (!(c->flags & CONST_PERSISTENT)) {
zval_copy_ctor(&c->value);
-//??? }
+ } else {
+//??? internal_copy_ctor needed
+ if (Z_TYPE(c->value) == IS_STRING) {
+ Z_STR(c->value) = STR_DUP(Z_STR(c->value), 1);
+ }
+
+ }
}
@@ -239,7 +247,7 @@ static zend_constant *zend_get_special_constant(const char *name, uint name_len
memcpy(const_name->val, "\0__CLASS__", sizeof("\0__CLASS__")-1);
zend_str_tolower_copy(const_name->val + sizeof("\0__CLASS__")-1,
EG(scope)->name->val, EG(scope)->name->len);
if ((c = zend_hash_find_ptr(EG(zend_constants), const_name)) == NULL) {
- c = emalloc(sizeof(zend_constant));
+ c = malloc(sizeof(zend_constant));
memset(c, 0, sizeof(zend_constant));
ZVAL_STR(&c->value, STR_COPY(EG(scope)->name));
zend_hash_add_ptr(EG(zend_constants), const_name, c);
@@ -248,7 +256,7 @@ static zend_constant *zend_get_special_constant(const char *name, uint name_len
} else {
zend_string *const_name = STR_INIT("\0__CLASS__", sizeof("\0__CLASS__")-1,
0);
if ((c = zend_hash_find_ptr(EG(zend_constants), const_name)) == NULL) {
- c = emalloc(sizeof(zend_constant));
+ c = malloc(sizeof(zend_constant));
memset(c, 0, sizeof(zend_constant));
ZVAL_EMPTY_STRING(&c->value);
zend_hash_add_ptr(EG(zend_constants), const_name, c);