]> granicus.if.org Git - php/commitdiff
- MFH: Fixed Bug #42272 (var_export() incorrectly escapes char(0)).
authorDerick Rethans <derick@php.net>
Sun, 9 Dec 2007 16:55:46 +0000 (16:55 +0000)
committerDerick Rethans <derick@php.net>
Sun, 9 Dec 2007 16:55:46 +0000 (16:55 +0000)
NEWS
ext/standard/tests/general_functions/bug42272.phpt [new file with mode: 0644]
ext/standard/tests/general_functions/var_export-locale.phpt
ext/standard/tests/general_functions/var_export.phpt
ext/standard/tests/strings/bug37262.phpt
ext/standard/var.c

diff --git a/NEWS b/NEWS
index 6381f0b2a0c0342c40e0d9774b18f084f6b88f28..aec5190051b8cae1895533de90bc61b96c5f8a61 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -43,6 +43,7 @@ PHP                                                                        NEWS
 - Fixed bug #42736 (xmlrpc_server_call_method() crashes). (Tony)
 - Fixed bug #42692 (Procedure 'int1' not present with doc/lit SoapServer).
   (Dmitry)
+- Fixed bug #42272 (var_export() incorrectly escapes char(0)). (Derick)
 - Fixed bug #42261 (Incorrect lengths for date and boolean data types).
   (Ilia)
 
diff --git a/ext/standard/tests/general_functions/bug42272.phpt b/ext/standard/tests/general_functions/bug42272.phpt
new file mode 100644 (file)
index 0000000..5a455d7
--- /dev/null
@@ -0,0 +1,11 @@
+--TEST--
+Bug #42272: var_export() incorrectly escapes char(0).
+--FILE--
+<?php
+$foo = var_export("\0", true );
+echo $foo, "\n";
+var_export("a\0b");
+?>
+--EXPECT--
+'' . "\0" . ''
+'a' . "\0" . 'b'
index 6d2df85424f5dde20dadeb1749e2561e6eb7aa74..81896550bceb57a31c22aff9af265c9b7c2b3742 100644 (file)
@@ -572,9 +572,9 @@ string(3) "'\v'"
 
 
 Iteration 12
-'\000'
-'\000'
-string(6) "'\000'"
+'' . "\0" . ''
+'' . "\0" . ''
+string(14) "'' . "\0" . ''"
 
 
 Iteration 13
index 2a99c5bd8a5657c211b0ef9f7c9386ef21084de7..b5cc886e4bde603fb8ca7dc2ca56515925441427 100644 (file)
@@ -565,9 +565,9 @@ string(3) "'\v'"
 
 
 Iteration 12
-'\000'
-'\000'
-string(6) "'\000'"
+'' . "\0" . ''
+'' . "\0" . ''
+string(14) "'' . "\0" . ''"
 
 
 Iteration 13
index 474251a816640b121119a1499d75bc3528757029..6fe2d9f379d9c80552ed6a71797f65636cfec9af 100644 (file)
@@ -6,4 +6,4 @@ $func = create_function('$a', 'return $a;');
 var_export($func);
 ?>
 --EXPECT--     
-'\000lambda_1'
+'' . "\0" . 'lambda_1'
index 0c5a82db52fb2cdcfa445f7c2faa87a9f8062b25..907589468b84c67e4f3b87f422400739cf160087 100644 (file)
@@ -389,8 +389,8 @@ static int php_object_element_export(zval **zv, int num_args, va_list args, zend
 PHPAPI void php_var_export(zval **struc, int level TSRMLS_DC)
 {
        HashTable *myht;
-       char*     tmp_str;
-       int       tmp_len;
+       char *tmp_str, *tmp_str2;
+       int tmp_len, tmp_len2;
        char *class_name;
        zend_uint class_name_len;
 
@@ -408,11 +408,13 @@ PHPAPI void php_var_export(zval **struc, int level TSRMLS_DC)
                php_printf("%.*H", (int) EG(precision), Z_DVAL_PP(struc));
                break;
        case IS_STRING:
-               tmp_str = php_addcslashes(Z_STRVAL_PP(struc), Z_STRLEN_PP(struc), &tmp_len, 0, "'\\\0", 3 TSRMLS_CC);
+               tmp_str = php_addcslashes(Z_STRVAL_PP(struc), Z_STRLEN_PP(struc), &tmp_len, 0, "'\\", 2 TSRMLS_CC);
+               tmp_str2 = php_str_to_str_ex(tmp_str, tmp_len, "\0", 1, "' . \"\\0\" . '", 12, &tmp_len2, 0, NULL);
                PUTS ("'");
-               PHPWRITE(tmp_str, tmp_len);
+               PHPWRITE(tmp_str2, tmp_len2);
                PUTS ("'");
-               efree (tmp_str);
+               efree(tmp_str2);
+               efree(tmp_str);
                break;
        case IS_ARRAY:
                myht = Z_ARRVAL_PP(struc);