]> granicus.if.org Git - php/commitdiff
Print "interned" instead of fake refcount in debug_zval_dump()
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 12 Jan 2021 09:26:17 +0000 (10:26 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 15 Jan 2021 11:21:24 +0000 (12:21 +0100)
debug_zval_dump() currently prints refcount 1 for interned strings
and arrays, which does not really reflect the truth. These values
are not refcounted, so the refcount is misleading. Instead print
an "interned" tag.

Closes GH-6598.

15 files changed:
ext/mbstring/tests/bug26639.phpt
ext/mysqli/tests/mysqli_result_references.phpt
ext/mysqli/tests/mysqli_result_references_mysqlnd.phpt
ext/standard/tests/array/bug24766.phpt
ext/standard/tests/array/bug25708.phpt
ext/standard/tests/array/bug26458.phpt
ext/standard/tests/array/bug72369.phpt
ext/standard/tests/array/extract_safety.phpt
ext/standard/tests/array/extract_variation1.phpt
ext/standard/tests/general_functions/call_user_func_return.phpt
ext/standard/tests/general_functions/debug_zval_dump_b.phpt
ext/standard/tests/general_functions/debug_zval_dump_b_64bit.phpt
ext/standard/tests/general_functions/debug_zval_dump_o.phpt
ext/standard/tests/general_functions/debug_zval_dump_v.phpt
ext/standard/var.c

index 3f5b8e5acdd9ff15b7c64a0427bcb3b57c269df8..f50d80748267d4451a4bf82a9a1bca97a4c0b170 100644 (file)
@@ -7,16 +7,16 @@ Bug #26639 (mb_convert_variables() clutters variables beyond the references)
 $a = "\82 \82¢\82¤\82¦\82¨";
 $b = $a;
 mb_convert_variables("EUC-JP", "Shift_JIS", $b);
-debug_zval_dump($a);
-debug_zval_dump($b);
+var_dump($a);
+var_dump($b);
 unset($a);
 unset($b);
 
 $a = "\82 \82¢\82¤\82¦\82¨";
 $b = &$a;
 mb_convert_variables("EUC-JP", "Shift_JIS", $b);
-debug_zval_dump($a);
-debug_zval_dump($b);
+var_dump($a);
+var_dump($b);
 unset($a);
 unset($b);
 
@@ -24,8 +24,8 @@ $a = "
 $b = array($a);
 $c = $b;
 mb_convert_variables("EUC-JP", "Shift_JIS", $c);
-debug_zval_dump($b);
-debug_zval_dump($c);
+var_dump($b);
+var_dump($c);
 unset($a);
 unset($b);
 unset($c);
@@ -34,8 +34,8 @@ $a = "
 $b = array(&$a);
 $c = $b;
 mb_convert_variables("EUC-JP", "Shift_JIS", $c);
-debug_zval_dump($b);
-debug_zval_dump($c);
+var_dump($b);
+var_dump($c);
 unset($a);
 unset($b);
 unset($c);
@@ -44,8 +44,8 @@ $a = "
 $b = array($a);
 $c = &$b;
 mb_convert_variables("EUC-JP", "Shift_JIS", $c);
-debug_zval_dump($b);
-debug_zval_dump($c);
+var_dump($b);
+var_dump($c);
 unset($a);
 unset($b);
 unset($c);
@@ -54,8 +54,8 @@ $a = "
 $b = array(&$a);
 $c = &$b;
 mb_convert_variables("EUC-JP", "Shift_JIS", $c);
-debug_zval_dump($b);
-debug_zval_dump($c);
+var_dump($b);
+var_dump($c);
 unset($a);
 unset($b);
 unset($c);
@@ -64,60 +64,60 @@ $a = array(array("
 $b = $a;
 $c = $b;
 mb_convert_variables("EUC-JP", "Shift_JIS", $c);
-debug_zval_dump($b);
-debug_zval_dump($c);
+var_dump($b);
+var_dump($c);
 unset($a);
 unset($b);
 unset($c);
 ?>
---EXPECTF--
-string(10) "\82 \82¢\82¤\82¦\82¨" refcount(%d)
-string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(%d)
-string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(%d)
-string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(%d)
-array(1) refcount(%d){
+--EXPECT--
+string(10) "\82 \82¢\82¤\82¦\82¨"
+string(10) "¤¢¤¤¤¦¤¨¤ª"
+string(10) "¤¢¤¤¤¦¤¨¤ª"
+string(10) "¤¢¤¤¤¦¤¨¤ª"
+array(1) {
   [0]=>
-  string(10) "\82 \82¢\82¤\82¦\82¨" refcount(%d)
+  string(10) "\82 \82¢\82¤\82¦\82¨"
 }
-array(1) refcount(%d){
+array(1) {
   [0]=>
-  string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(%d)
+  string(10) "¤¢¤¤¤¦¤¨¤ª"
 }
-array(1) refcount(%d){
+array(1) {
   [0]=>
-  &string(10) "\82 \82¢\82¤\82¦\82¨" refcount(%d)
+  &string(10) "\82 \82¢\82¤\82¦\82¨"
 }
-array(1) refcount(%d){
+array(1) {
   [0]=>
-  string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(%d)
+  string(10) "¤¢¤¤¤¦¤¨¤ª"
 }
-array(1) refcount(%d){
+array(1) {
   [0]=>
-  string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(%d)
+  string(10) "¤¢¤¤¤¦¤¨¤ª"
 }
-array(1) refcount(%d){
+array(1) {
   [0]=>
-  string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(%d)
+  string(10) "¤¢¤¤¤¦¤¨¤ª"
 }
-array(1) refcount(%d){
+array(1) {
   [0]=>
-  string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(%d)
+  string(10) "¤¢¤¤¤¦¤¨¤ª"
 }
-array(1) refcount(%d){
+array(1) {
   [0]=>
-  string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(%d)
+  string(10) "¤¢¤¤¤¦¤¨¤ª"
 }
-array(1) refcount(%d){
+array(1) {
   [0]=>
-  array(1) refcount(%d){
+  array(1) {
     [0]=>
-    string(10) "\82 \82¢\82¤\82¦\82¨" refcount(%d)
+    string(10) "\82 \82¢\82¤\82¦\82¨"
   }
 }
-array(1) refcount(%d){
+array(1) {
   [0]=>
-  array(1) refcount(%d){
+  array(1) {
     [0]=>
-    string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(%d)
+    string(10) "¤¢¤¤¤¦¤¨¤ª"
   }
 }
index 2e97cd45d795a57db14b6cf54a9c2cd9292a9074..c6b34896d8410ea7ff8da73d2376899e50e34d44 100644 (file)
@@ -5,6 +5,8 @@ References to result sets
 require_once('skipif.inc');
 require_once('skipifconnectfailure.inc');
 ?>
+--INI--
+opcache.enable=0
 --FILE--
 <?php
     require_once('connect.inc');
@@ -136,9 +138,9 @@ array(1) refcount(2){
   [0]=>
   array(2) refcount(1){
     ["id"]=>
-    string(1) "1" refcount(%d)
+    string(1) "1" interned
     ["label"]=>
-    string(1) "a" refcount(%d)
+    string(1) "a" interned
   }
 }
 done!
index 3c44f8a309edcdcf8f0469908ba3c05cf907bac9..bdd37c79f3cf915256e72bccbf788c69c8737d4c 100644 (file)
@@ -59,14 +59,14 @@ array(1) refcount(%d){
     ["row_copy"]=>
     array(2) refcount(1){
       ["id"]=>
-      string(1) "1" refcount(%d)
+      string(1) "1" interned
       ["label"]=>
-      string(1) "a" refcount(%d)
+      string(1) "a" interned
     }
     ["id_ref"]=>
-    string(1) "1" refcount(%d)
+    string(1) "1" interned
     ["id_copy"]=>
-    string(1) "1" refcount(%d)
+    string(1) "1" interned
   }
 }
 array(2) refcount(%d){
@@ -77,35 +77,35 @@ array(2) refcount(%d){
     ["row_copy"]=>
     array(2) refcount(%d){
       ["id"]=>
-      string(1) "1" refcount(%d)
+      string(1) "1" interned
       ["label"]=>
-      string(1) "a" refcount(%d)
+      string(1) "a" interned
     }
     ["id_ref"]=>
-    string(1) "1" refcount(%d)
+    string(1) "1" interned
     ["id_copy"]=>
-    string(1) "1" refcount(%d)
+    string(1) "1" interned
   }
   [1]=>
   array(5) refcount(%d){
     ["row_ref"]=>
     &array(2) refcount(%d){
       ["id"]=>
-      &string(1) "2" refcount(%d)
+      &string(1) "2" interned
       ["label"]=>
-      string(1) "b" refcount(%d)
+      string(1) "b" interned
     }
     ["row_copy"]=>
     array(2) refcount(%d){
       ["id"]=>
-      string(1) "2" refcount(%d)
+      string(1) "2" interned
       ["label"]=>
-      string(1) "b" refcount(%d)
+      string(1) "b" interned
     }
     ["id_ref"]=>
-    &string(1) "2" refcount(%d)
+    &string(1) "2" interned
     ["id_copy"]=>
-    string(1) "2" refcount(%d)
+    string(1) "2" interned
     ["id_copy_mod"]=>
     int(2)
   }
index 2b5f8e0830e4807ff4f2fa2da877468e43bba3c4..ebe2f3928fdf4a19362f8d647a29df8fd4572765 100644 (file)
@@ -7,35 +7,35 @@ error_reporting(E_ALL);
 
 $a = unpack('C2', "\0224V");
 $b = array(1 => 18, 2 => 52);
-debug_zval_dump($a, $b);
+var_dump($a, $b);
 $k = array_keys($a);
 $l = array_keys($b);
-debug_zval_dump($k, $l);
+var_dump($k, $l);
 $i=$k[0];
 var_dump($a[$i]);
 $i=$l[0];
 var_dump($b[$i]);
 ?>
---EXPECTF--
-array(2) refcount(%d){
+--EXPECT--
+array(2) {
   [1]=>
   int(18)
   [2]=>
   int(52)
 }
-array(2) refcount(%d){
+array(2) {
   [1]=>
   int(18)
   [2]=>
   int(52)
 }
-array(2) refcount(%d){
+array(2) {
   [0]=>
   int(1)
   [1]=>
   int(2)
 }
-array(2) refcount(%d){
+array(2) {
   [0]=>
   int(1)
   [1]=>
index 0e695b69c97331fc946716584760e9fe0b7b9002..89cb1f2dbf596fd19638c30ddd6905d8f4a9bf6f 100644 (file)
@@ -21,7 +21,7 @@ function foo($ref, $alt) {
         $b = NULL;
     }
 
-    debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
+    var_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
     echo "--\n";
     if ($alt) {
         $a = &$GLOBALS['a'];
@@ -29,25 +29,25 @@ function foo($ref, $alt) {
     } else {
         extract($GLOBALS, EXTR_REFS);
     }
-    debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
+    var_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
     echo "--\n";
     $a = &$GLOBALS['a'];
     $b = &$GLOBALS['b'];
-    debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
+    var_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
     echo "--\n";
     $GLOBALS['b'] = 3;
-    debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
+    var_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
     echo "--\n";
     $a = 4;
-    debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
+    var_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
     echo "--\n";
     $c = $b;
-    debug_zval_dump($b, $GLOBALS['b'], $c);
+    var_dump($b, $GLOBALS['b'], $c);
     echo "--\n";
     $b = 'x';
-    debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b'], $c);
+    var_dump($a, $b, $GLOBALS['a'], $GLOBALS['b'], $c);
     echo "--\n";
-    debug_zval_dump($org_a, $org_b);
+    var_dump($org_a, $org_b);
     echo "----";
     if ($ref) echo 'r';
     if ($alt) echo 'a';
@@ -64,9 +64,9 @@ foo(true, true);
 foo(false, false);
 foo(true, false);
 
-debug_zval_dump($_a, $_b);
+var_dump($_a, $_b);
 ?>
---EXPECTF--
+--EXPECT--
 NULL
 NULL
 int(1)
@@ -97,9 +97,9 @@ int(3)
 int(3)
 --
 int(4)
-string(1) "x" refcount(%d)
+string(1) "x"
 int(4)
-string(1) "x" refcount(%d)
+string(1) "x"
 int(3)
 --
 int(1)
@@ -135,9 +135,9 @@ int(3)
 int(3)
 --
 int(4)
-string(1) "x" refcount(%d)
+string(1) "x"
 int(4)
-string(1) "x" refcount(%d)
+string(1) "x"
 int(3)
 --
 int(1)
@@ -173,9 +173,9 @@ int(3)
 int(3)
 --
 int(4)
-string(1) "x" refcount(%d)
+string(1) "x"
 int(4)
-string(1) "x" refcount(%d)
+string(1) "x"
 int(3)
 --
 int(1)
@@ -211,13 +211,13 @@ int(3)
 int(3)
 --
 int(4)
-string(1) "x" refcount(%d)
+string(1) "x"
 int(4)
-string(1) "x" refcount(%d)
+string(1) "x"
 int(3)
 --
 int(1)
 int(2)
 ----r
-string(2) "ok" refcount(%d)
-string(2) "ok" refcount(%d)
+string(2) "ok"
+string(2) "ok"
index 455ab2b3453cc064510303560331842f3190244f..87c8b519bfd643cbaecbf5c279dd4136c77e06d2 100644 (file)
Binary files a/ext/standard/tests/array/bug26458.phpt and b/ext/standard/tests/array/bug26458.phpt differ
index 63bb5625decae471d96364e2541761b2c3689641..87d9aac357e5e8a87e231fdf224a4dfd7b960f5c 100644 (file)
@@ -12,5 +12,5 @@ debug_zval_dump($a);
 --EXPECTF--
 array(1) refcount(%d){
   ["test"]=>
-  string(3) "xxx" refcount(%d)
+  string(3) "xxx" interned
 }
index 393f2d77cabef92d1b30d1923ee6b1aa3fb60dde..a9200d25c4db344cc68939272a92200696e86859 100644 (file)
@@ -3,7 +3,7 @@ Test extract() for overwrite of GLOBALS
 --FILE--
 <?php
 $str = "John";
-debug_zval_dump($GLOBALS["str"]);
+var_dump($GLOBALS["str"]);
 
 /* Extracting Global Variables */
 $splat = array("foo" => "bar");
@@ -11,13 +11,13 @@ var_dump(extract(array("GLOBALS" => $splat, EXTR_OVERWRITE)));
 
 unset ($splat);
 
-debug_zval_dump($GLOBALS["str"]);
+var_dump($GLOBALS["str"]);
 
 echo "\nDone";
 ?>
---EXPECTF--
-string(4) "John" refcount(%d)
+--EXPECT--
+string(4) "John"
 int(1)
-string(4) "John" refcount(%d)
+string(4) "John"
 
 Done
index a1f1faa303012f477ba2518ecb3e163c1962ad59..a629ae03608e8e126326145a1204324395ad8cc4 100644 (file)
@@ -6,21 +6,21 @@ Test extract() function (variation 1)
 $val = 4;
 $str = "John";
 
-debug_zval_dump($val);
-debug_zval_dump($str);
+var_dump($val);
+var_dump($str);
 
 /* Extracting Global Variables */
 var_dump(extract($GLOBALS, EXTR_REFS));
-debug_zval_dump($val);
-debug_zval_dump($str);
+var_dump($val);
+var_dump($str);
 
 echo "\nDone";
 ?>
 --EXPECTF--
 int(4)
-string(4) "John" refcount(%d)
+string(4) "John"
 int(%d)
 int(4)
-string(4) "John" refcount(%d)
+string(4) "John"
 
 Done
index 4719587ffc1e40c2b7a87d883e7bce31a9047ce1..f4aaec13a5e4f42fdc81432f1405c274d8613db3 100644 (file)
@@ -23,20 +23,20 @@ function & test2($arg1, $arg2)
 
 function test($func)
 {
-    debug_zval_dump($func('Direct', 'Call'));
-    debug_zval_dump(call_user_func_array($func, array('User', 'Func')));
+    var_dump($func('Direct', 'Call'));
+    var_dump(call_user_func_array($func, array('User', 'Func')));
 }
 
 test('test1');
 test('test2');
 
 ?>
---EXPECTF--
+--EXPECT--
 Direct Call
-string(5) "test1" refcount(%d)
+string(5) "test1"
 User Func
-string(5) "test1" refcount(%d)
+string(5) "test1"
 Direct Call
-string(5) "test2" refcount(%d)
+string(5) "test2"
 User Func
-string(5) "test2" refcount(%d)
+string(5) "test2"
index 5ce121b6a70f6030fc4e99e5e2788a2200c46566..0444ade190a520908d64514a64eb0a39ff48c14c 100644 (file)
Binary files a/ext/standard/tests/general_functions/debug_zval_dump_b.phpt and b/ext/standard/tests/general_functions/debug_zval_dump_b.phpt differ
index 6425249ca6fed1599e92f296f7900106d6b963ae..9302593cb2cad4789df4278bc9fb4c42ff0243d6 100644 (file)
Binary files a/ext/standard/tests/general_functions/debug_zval_dump_b_64bit.phpt and b/ext/standard/tests/general_functions/debug_zval_dump_b_64bit.phpt differ
index b195353703ee3e0a66804a6e61bc8cfa55113d9c..e248bdc8be1844de51f8881063887974930e5121 100644 (file)
@@ -2,6 +2,8 @@
 Test debug_zval_dump() function : working on objects
 --SKIPIF--
 <?php if (PHP_ZTS) { print "skip only for no-zts build"; }
+--INI--
+opcache.enable=0
 --FILE--
 <?php
 function zval_dump( $values ) {
index ad64ceebdb596ff03789ff789d99815ae4064607..17132874bf9cb3b7c77b8f591faf89febde8eca3 100644 (file)
@@ -188,11 +188,11 @@ NULL
 -- Iteration 4 --
 NULL
 -- Iteration 5 --
-string(7) "TRUE123" refcount(%d)
+string(7) "TRUE123" interned
 -- Iteration 6 --
-string(9) "123string" refcount(%d)
+string(9) "123string" interned
 -- Iteration 7 --
-string(9) "string123" refcount(%d)
+string(9) "string123" interned
 -- Iteration 8 --
-string(10) "NULLstring" refcount(%d)
+string(10) "NULLstring" interned
 Done
index f88aa21fe88ad48cbfbd6a5f1eeb3cdc04814247..91cc95c6bdf15678a554955302847a6ced2600c2 100644 (file)
@@ -299,7 +299,11 @@ again:
        case IS_STRING:
                php_printf("%sstring(%zd) \"", COMMON, Z_STRLEN_P(struc));
                PHPWRITE(Z_STRVAL_P(struc), Z_STRLEN_P(struc));
-               php_printf("\" refcount(%u)\n", Z_REFCOUNTED_P(struc) ? Z_REFCOUNT_P(struc) : 1);
+               if (Z_REFCOUNTED_P(struc)) {
+                       php_printf("\" refcount(%u)\n", Z_REFCOUNT_P(struc));
+               } else {
+                       PUTS("\" interned\n");
+               }
                break;
        case IS_ARRAY:
                myht = Z_ARRVAL_P(struc);
@@ -312,7 +316,12 @@ again:
                        GC_PROTECT_RECURSION(myht);
                }
                count = zend_hash_num_elements(myht);
-               php_printf("%sarray(%d) refcount(%u){\n", COMMON, count, Z_REFCOUNTED_P(struc) ? Z_REFCOUNT_P(struc) - 1 : 1);
+               if (Z_REFCOUNTED_P(struc)) {
+                       /* -1 because of ADDREF above. */
+                       php_printf("%sarray(%d) refcount(%u){\n", COMMON, count, Z_REFCOUNT_P(struc) - 1);
+               } else {
+                       php_printf("%sarray(%d) interned {\n", COMMON, count);
+               }
                ZEND_HASH_FOREACH_KEY_VAL(myht, index, key, val) {
                        zval_array_element_dump(val, index, key, level);
                } ZEND_HASH_FOREACH_END();