pajoye Thu, 08 Sep 2011 23:07:48 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=316433
Log: - improve r316420 (SplFileObject cannot and should not accept directories) Changed paths: U php/php-src/branches/PHP_5_4/ext/spl/spl_directory.c U php/php-src/branches/PHP_5_4/ext/spl/tests/fileobject_003.phpt U php/php-src/trunk/ext/spl/spl_directory.c U php/php-src/trunk/ext/spl/tests/fileobject_003.phpt Modified: php/php-src/branches/PHP_5_4/ext/spl/spl_directory.c =================================================================== --- php/php-src/branches/PHP_5_4/ext/spl/spl_directory.c 2011-09-08 22:05:33 UTC (rev 316432) +++ php/php-src/branches/PHP_5_4/ext/spl/spl_directory.c 2011-09-08 23:07:48 UTC (rev 316433) @@ -251,7 +251,18 @@ 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; + } + 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) | REPORT_ERRORS, NULL, intern->u.file.context); @@ -2254,7 +2265,7 @@ zend_throw_exception_ex(spl_ce_LogicException, 0 TSRMLS_CC, "Cannot use SplFileObject with directories"); return; } - + if (spl_filesystem_file_open(intern, use_include_path, 0 TSRMLS_CC) == SUCCESS) { tmp_path_len = strlen(intern->u.file.stream->orig_path); Modified: php/php-src/branches/PHP_5_4/ext/spl/tests/fileobject_003.phpt =================================================================== --- php/php-src/branches/PHP_5_4/ext/spl/tests/fileobject_003.phpt 2011-09-08 22:05:33 UTC (rev 316432) +++ php/php-src/branches/PHP_5_4/ext/spl/tests/fileobject_003.phpt 2011-09-08 23:07:48 UTC (rev 316433) @@ -33,8 +33,12 @@ } catch (LogicException $e) { echo "LogicException: ".$e->getMessage()."\n"; } - $fo = $o->openFile(); - var_dump($fo->getPathName(), $fo->getFileName(), $fo->getPath()); + 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)); @@ -88,9 +92,7 @@ bool(true) bool(true) LogicException: Cannot use SplFileObject with directories -string(%d) "%stests" -string(%d) "tests" -string(%d) "%sspl" +LogicException: Cannot use SplFileObject with directories ===2=== object(SplFileInfo)#%d (2) { ["pathName":"SplFileInfo":private]=> @@ -108,7 +110,5 @@ bool(true) bool(true) LogicException: Cannot use SplFileObject with directories -string(%d) "%stests" -string(5) "tests" -string(%d) "%sspl" +LogicException: Cannot use SplFileObject with directories ===DONE=== Modified: php/php-src/trunk/ext/spl/spl_directory.c =================================================================== --- php/php-src/trunk/ext/spl/spl_directory.c 2011-09-08 22:05:33 UTC (rev 316432) +++ php/php-src/trunk/ext/spl/spl_directory.c 2011-09-08 23:07:48 UTC (rev 316433) @@ -251,7 +251,18 @@ 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; + } + 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) | REPORT_ERRORS, NULL, intern->u.file.context); @@ -2255,7 +2266,7 @@ zend_throw_exception_ex(spl_ce_LogicException, 0 TSRMLS_CC, "Cannot use SplFileObject with directories"); return; } - + if (spl_filesystem_file_open(intern, use_include_path, 0 TSRMLS_CC) == SUCCESS) { tmp_path_len = strlen(intern->u.file.stream->orig_path); Modified: php/php-src/trunk/ext/spl/tests/fileobject_003.phpt =================================================================== --- php/php-src/trunk/ext/spl/tests/fileobject_003.phpt 2011-09-08 22:05:33 UTC (rev 316432) +++ php/php-src/trunk/ext/spl/tests/fileobject_003.phpt 2011-09-08 23:07:48 UTC (rev 316433) @@ -33,8 +33,12 @@ } catch (LogicException $e) { echo "LogicException: ".$e->getMessage()."\n"; } - $fo = $o->openFile(); - var_dump($fo->getPathName(), $fo->getFileName(), $fo->getPath()); + 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)); @@ -88,9 +92,7 @@ bool(true) bool(true) LogicException: Cannot use SplFileObject with directories -string(%d) "%stests" -string(%d) "tests" -string(%d) "%sspl" +LogicException: Cannot use SplFileObject with directories ===2=== object(SplFileInfo)#%d (2) { ["pathName":"SplFileInfo":private]=> @@ -108,7 +110,5 @@ bool(true) bool(true) LogicException: Cannot use SplFileObject with directories -string(%d) "%stests" -string(5) "tests" -string(%d) "%sspl" +LogicException: Cannot use SplFileObject with directories ===DONE===
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php