]> granicus.if.org Git - php/commitdiff
Fixed inproper IS_REF handling in ext/standard/tests/strings/bug27295.phpt
authorXinchen Hui <laruence@gmail.com>
Sun, 23 Feb 2014 10:48:15 +0000 (18:48 +0800)
committerXinchen Hui <laruence@gmail.com>
Sun, 23 Feb 2014 10:48:15 +0000 (18:48 +0800)
ext/standard/scanf.c

index 2e41a4f8fdbe1b44da420eb4f94b22a0a3dc3393..4fd149804eb1207e041b1cbf67c33bcefd5cae0d 100644 (file)
@@ -742,15 +742,11 @@ literal:
                                        if (numVars && objIndex >= argCount) {
                                                break;
                                        } else if (numVars) {
-                                               zend_uint refcount;
-
                                                current = &args[objIndex++];
-                                               refcount = Z_REFCOUNT_P(current);
-                                               zval_dtor(current);
-                                               ZVAL_LONG(current, (long)(string - baseString) );
+                                               zval_dtor(Z_REFVAL_P(current));
+                                               ZVAL_LONG(Z_REFVAL_P(current), (long)(string - baseString) );
 //                                             Z_SET_REFCOUNT_P(current, refcount);
 //???                                  Z_SET_ISREF_P(current);
-                                               ZVAL_NEW_REF(current, current);
                                        } else {
                                                add_index_long(return_value, objIndex++, string - baseString);
                                        }
@@ -867,15 +863,11 @@ literal:
                                        if (numVars && objIndex >= argCount) {
                                                break;
                                        } else if (numVars) {
-                                               zend_uint refcount;
-
                                                current = &args[objIndex++];
-                                               refcount = Z_REFCOUNT_P(current);
-                                               zval_dtor( current );
-                                               ZVAL_STRINGL( current, string, end-string);
-                                               Z_SET_REFCOUNT_P(current, refcount);
+                                               zval_dtor(Z_REFVAL_P(current));
+                                               ZVAL_STRINGL(Z_REFVAL_P(current), string, end-string);
+//                                             Z_SET_REFCOUNT_P(current, refcount);
 //???                                          Z_SET_ISREF_PP(current);
-                                               ZVAL_NEW_REF(current, current);
                                        } else {
                                                add_index_stringl(return_value, objIndex++, string, end-string, 1);
                                        }
@@ -915,8 +907,8 @@ literal:
                                                break;
                                        } else if (numVars) {
                                                current = &args[objIndex++];
-                                               zval_dtor( current );
-                                               ZVAL_STRINGL( current, string, end-string);
+                                               zval_dtor(Z_REFVAL_P(current));
+                                               ZVAL_STRINGL(Z_REFVAL_P(current), string, end-string);
                                        } else {
                                                add_index_stringl(return_value, objIndex++, string, end-string, 1);
                                        }
@@ -1069,8 +1061,8 @@ addToInt:
                                                } else if (numVars) {
                                                  /* change passed value type to string */
                                                        current = &args[objIndex++];
-                                                       zval_dtor(current);
-                                                       ZVAL_STRING(current, buf);
+                                                       zval_dtor(Z_REFVAL_P(current));
+                                                       ZVAL_STRING(Z_REFVAL_P(current), buf);
                                                } else {
                                                        add_index_string(return_value, objIndex++, buf, 1);
                                                }
@@ -1079,8 +1071,8 @@ addToInt:
                                                        break;
                                                } else if (numVars) {
                                                        current = &args[objIndex++];
-                                                       zval_dtor(current);
-                                                       ZVAL_LONG(current, value);
+                                                       zval_dtor(Z_REFVAL_P(current));
+                                                       ZVAL_LONG(Z_REFVAL_P(current), value);
                                                } else {
                                                        add_index_long(return_value, objIndex++, value);
                                                }
@@ -1184,8 +1176,8 @@ addToFloat:
                                                break;
                                        } else if (numVars) {
                                                current = &args[objIndex++];
-                                               zval_dtor(current);
-                                               ZVAL_DOUBLE(current, dvalue);
+                                               zval_dtor(Z_REFVAL_P(current));
+                                               ZVAL_DOUBLE(Z_REFVAL_P(current), dvalue);
                                        } else {
                                                add_index_double(return_value, objIndex++, dvalue );
                                        }