diff --git a/NEWS b/NEWS index e26c9eca2fdb0..b19b09c21442d 100644 --- a/NEWS +++ b/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) diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index a3a796628bbc2..4b5d9d577c5db 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -3023,10 +3023,7 @@ PHP_FUNCTION(pg_lo_export) pgsql = link->conn; - if (lo_export(pgsql, oid, ZSTR_VAL(file_out)) == -1) { - RETURN_FALSE; - } - RETURN_TRUE; + RETURN_BOOL(lo_export(pgsql, oid, ZSTR_VAL(file_out)) != -1); } /* }}} */ @@ -3863,10 +3860,8 @@ PHP_FUNCTION(pg_connection_reset) pgsql = link->conn; PQreset(pgsql); - if (PQstatus(pgsql) == CONNECTION_BAD) { - RETURN_FALSE; - } - RETURN_TRUE; + + RETURN_BOOL(PQstatus(pgsql) != CONNECTION_BAD); } /* }}} */ diff --git a/ext/posix/posix.c b/ext/posix/posix.c index b7acf8c751270..76e14f6ecb0c6 100644 --- a/ext/posix/posix.c +++ b/ext/posix/posix.c @@ -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); diff --git a/ext/posix/tests/posix_access_flags.phpt b/ext/posix/tests/posix_access_flags.phpt new file mode 100644 index 0000000000000..0989e2a2bc661 --- /dev/null +++ b/ext/posix/tests/posix_access_flags.phpt @@ -0,0 +1,54 @@ +--TEST-- +posix_access() flag (mode) validation +--SKIPIF-- + +--FILE-- +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-- + +--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