]> granicus.if.org Git - php/commitdiff
Fixed memory leak
authorDmitry Stogov <dmitry@php.net>
Fri, 7 Oct 2005 10:06:45 +0000 (10:06 +0000)
committerDmitry Stogov <dmitry@php.net>
Fri, 7 Oct 2005 10:06:45 +0000 (10:06 +0000)
Zend/zend_operators.c

index 78f7c0d9717e22016278dd1b84a2f3fa3f71bdfb..1918f30a25f547b084ad3d5b68b9ef7b50a5c32a 100644 (file)
@@ -319,15 +319,15 @@ ZEND_API void convert_scalar_to_number(zval *op TSRMLS_DC)
 
 #define convert_object_to_type(op, ctype, conv_func)                                                                           \
        if (Z_OBJ_HT_P(op)->cast_object) {                                                                                                              \
-               zval *org;                                                                                                                                                      \
-               ALLOC_ZVAL(org);                                                                                                                                        \
-               *org = *op;                                                                                                                                                     \
-               if (Z_OBJ_HT_P(op)->cast_object(org, op, ctype TSRMLS_CC) == FAILURE) {                         \
+               zval dst;                                                                                                                                                       \
+               if (Z_OBJ_HT_P(op)->cast_object(op, &dst, ctype TSRMLS_CC) == FAILURE) {                        \
                        zend_error(E_RECOVERABLE_ERROR,                                                                                                 \
-                       "Object of class %v could not be converted to " # ctype, Z_OBJCE_P(org)->name); \
-                       INIT_ZVAL(*op);                                                                                                                                 \
+                       "Object of class %v could not be converted to " # ctype, Z_OBJCE_P(op)->name);  \
+               } else {                                                                                                                                                        \
+                       zval_dtor(op);                                                                                                                                  \
+                       op->type = ctype;                                                                                                                               \
+                       op->value = dst.value;                                                                                                                  \
                }                                                                                                                                                                       \
-               zval_dtor(org);                                                                                                                                         \
        } else {                                                                                                                                                                \
                if(Z_OBJ_HT_P(op)->get) {                                                                                                                       \
                        zval *newop = Z_OBJ_HT_P(op)->get(op TSRMLS_CC);                                                                \