1
0
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:
arshidkv12
2026-01-31 23:12:58 +05:30
committed by David Carlier
parent 31b0055557
commit fdaa488144
3 changed files with 66 additions and 0 deletions

3
NEWS
View File

@@ -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)

View File

@@ -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);

View 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