From: Anatoliy Belsky Date: Thu, 19 Apr 2012 09:20:16 +0000 (+0200) Subject: Fix bug 61671 ext\spl\tests\fileobject_003.phpt fails X-Git-Tag: php-5.3.14RC1~61 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=adfb4c62b76ef241978814e10cae70498f52ea29;p=php Fix bug 61671 ext\spl\tests\fileobject_003.phpt fails The solution was already introduced in 5.4 by Etienne Kneuss and Pierre but wasn't merged back into 5.3 . SplFileObject should not be used with directories. So just putting together all the necessary pieces from 5.4 --- 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===