diff options
-rwxr-xr-x | ext/spl/spl_directory.c | 11 | ||||
-rw-r--r-- | ext/spl/tests/SplFileObject_fflush_basic_001.phpt | 5 | ||||
-rw-r--r-- | ext/spl/tests/SplFileObject_ftruncate_error_001.phpt | 3 | ||||
-rwxr-xr-x | ext/spl/tests/fileobject_003.phpt | 59 |
4 files changed, 43 insertions, 35 deletions
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index 04da4e6afe..aaa256de7b 100755 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -271,7 +271,18 @@ static void spl_filesystem_dir_open(spl_filesystem_object* intern, char *path TS static int spl_filesystem_file_open(spl_filesystem_object *intern, int use_include_path, int silent TSRMLS_DC) /* {{{ */ { + zval tmp; + intern->type = SPL_FS_FILE; + + php_stat(intern->file_name, intern->file_name_len, FS_IS_DIR, &tmp TSRMLS_CC); + if (Z_LVAL(tmp)) { + intern->u.file.open_mode = NULL; + intern->file_name = NULL; + zend_throw_exception_ex(spl_ce_LogicException, 0 TSRMLS_CC, "Cannot use SplFileObject with directories"); + return FAILURE; + } + intern->u.file.context = php_stream_context_from_zval(intern->u.file.zcontext, 0); intern->u.file.stream = php_stream_open_wrapper_ex(intern->file_name, intern->u.file.open_mode, (use_include_path ? USE_PATH : 0) | ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL, intern->u.file.context); diff --git a/ext/spl/tests/SplFileObject_fflush_basic_001.phpt b/ext/spl/tests/SplFileObject_fflush_basic_001.phpt index baab156f68..2d8a9c8044 100644 --- a/ext/spl/tests/SplFileObject_fflush_basic_001.phpt +++ b/ext/spl/tests/SplFileObject_fflush_basic_001.phpt @@ -17,9 +17,12 @@ class VariableStream { var $varname; function stream_open($path, $mode, $options, &$opened_path) - { + { return true; } + + function url_stat() { + } } stream_wrapper_register("SPLtest", "VariableStream"); $ftruncate_test = ""; diff --git a/ext/spl/tests/SplFileObject_ftruncate_error_001.phpt b/ext/spl/tests/SplFileObject_ftruncate_error_001.phpt index 90b27ec416..a2eef604f1 100644 --- a/ext/spl/tests/SplFileObject_ftruncate_error_001.phpt +++ b/ext/spl/tests/SplFileObject_ftruncate_error_001.phpt @@ -12,6 +12,9 @@ class VariableStream { { return true; } + + function url_stat() { + } } stream_wrapper_register("SPLtest", "VariableStream"); $ftruncate_test = ""; diff --git a/ext/spl/tests/fileobject_003.phpt b/ext/spl/tests/fileobject_003.phpt index 6679673700..6cc650b7b5 100755 --- a/ext/spl/tests/fileobject_003.phpt +++ b/ext/spl/tests/fileobject_003.phpt @@ -18,20 +18,27 @@ function test($name, $lc, $lp) var_dump($o == $c); var_dump($o->getPathname() == $c->getPathname()); - $f = new SplFileObject($name); - var_dump($name); - var_dump($f->getPathName()); - $l = substr($f->getPathName(), -1); - var_dump($l != '/' && $l != '\\' && $l == $lc); - var_dump($f->getFileName()); - $l = substr($f->getFileName(), -1); - var_dump($l != '/' && $l != '\\' && $l == $lc); - var_dump($f->getPath()); - $l = substr($f->getPath(), -1); - var_dump($l != '/' && $l != '\\' && $l == $lp); - - $fo = $o->openFile(); - var_dump($fo->getPathName(), $fo->getFileName(), $fo->getPath()); + try { + $f = new SplFileObject($name); + var_dump($name); + var_dump($f->getPathName()); + $l = substr($f->getPathName(), -1); + var_dump($l != '/' && $l != '\\' && $l == $lc); + var_dump($f->getFileName()); + $l = substr($f->getFileName(), -1); + var_dump($l != '/' && $l != '\\' && $l == $lc); + var_dump($f->getPath()); + $l = substr($f->getPath(), -1); + var_dump($l != '/' && $l != '\\' && $l == $lp); + } catch (LogicException $e) { + echo "LogicException: ".$e->getMessage()."\n"; + } + try { + $fo = $o->openFile(); + var_dump($fo->getPathName(), $fo->getFileName(), $fo->getPath()); + } catch (LogicException $e) { + echo "LogicException: ".$e->getMessage()."\n"; + } } test(dirname(__FILE__) . '/' . 'fileobject_001a.txt', 't', substr(dirname(__FILE__),-1)); @@ -84,16 +91,8 @@ object(SplFileInfo)#%d (2) { bool(false) bool(true) bool(true) -%s(%d) "%stests/" -string(%d) "%stests" -bool(true) -string(5) "tests" -bool(true) -string(%d) "%sspl" -bool(true) -string(%d) "%stests" -string(%d) "tests" -string(%d) "%sspl" +LogicException: Cannot use SplFileObject with directories +LogicException: Cannot use SplFileObject with directories ===2=== object(SplFileInfo)#%d (2) { ["pathName":"SplFileInfo":private]=> @@ -110,14 +109,6 @@ object(SplFileInfo)#%d (2) { bool(false) bool(true) bool(true) -%s(%d) "%stests" -string(%d) "%stests" -bool(true) -string(%d) "tests" -bool(true) -string(%d) "%sspl" -bool(true) -string(%d) "%stests" -string(5) "tests" -string(%d) "%sspl" +LogicException: Cannot use SplFileObject with directories +LogicException: Cannot use SplFileObject with directories ===DONE=== |