1
0
mirror of https://github.com/php/php-src.git synced 2026-04-14 03:22:58 +02:00

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 6f87a5c633.

This was cherry-picked to PHP-8.1.8 from 79a283240e
This commit is contained in:
George Peter Banyard
2022-07-05 21:28:59 +01:00
committed by Ben Ramsey
parent 7e8ad578ab
commit 1e7afbd281
9 changed files with 16 additions and 139 deletions

View File

@@ -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;

View File

@@ -1,38 +0,0 @@
--TEST--
SplFileObject::fgetcsv with empty lines
--FILE--
<?php
$file = new SplTempFileObject();
$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)

View File

@@ -1,37 +0,0 @@
--TEST--
Iterate over SplFileObject with empty lines with CSV flags
--FILE--
<?php
$file = new SplTempFileObject();
$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"
}

View File

@@ -1,48 +0,0 @@
--TEST--
Bug GH-8563: Different results for seek() on SplFileObject and SplTempFileObject
--FILE--
<?php
const LINES = 5;
const INDEX = 10;
$file_01 = new SplFileObject(__DIR__ . '/gh8563.txt', 'w+');
$file_02 = new SplTempFileObject(-1);
$file_03 = new SplTempFileObject(0);
$file_04 = new SplTempFileObject();
// write to files
for ($i = 0; $i < LINES; $i++) {
$file_01->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--
<?php
unlink(__DIR__ . '/gh8563.txt');
?>
--EXPECT--
file_01: 4
file_02: 4
file_03: 4
file_04: 4

View File

@@ -13,7 +13,6 @@ fclose($fp);
$fo = new SplFileObject('SplFileObject__fgetcsv1.csv');
var_dump($fo->fgetcsv());
var_dump($fo->fgetcsv());
?>
--CLEAN--
<?php
@@ -30,4 +29,3 @@ array(4) {
[3]=>
string(1) "5"
}
bool(false)

View File

@@ -18,5 +18,5 @@ var_dump($s->key());
var_dump($s->valid());
?>
--EXPECT--
int(12)
int(14)
bool(false)

View File

@@ -18,5 +18,5 @@ var_dump($s->key());
var_dump($s->valid());
?>
--EXPECT--
int(12)
int(13)
bool(false)

View File

@@ -21,6 +21,7 @@ string(8) "baz,bat
"
string(10) "more,data
"
string(0) ""
--CLEAN--
<?php
@unlink(__DIR__ . '/bug81477.csv');

View File

@@ -70,7 +70,7 @@ string(1) "4"
int(5)
string(1) "5"
int(6)
bool(false)
string(0) ""
===B===
int(0)
string(1) "0"