diff options
Diffstat (limited to 'ext')
-rwxr-xr-x | ext/spl/spl_directory.c | 4 | ||||
-rw-r--r-- | ext/spl/tests/bug46053.phpt | 12 |
2 files changed, 15 insertions, 1 deletions
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index 26c79b0dae..334e1dc6d3 100755 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -2469,7 +2469,9 @@ SPL_METHOD(SplFileObject, seek) spl_filesystem_file_rewind(getThis(), intern TSRMLS_CC); while(intern->u.file.current_line_num < line_pos) { - spl_filesystem_file_read_line(getThis(), intern, 1 TSRMLS_CC); + if (spl_filesystem_file_read_line(getThis(), intern, 1 TSRMLS_CC) == FAILURE) { + break; + } } } /* }}} */ diff --git a/ext/spl/tests/bug46053.phpt b/ext/spl/tests/bug46053.phpt new file mode 100644 index 0000000000..75da7f3bbf --- /dev/null +++ b/ext/spl/tests/bug46053.phpt @@ -0,0 +1,12 @@ +--TEST-- +Bug #46053 (SplFileObject::seek - Endless loop) +--FILE-- +<?php + +$x = new splfileobject(__FILE__); +$x->getPathName(); +$x->seek(10); +$x->seek(0); +var_dump(trim($x->fgets())); +--EXPECTF-- +string(%d) "<?php" |