mirror of
https://github.com/php/php-src.git
synced 2024-12-14 12:26:19 +08:00
closeder/readdir/rewinddir must work only with directories
This commit is contained in:
parent
fbe28c49b3
commit
00ea3108ea
@ -282,6 +282,11 @@ PHP_FUNCTION(closedir)
|
||||
|
||||
FETCH_DIRP();
|
||||
|
||||
if (!(dirp->flags & PHP_STREAM_FLAG_IS_DIR)) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a valid Directory resource", dirp->rsrc_id);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
rsrc_id = dirp->rsrc_id;
|
||||
zend_list_delete(dirp->rsrc_id);
|
||||
|
||||
@ -384,6 +389,11 @@ PHP_FUNCTION(rewinddir)
|
||||
|
||||
FETCH_DIRP();
|
||||
|
||||
if (!(dirp->flags & PHP_STREAM_FLAG_IS_DIR)) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a valid Directory resource", dirp->rsrc_id);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
php_stream_rewinddir(dirp);
|
||||
}
|
||||
/* }}} */
|
||||
@ -398,6 +408,11 @@ PHP_NAMED_FUNCTION(php_if_readdir)
|
||||
|
||||
FETCH_DIRP();
|
||||
|
||||
if (!(dirp->flags & PHP_STREAM_FLAG_IS_DIR)) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a valid Directory resource", dirp->rsrc_id);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if (php_stream_readdir(dirp, &entry)) {
|
||||
RETURN_RT_STRINGL(entry.d_name, strlen(entry.d_name), ZSTR_DUPLICATE);
|
||||
}
|
||||
|
@ -33,3 +33,4 @@ resource(%d) of type (stream)
|
||||
|
||||
Warning: readdir(): %d is not a valid Directory resource in %s on line %d
|
||||
bool(false)
|
||||
===DONE===
|
||||
|
@ -69,16 +69,26 @@ resource(%d) of type (stream)
|
||||
resource(%d) of type (stream)
|
||||
|
||||
-- Read and rewind first directory (argument supplied) --
|
||||
unicode(1) "."
|
||||
unicode(2) ".."
|
||||
unicode(9) "file1.tmp"
|
||||
array(3) {
|
||||
[0]=>
|
||||
unicode(1) "."
|
||||
[1]=>
|
||||
unicode(2) ".."
|
||||
[2]=>
|
||||
unicode(9) "file1.tmp"
|
||||
}
|
||||
NULL
|
||||
unicode(1) "."
|
||||
|
||||
-- Read and rewind second directory (no argument supplied) --
|
||||
unicode(1) "."
|
||||
unicode(2) ".."
|
||||
unicode(9) "file2.tmp"
|
||||
array(3) {
|
||||
[0]=>
|
||||
unicode(1) "."
|
||||
[1]=>
|
||||
unicode(2) ".."
|
||||
[2]=>
|
||||
unicode(9) "file2.tmp"
|
||||
}
|
||||
NULL
|
||||
unicode(1) "."
|
||||
===DONE===
|
||||
|
@ -189,6 +189,8 @@ struct _php_stream_wrapper {
|
||||
|
||||
#define PHP_STREAM_FLAG_NO_CLOSE 32
|
||||
|
||||
#define PHP_STREAM_FLAG_IS_DIR 64
|
||||
|
||||
struct _php_stream {
|
||||
php_stream_ops *ops;
|
||||
void *abstract; /* convenience pointer for abstraction */
|
||||
|
@ -2279,7 +2279,7 @@ PHPAPI php_stream *_php_stream_opendir(char *path, int options,
|
||||
|
||||
if (stream) {
|
||||
stream->wrapper = wrapper;
|
||||
stream->flags |= PHP_STREAM_FLAG_NO_BUFFER;
|
||||
stream->flags |= PHP_STREAM_FLAG_NO_BUFFER | PHP_STREAM_FLAG_IS_DIR;
|
||||
}
|
||||
} else if (wrapper) {
|
||||
php_stream_wrapper_log_error(wrapper, options ^ REPORT_ERRORS TSRMLS_CC, "not implemented");
|
||||
|
Loading…
Reference in New Issue
Block a user