mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
ext/posix: validity check for flags argument in posix_access
close GH-21104
This commit is contained in:
committed by
David Carlier
parent
31b0055557
commit
fdaa488144
3
NEWS
3
NEWS
@@ -78,6 +78,9 @@ PHP NEWS
|
||||
. Mark Phar::buildFromIterator() base directory argument as a path.
|
||||
(ndossche)
|
||||
|
||||
- Posix:
|
||||
. Added validity check to the flags argument for posix_access(). (arshidkv12)
|
||||
|
||||
- Reflection:
|
||||
. Fixed bug GH-20217 (ReflectionClass::isIterable() incorrectly returns true
|
||||
for classes with property hooks). (alexandre-daubois)
|
||||
|
||||
@@ -744,6 +744,15 @@ PHP_FUNCTION(posix_access)
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if (mode < 0 || (mode & ~(F_OK | R_OK | W_OK | X_OK))) {
|
||||
zend_argument_value_error(
|
||||
2,
|
||||
"must be a bitmask of POSIX_F_OK, POSIX_R_OK, POSIX_W_OK, and POSIX_X_OK"
|
||||
);
|
||||
efree(path);
|
||||
RETURN_THROWS();
|
||||
}
|
||||
|
||||
ret = access(path, mode);
|
||||
efree(path);
|
||||
|
||||
|
||||
54
ext/posix/tests/posix_access_flags.phpt
Normal file
54
ext/posix/tests/posix_access_flags.phpt
Normal file
@@ -0,0 +1,54 @@
|
||||
--TEST--
|
||||
posix_access() flag (mode) validation
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!function_exists("posix_access")) {
|
||||
die("skip no posix_access()");
|
||||
}
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$dir = __DIR__;
|
||||
$testfile = "$dir/testfile.txt";
|
||||
|
||||
// Create a temporary file for valid access tests
|
||||
file_put_contents($testfile, "hello");
|
||||
|
||||
try {
|
||||
posix_access($testfile, -1);
|
||||
} catch (ValueError $e) {
|
||||
echo $e->getMessage(), "\n";
|
||||
}
|
||||
|
||||
try {
|
||||
posix_access($testfile, 01000); // S_ISVTX bit (sticky)
|
||||
} catch (ValueError $e) {
|
||||
echo $e->getMessage(), "\n";
|
||||
}
|
||||
|
||||
try {
|
||||
posix_access($testfile, 02000); // S_ISGID bit
|
||||
} catch (ValueError $e) {
|
||||
echo $e->getMessage(), "\n";
|
||||
}
|
||||
|
||||
if (posix_access($testfile, POSIX_R_OK | POSIX_W_OK)) {
|
||||
echo "Read/write access OK\n";
|
||||
}
|
||||
|
||||
if (posix_access($testfile, POSIX_F_OK)) {
|
||||
echo "File exists OK\n";
|
||||
}
|
||||
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@unlink(__DIR__ . '/testfile.txt');
|
||||
?>
|
||||
--EXPECTF--
|
||||
posix_access(): Argument #2 ($flags) must be a bitmask of POSIX_F_OK, POSIX_R_OK, POSIX_W_OK, and POSIX_X_OK
|
||||
posix_access(): Argument #2 ($flags) must be a bitmask of POSIX_F_OK, POSIX_R_OK, POSIX_W_OK, and POSIX_X_OK
|
||||
posix_access(): Argument #2 ($flags) must be a bitmask of POSIX_F_OK, POSIX_R_OK, POSIX_W_OK, and POSIX_X_OK
|
||||
Read/write access OK
|
||||
File exists OK
|
||||
Reference in New Issue
Block a user