]> granicus.if.org Git - php/commitdiff
- Fix string conversion issues
authorMarcus Boerger <helly@php.net>
Wed, 1 Mar 2006 16:15:40 +0000 (16:15 +0000)
committerMarcus Boerger <helly@php.net>
Wed, 1 Mar 2006 16:15:40 +0000 (16:15 +0000)
Zend/zend.c

index 85f76d4d351d4075e2274fdb0156d01b16cfbe50..d3db13435fde6e40e02ed8ce96f726e620b7671f 100644 (file)
@@ -360,7 +360,13 @@ ZEND_API void zend_make_string_zval(zval *expr, zval *expr_copy, int *use_copy)
                                        zval *z = Z_OBJ_HANDLER_P(expr, get)(expr TSRMLS_CC);
                                        if(Z_TYPE_P(z) != IS_OBJECT) {
                                                zend_make_string_zval(z, expr_copy, use_copy);
-                                               FREE_ZVAL(z);
+                                               if (*use_copy) {
+                                                       FREE_ZVAL(z);
+                                               } else {
+                                                       ZVAL_ZVAL(expr_copy, z, 0, 1);
+                                                       *use_copy = 1;
+                                                       return;
+                                               }
                                                break;
                                        }
                                }
@@ -421,7 +427,13 @@ ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_cop
                                zval *z = Z_OBJ_HANDLER_P(expr, get)(expr TSRMLS_CC);
                                if(Z_TYPE_P(z) != IS_OBJECT) {
                                        zend_make_printable_zval(z, expr_copy, use_copy);
-                                       FREE_ZVAL(z);
+                                       if (*use_copy) {
+                                               FREE_ZVAL(z);
+                                       } else {
+                                               ZVAL_ZVAL(expr_copy, z, 0, 1);
+                                               *use_copy = 1;
+                                               return;
+                                       }
                                        break;
                                }
                        }
@@ -465,7 +477,13 @@ ZEND_API void zend_make_unicode_zval(zval *expr, zval *expr_copy, int *use_copy)
                                zval *z = Z_OBJ_HANDLER_P(expr, get)(expr TSRMLS_CC);
                                if(Z_TYPE_P(z) != IS_OBJECT) {
                                        zend_make_unicode_zval(z, expr_copy, use_copy);
-                                       FREE_ZVAL(z);
+                                       if (*use_copy) {
+                                               FREE_ZVAL(z);
+                                       } else {
+                                               ZVAL_ZVAL(expr_copy, z, 0, 1);
+                                               *use_copy = 1;
+                                               return;
+                                       }
                                        break;
                                }
                        }