diff options
| -rw-r--r-- | ext/posix/posix.c | 4 | ||||
| -rw-r--r-- | ext/posix/tests/001.phpt | 12 |
2 files changed, 16 insertions, 0 deletions
diff --git a/ext/posix/posix.c b/ext/posix/posix.c index 418f1f1a6b..4d1d0be371 100644 --- a/ext/posix/posix.c +++ b/ext/posix/posix.c @@ -771,6 +771,10 @@ PHP_FUNCTION(posix_access) } path = expand_filepath(filename, NULL TSRMLS_CC); + if (!path) { + POSIX_G(last_error) = EIO; + RETURN_FALSE; + } if (php_check_open_basedir_ex(path, 0 TSRMLS_CC) || (PG(safe_mode) && (!php_checkuid_ex(filename, NULL, CHECKUID_CHECK_FILE_AND_DIR, CHECKUID_NO_ERRORS)))) { diff --git a/ext/posix/tests/001.phpt b/ext/posix/tests/001.phpt new file mode 100644 index 0000000000..e6c629ce63 --- /dev/null +++ b/ext/posix/tests/001.phpt @@ -0,0 +1,12 @@ +--TEST-- +posix_access() with bogus paths +--SKIPIF-- +<?php if (!extension_loaded('posix')) echo 'skip'; ?> +--FILE-- +<?php + +var_dump(posix_access(str_repeat('bogus path', 1042))); + +?> +--EXPECT-- +bool(false) |
