diff options
Diffstat (limited to 'ext/standard/dir.c')
-rw-r--r-- | ext/standard/dir.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/ext/standard/dir.c b/ext/standard/dir.c index 470d886dd4..e5a0220141 100644 --- a/ext/standard/dir.c +++ b/ext/standard/dir.c @@ -325,6 +325,10 @@ PHP_FUNCTION(chdir) RETURN_FALSE; } + if (strlen(str) != str_len) { + RETURN_FALSE; + } + if ((PG(safe_mode) && !php_checkuid(str, NULL, CHECKUID_CHECK_FILE_AND_DIR)) || php_check_open_basedir(str TSRMLS_CC)) { RETURN_FALSE; } @@ -436,6 +440,10 @@ PHP_FUNCTION(glob) return; } + if (strlen(pattern) != pattern_len) { + RETURN_FALSE; + } + if (pattern_len >= MAXPATHLEN) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Pattern exceeds the maximum allowed length of %d characters", MAXPATHLEN); RETURN_FALSE; @@ -557,6 +565,10 @@ PHP_FUNCTION(scandir) return; } + if (strlen(dirn) != dirn_len) { + RETURN_FALSE; + } + if (dirn_len < 1) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Directory name cannot be empty"); RETURN_FALSE; |