]> granicus.if.org Git - php/commitdiff
Fixed bug #74719
authoralexanderholman <alexander@holman.org.uk>
Fri, 5 Jan 2018 00:42:06 +0000 (00:42 +0000)
committerNikita Popov <nikita.ppv@gmail.com>
Wed, 17 Jan 2018 11:46:59 +0000 (12:46 +0100)
Allow stream context arguments for fopen, rename, unlink, mkdir
and rmdir to be null.

NEWS
ext/standard/file.c
ext/standard/tests/file/bug74719.phpt [new file with mode: 0644]
ext/standard/tests/file/fopen_variation4.phpt
ext/standard/tests/file/mkdir_variation4.phpt
ext/standard/tests/file/rename_variation10.phpt
ext/standard/tests/file/rmdir_variation2.phpt
ext/standard/tests/file/unlink_error-win32-mb.phpt
ext/standard/tests/file/unlink_error-win32.phpt
ext/standard/tests/file/unlink_error.phpt
ext/standard/tests/file/unlink_variation7.phpt

diff --git a/NEWS b/NEWS
index 6dad61245a483f3cafc4ae370d5a82e77b3e258f..fd1e6104ba394293fe1f5c6c088e1ae672584532 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -160,10 +160,11 @@ PHP                                                                        NEWS
     used). (Anton Artamonov)
 
 - Standard:
-  . Fixed unzserialize(), to disable creation of unsupported data structures
+  . Fixed unserialize(), to disable creation of unsupported data structures
     through manually crafted strings. (Dmitry)
   . Fixed bug #75409 (accept EFAULT in addition to ENOSYS as indicator 
     that getrandom() is missing). (sarciszewski)
+  . Fixed bug #74719 (fopen() should accept NULL as context). (Alexander Holman)
 
 - Testing:
   . Implemented request #62055 (Make run-tests.php support --CGI-- sections).
index 9c69874c7916056a6c7420293a19f7bf979ed501..d5b52e0b72f422bf16f3af04808f5804c37731ae 100644 (file)
@@ -883,7 +883,7 @@ PHP_NAMED_FUNCTION(php_if_fopen)
                Z_PARAM_STRING(mode, mode_len)
                Z_PARAM_OPTIONAL
                Z_PARAM_BOOL(use_include_path)
-               Z_PARAM_RESOURCE(zcontext)
+               Z_PARAM_RESOURCE_EX(zcontext, 1, 0)
        ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
 
        context = php_stream_context_from_zval(zcontext, 0);
@@ -1346,7 +1346,7 @@ PHP_FUNCTION(mkdir)
                Z_PARAM_OPTIONAL
                Z_PARAM_LONG(mode)
                Z_PARAM_BOOL(recursive)
-               Z_PARAM_RESOURCE(zcontext)
+               Z_PARAM_RESOURCE_EX(zcontext, 1, 0)
        ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
 
        context = php_stream_context_from_zval(zcontext, 0);
@@ -1367,7 +1367,7 @@ PHP_FUNCTION(rmdir)
        ZEND_PARSE_PARAMETERS_START(1, 2)
                Z_PARAM_PATH(dir, dir_len)
                Z_PARAM_OPTIONAL
-               Z_PARAM_RESOURCE(zcontext)
+               Z_PARAM_RESOURCE_EX(zcontext, 1, 0)
        ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
 
        context = php_stream_context_from_zval(zcontext, 0);
@@ -1469,7 +1469,7 @@ PHP_FUNCTION(rename)
                Z_PARAM_PATH(old_name, old_name_len)
                Z_PARAM_PATH(new_name, new_name_len)
                Z_PARAM_OPTIONAL
-               Z_PARAM_RESOURCE(zcontext)
+               Z_PARAM_RESOURCE_EX(zcontext, 1, 0)
        ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
 
        wrapper = php_stream_locate_url_wrapper(old_name, NULL, 0);
@@ -1508,7 +1508,7 @@ PHP_FUNCTION(unlink)
        ZEND_PARSE_PARAMETERS_START(1, 2)
                Z_PARAM_PATH(filename, filename_len)
                Z_PARAM_OPTIONAL
-               Z_PARAM_RESOURCE(zcontext)
+               Z_PARAM_RESOURCE_EX(zcontext, 1, 0)
        ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
 
        context = php_stream_context_from_zval(zcontext, 0);
@@ -1665,7 +1665,7 @@ PHP_FUNCTION(copy)
                Z_PARAM_PATH(source, source_len)
                Z_PARAM_PATH(target, target_len)
                Z_PARAM_OPTIONAL
-               Z_PARAM_RESOURCE(zcontext)
+               Z_PARAM_RESOURCE_EX(zcontext, 1, 0)
        ZEND_PARSE_PARAMETERS_END();
 
        if (php_check_open_basedir(source)) {
diff --git a/ext/standard/tests/file/bug74719.phpt b/ext/standard/tests/file/bug74719.phpt
new file mode 100644 (file)
index 0000000..57309bc
--- /dev/null
@@ -0,0 +1,43 @@
+--TEST--
+Bug #74719 Allow NULL as context, testing fopen, rename, unlink, mkdir and rmdir
+--CREDITS--
+Alexander Holman <alexander@holman.org.uk>
+--FILE--
+<?php
+
+// fopen
+$tmpFile = __DIR__ . "/bug74719.tmp";
+$h = fopen($tmpFile, "w", false, NULL);
+if ($h !== false) {
+    echo "ok\n";
+    fclose($h);
+}
+
+$newTmpFile = __DIR__ . "/bug74719_renamed.tmp";
+if (rename($tmpFile, $newTmpFile, NULL)) {
+    echo "ok\n";
+}
+
+if (unlink($newTmpFile, NULL)) {
+    echo "ok\n";
+}
+
+$tmpDir = __DIR__ . "/bug74719_dir";
+
+if (mkdir($tmpDir, 0777, false, NULL)) {
+    echo "ok\n";
+}
+
+if (rmdir($tmpDir, NULL)) {
+    echo "ok\n";
+}
+
+?>
+===DONE===
+--EXPECT--
+ok
+ok
+ok
+ok
+ok
+===DONE===
index 38f5fefe62b51192bf86efc82d7515b7261b1959..4bd5b2a446e32be0bf92615896de29998798dea5 100644 (file)
@@ -182,12 +182,10 @@ Error: 2 - fopen() expects parameter 4 to be resource, array given, %s(%d)
 bool(false)
 
 --uppercase NULL--
-Error: 2 - fopen() expects parameter 4 to be resource, null given, %s(%d)
-bool(false)
+ok
 
 --lowercase null--
-Error: 2 - fopen() expects parameter 4 to be resource, null given, %s(%d)
-bool(false)
+ok
 
 --lowercase true--
 Error: 2 - fopen() expects parameter 4 to be resource, boolean given, %s(%d)
@@ -238,12 +236,10 @@ Error: 2 - fopen() expects parameter 4 to be resource, object given, %s(%d)
 bool(false)
 
 --undefined var--
-Error: 2 - fopen() expects parameter 4 to be resource, null given, %s(%d)
-bool(false)
+ok
 
 --unset var--
-Error: 2 - fopen() expects parameter 4 to be resource, null given, %s(%d)
-bool(false)
+ok
 
 --file resource--
 Error: 2 - fopen(): supplied resource is not a valid Stream-Context resource, %s(%d)
index deb6ff4a450c906467660199f290d389fc9fe3e7..a866f8d16f691b6201bcedbb716d9649dad028de 100644 (file)
@@ -167,10 +167,10 @@ Error: 2 - mkdir() expects parameter 4 to be resource, array given, %s(%d)
 Error: 2 - mkdir() expects parameter 4 to be resource, array given, %s(%d)
 
 --uppercase NULL--
-Error: 2 - mkdir() expects parameter 4 to be resource, null given, %s(%d)
+Directory created
 
 --lowercase null--
-Error: 2 - mkdir() expects parameter 4 to be resource, null given, %s(%d)
+Directory created
 
 --lowercase true--
 Error: 2 - mkdir() expects parameter 4 to be resource, boolean given, %s(%d)
@@ -209,10 +209,10 @@ Error: 2 - mkdir() expects parameter 4 to be resource, object given, %s(%d)
 Error: 2 - mkdir() expects parameter 4 to be resource, object given, %s(%d)
 
 --undefined var--
-Error: 2 - mkdir() expects parameter 4 to be resource, null given, %s(%d)
+Directory created
 
 --unset var--
-Error: 2 - mkdir() expects parameter 4 to be resource, null given, %s(%d)
+Directory created
 
 --file resource--
 Error: 2 - mkdir(): supplied resource is not a valid Stream-Context resource, %s(%d)
index 42909ee484d065359951218f91e3340a1b1cd92e..5c81757ed80cf84e0172087af06267aa3572e778 100644 (file)
@@ -184,12 +184,10 @@ Error: 2 - rename() expects parameter 3 to be resource, array given, %s(%d)
 bool(false)
 
 --uppercase NULL--
-Error: 2 - rename() expects parameter 3 to be resource, null given, %s(%d)
-bool(false)
+bool(true)
 
 --lowercase null--
-Error: 2 - rename() expects parameter 3 to be resource, null given, %s(%d)
-bool(false)
+bool(true)
 
 --lowercase true--
 Error: 2 - rename() expects parameter 3 to be resource, boolean given, %s(%d)
@@ -240,12 +238,10 @@ Error: 2 - rename() expects parameter 3 to be resource, object given, %s(%d)
 bool(false)
 
 --undefined var--
-Error: 2 - rename() expects parameter 3 to be resource, null given, %s(%d)
-bool(false)
+bool(true)
 
 --unset var--
-Error: 2 - rename() expects parameter 3 to be resource, null given, %s(%d)
-bool(false)
+bool(true)
 
 --file resource--
 Error: 2 - rename(): supplied resource is not a valid Stream-Context resource, %s(%d)
index 7b4311c2455371cf55faf182c9127d199ee6c352..6053018f42d74b97f57b953fbfbec5125be11215 100644 (file)
@@ -175,12 +175,10 @@ Error: 2 - rmdir() expects parameter 2 to be resource, array given, %s(%d)
 bool(false)
 
 --uppercase NULL--
-Error: 2 - rmdir() expects parameter 2 to be resource, null given, %s(%d)
-bool(false)
+bool(true)
 
 --lowercase null--
-Error: 2 - rmdir() expects parameter 2 to be resource, null given, %s(%d)
-bool(false)
+bool(true)
 
 --lowercase true--
 Error: 2 - rmdir() expects parameter 2 to be resource, boolean given, %s(%d)
@@ -231,12 +229,10 @@ Error: 2 - rmdir() expects parameter 2 to be resource, object given, %s(%d)
 bool(false)
 
 --undefined var--
-Error: 2 - rmdir() expects parameter 2 to be resource, null given, %s(%d)
-bool(false)
+bool(true)
 
 --unset var--
-Error: 2 - rmdir() expects parameter 2 to be resource, null given, %s(%d)
-bool(false)
+bool(true)
 
 --0--
 Error: 2 - rmdir(): supplied resource is not a valid Stream-Context resource, %s(%d)
index 4ce4ca796a7ff9836fea2cbed483066c1ef8d1b1..51afc369b7ef85c20cb1db3b0d8f9345e4d1ee69 100644 (file)
@@ -45,7 +45,6 @@ var_dump( file_exists(false) );  // confirm file doesnt exist
 
 var_dump( unlink($filename, '') );  // $context as empty string
 var_dump( unlink($filename, false) );  // $context as boolean false
-var_dump( unlink($filename, NULL) );  // $context as NULL
 
 
 echo "\n-- Testing unlink() on non-existent file --\n";
@@ -98,9 +97,6 @@ bool(false)
 Warning: unlink() expects parameter 2 to be resource, boolean given in %s on line %d
 bool(false)
 
-Warning: unlink() expects parameter 2 to be resource, null given in %s on line %d
-bool(false)
-
 -- Testing unlink() on non-existent file --
 
 Warning: unlink(%s/non_existent_file.tmp): No such file or directory in %s on line %d
index f7a123919ff39218acdc4613db905a30415d2880..305e989962cc70910ec948805777dcc1f5d41667 100644 (file)
@@ -43,7 +43,6 @@ var_dump( file_exists(false) );  // confirm file doesnt exist
 
 var_dump( unlink($filename, '') );  // $context as empty string
 var_dump( unlink($filename, false) );  // $context as boolean false
-var_dump( unlink($filename, NULL) );  // $context as NULL
 
 
 echo "\n-- Testing unlink() on non-existent file --\n";
@@ -95,9 +94,6 @@ bool(false)
 Warning: unlink() expects parameter 2 to be resource, boolean given in %s on line %d
 bool(false)
 
-Warning: unlink() expects parameter 2 to be resource, null given in %s on line %d
-bool(false)
-
 -- Testing unlink() on non-existent file --
 
 Warning: unlink(%s/non_existent_file.tmp): No such file or directory in %s on line %d
index ae888bce4acb6303e136a62361e7b9a24066cdd6..b1af8fd7362021562ceb1c478240c03b5922bc01 100644 (file)
@@ -43,7 +43,6 @@ var_dump( file_exists(false) );  // confirm file doesnt exist
 
 var_dump( unlink($filename, '') );  // $context as empty string
 var_dump( unlink($filename, false) );  // $context as boolean false
-var_dump( unlink($filename, NULL) );  // $context as NULL
 
 
 echo "\n-- Testing unlink() on non-existent file --\n";
@@ -95,9 +94,6 @@ bool(false)
 Warning: unlink() expects parameter 2 to be resource, boolean given in %s on line %d
 bool(false)
 
-Warning: unlink() expects parameter 2 to be resource, null given in %s on line %d
-bool(false)
-
 -- Testing unlink() on non-existent file --
 
 Warning: unlink(%s/non_existent_file.tmp): No such file or directory in %s on line %d
index 64a2607d5f5ce3b376a8ffc28a41e44df1f8bb24..f165e4e9c2d665708e38746502d92d77c0816276 100644 (file)
@@ -177,12 +177,10 @@ Error: 2 - unlink() expects parameter 2 to be resource, array given, %s(%d)
 bool(false)
 
 --uppercase NULL--
-Error: 2 - unlink() expects parameter 2 to be resource, null given, %s(%d)
-bool(false)
+bool(true)
 
 --lowercase null--
-Error: 2 - unlink() expects parameter 2 to be resource, null given, %s(%d)
-bool(false)
+bool(true)
 
 --lowercase true--
 Error: 2 - unlink() expects parameter 2 to be resource, boolean given, %s(%d)
@@ -233,12 +231,10 @@ Error: 2 - unlink() expects parameter 2 to be resource, object given, %s(%d)
 bool(false)
 
 --undefined var--
-Error: 2 - unlink() expects parameter 2 to be resource, null given, %s(%d)
-bool(false)
+bool(true)
 
 --unset var--
-Error: 2 - unlink() expects parameter 2 to be resource, null given, %s(%d)
-bool(false)
+bool(true)
 
 --file resource--
 Error: 2 - unlink(): supplied resource is not a valid Stream-Context resource, %s(%d)