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 commit6f87a5c633. This was cherry-picked to PHP-8.1.8 from79a283240e
This commit is contained in:
committed by
Ben Ramsey
parent
7e8ad578ab
commit
1e7afbd281
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
|
||||
@@ -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)
|
||||
@@ -18,5 +18,5 @@ var_dump($s->key());
|
||||
var_dump($s->valid());
|
||||
?>
|
||||
--EXPECT--
|
||||
int(12)
|
||||
int(14)
|
||||
bool(false)
|
||||
@@ -18,5 +18,5 @@ var_dump($s->key());
|
||||
var_dump($s->valid());
|
||||
?>
|
||||
--EXPECT--
|
||||
int(12)
|
||||
int(13)
|
||||
bool(false)
|
||||
@@ -21,6 +21,7 @@ string(8) "baz,bat
|
||||
"
|
||||
string(10) "more,data
|
||||
"
|
||||
string(0) ""
|
||||
--CLEAN--
|
||||
<?php
|
||||
@unlink(__DIR__ . '/bug81477.csv');
|
||||
|
||||
@@ -70,7 +70,7 @@ string(1) "4"
|
||||
int(5)
|
||||
string(1) "5"
|
||||
int(6)
|
||||
bool(false)
|
||||
string(0) ""
|
||||
===B===
|
||||
int(0)
|
||||
string(1) "0"
|
||||
|
||||
Reference in New Issue
Block a user