From 1e7afbd281350858286bbb55ef2255fe939da937 Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Tue, 5 Jul 2022 21:28:59 +0100 Subject: [PATCH] Revert "Fix GH-8563 Different results for seek() on SplFileObject and SplTempFileObject" Although the fix is partially correct it also breaks long standing behaviour which has been produced since PHP 5.3. This reverts commit 6f87a5c6338d0d64d18e3a44b65c19acc9c529e8. This was cherry-picked to PHP-8.1.8 from 79a283240eb8a288667de95c9590064e98caf2a6 --- ext/spl/spl_directory.c | 23 ++++----- .../fgetcsv_file_empty_lines.phpt | 38 --------------- .../foreach_file_empty_lines.phpt | 37 -------------- ext/spl/tests/SplFileObject/gh8563.phpt | 48 ------------------- .../SplFileObject_fgetcsv_basic.phpt | 2 - .../SplFileObject_key_error001.phpt | 2 +- .../SplFileObject_key_error002.phpt | 2 +- ext/spl/tests/bug81477.phpt | 1 + ext/spl/tests/fileobject_001.phpt | 2 +- 9 files changed, 16 insertions(+), 139 deletions(-) delete mode 100644 ext/spl/tests/SplFileObject/fgetcsv_file_empty_lines.phpt delete mode 100644 ext/spl/tests/SplFileObject/foreach_file_empty_lines.phpt delete mode 100644 ext/spl/tests/SplFileObject/gh8563.phpt rename ext/spl/tests/{SplFileObject => }/SplFileObject_fgetcsv_basic.phpt (92%) rename ext/spl/tests/{SplFileObject => }/SplFileObject_key_error001.phpt (97%) rename ext/spl/tests/{SplFileObject => }/SplFileObject_key_error002.phpt (97%) diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index b461d0bc27e..4edc6361605 100644 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -1891,21 +1891,22 @@ static zend_result spl_filesystem_file_read_ex(spl_filesystem_object *intern, bo } if (!buf) { - return FAILURE; - } - - if (SPL_HAS_FLAG(intern->flags, SPL_FILE_OBJECT_DROP_NEW_LINE)) { - if (line_len > 0 && buf[line_len - 1] == '\n') { - line_len--; - if (line_len > 0 && buf[line_len - 1] == '\r') { + intern->u.file.current_line = estrdup(""); + intern->u.file.current_line_len = 0; + } else { + if (SPL_HAS_FLAG(intern->flags, SPL_FILE_OBJECT_DROP_NEW_LINE)) { + if (line_len > 0 && buf[line_len - 1] == '\n') { line_len--; + if (line_len > 0 && buf[line_len - 1] == '\r') { + line_len--; + } + buf[line_len] = '\0'; } - buf[line_len] = '\0'; } - } - intern->u.file.current_line = buf; - intern->u.file.current_line_len = line_len; + intern->u.file.current_line = buf; + intern->u.file.current_line_len = line_len; + } intern->u.file.current_line_num += line_add; return SUCCESS; diff --git a/ext/spl/tests/SplFileObject/fgetcsv_file_empty_lines.phpt b/ext/spl/tests/SplFileObject/fgetcsv_file_empty_lines.phpt deleted file mode 100644 index bcd68eeadba..00000000000 --- a/ext/spl/tests/SplFileObject/fgetcsv_file_empty_lines.phpt +++ /dev/null @@ -1,38 +0,0 @@ ---TEST-- -SplFileObject::fgetcsv with empty lines ---FILE-- -fwrite("foo,bar\n"); -$file->fwrite("\n"); -$file->fwrite("baz,qux"); - -$file->rewind(); - - -var_dump($file->fgetcsv()); -var_dump($file->fgetcsv()); -var_dump($file->fgetcsv()); -var_dump($file->fgetcsv()); - -?> ---EXPECT-- -array(2) { - [0]=> - string(3) "foo" - [1]=> - string(3) "bar" -} -array(1) { - [0]=> - NULL -} -array(2) { - [0]=> - string(3) "baz" - [1]=> - string(3) "qux" -} -bool(false) diff --git a/ext/spl/tests/SplFileObject/foreach_file_empty_lines.phpt b/ext/spl/tests/SplFileObject/foreach_file_empty_lines.phpt deleted file mode 100644 index 5fefdf0fddd..00000000000 --- a/ext/spl/tests/SplFileObject/foreach_file_empty_lines.phpt +++ /dev/null @@ -1,37 +0,0 @@ ---TEST-- -Iterate over SplFileObject with empty lines with CSV flags ---FILE-- -fwrite("foo,bar\n"); -$file->fwrite("\n"); -$file->fwrite("baz,qux"); - -$file->rewind(); - -$file->setFlags(SplFileObject::READ_CSV | SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY /* | SplFileObject::DROP_NEW_LINE */); - - -foreach ($file as $line) { - var_dump($line); -} -?> ---EXPECT-- -array(2) { - [0]=> - string(3) "foo" - [1]=> - string(3) "bar" -} -array(1) { - [0]=> - NULL -} -array(2) { - [0]=> - string(3) "baz" - [1]=> - string(3) "qux" -} diff --git a/ext/spl/tests/SplFileObject/gh8563.phpt b/ext/spl/tests/SplFileObject/gh8563.phpt deleted file mode 100644 index 11309ae8101..00000000000 --- a/ext/spl/tests/SplFileObject/gh8563.phpt +++ /dev/null @@ -1,48 +0,0 @@ ---TEST-- -Bug GH-8563: Different results for seek() on SplFileObject and SplTempFileObject ---FILE-- -fwrite("line {$i}" . PHP_EOL); - $file_02->fwrite("line {$i}" . PHP_EOL); - $file_03->fwrite("line {$i}" . PHP_EOL); - $file_04->fwrite("line {$i}" . PHP_EOL); -} - -// reset -$file_01->rewind(); -$file_02->rewind(); -$file_03->rewind(); -$file_04->rewind(); - -// seek -$file_01->seek(INDEX); -$file_02->seek(INDEX); -$file_03->seek(INDEX); -$file_04->seek(INDEX); - -// show results -echo 'file_01: ' . $file_01->key(), PHP_EOL; -echo 'file_02: ' . $file_02->key(), PHP_EOL; -echo 'file_03: ' . $file_03->key(), PHP_EOL; -echo 'file_04: ' . $file_04->key(), PHP_EOL; -?> ---CLEAN-- - ---EXPECT-- -file_01: 4 -file_02: 4 -file_03: 4 -file_04: 4 diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_basic.phpt b/ext/spl/tests/SplFileObject_fgetcsv_basic.phpt similarity index 92% rename from ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_basic.phpt rename to ext/spl/tests/SplFileObject_fgetcsv_basic.phpt index ca584251af9..2580021426f 100644 --- a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_basic.phpt +++ b/ext/spl/tests/SplFileObject_fgetcsv_basic.phpt @@ -13,7 +13,6 @@ fclose($fp); $fo = new SplFileObject('SplFileObject__fgetcsv1.csv'); var_dump($fo->fgetcsv()); -var_dump($fo->fgetcsv()); ?> --CLEAN-- string(1) "5" } -bool(false) diff --git a/ext/spl/tests/SplFileObject/SplFileObject_key_error001.phpt b/ext/spl/tests/SplFileObject_key_error001.phpt similarity index 97% rename from ext/spl/tests/SplFileObject/SplFileObject_key_error001.phpt rename to ext/spl/tests/SplFileObject_key_error001.phpt index 7d0e3ae8d96..0c21d0b905e 100644 --- a/ext/spl/tests/SplFileObject/SplFileObject_key_error001.phpt +++ b/ext/spl/tests/SplFileObject_key_error001.phpt @@ -18,5 +18,5 @@ var_dump($s->key()); var_dump($s->valid()); ?> --EXPECT-- -int(12) +int(14) bool(false) diff --git a/ext/spl/tests/SplFileObject/SplFileObject_key_error002.phpt b/ext/spl/tests/SplFileObject_key_error002.phpt similarity index 97% rename from ext/spl/tests/SplFileObject/SplFileObject_key_error002.phpt rename to ext/spl/tests/SplFileObject_key_error002.phpt index 0834dbc0524..8fc9b7fef0a 100644 --- a/ext/spl/tests/SplFileObject/SplFileObject_key_error002.phpt +++ b/ext/spl/tests/SplFileObject_key_error002.phpt @@ -18,5 +18,5 @@ var_dump($s->key()); var_dump($s->valid()); ?> --EXPECT-- -int(12) +int(13) bool(false) diff --git a/ext/spl/tests/bug81477.phpt b/ext/spl/tests/bug81477.phpt index 421c74dc4d6..f7730a791aa 100644 --- a/ext/spl/tests/bug81477.phpt +++ b/ext/spl/tests/bug81477.phpt @@ -21,6 +21,7 @@ string(8) "baz,bat " string(10) "more,data " +string(0) "" --CLEAN--