ID: 22362
User updated by: php at codewhore dot org
Reported By: php at codewhore dot org
Status: Open
Bug Type: Filesystem function related
Operating System: Linux 2.4
PHP Version: 4.3.1
New Comment:
I've verified that this behavior still exists in today's snapshot
(php4-STABLE-200302212030.tar.gz).
Previous Comments:
------------------------------------------------------------------------
[2003-02-21 13:58:03] php at codewhore dot org
In PHP:
<?php
$fp = fopen('./foo', 'w+');
fwrite($fp, 'quxbar', 6);
fseek($fp, 3, SEEK_SET);
fread($fp, 1);
fseek($fp, 4, SEEK_SET);
fwrite($fp, '!', 1);
fseek($fp, 0, SEEK_SET);
$buf = fread($fp, 4095);
echo "$buf\n";
?>
In C:
#include <stdio.h>
int main()
{
static char buf[4096];
FILE *f = fopen("./foo", "w+");
fwrite("quxbar", 6, 1, f);
fseek(f, 3, SEEK_SET);
fread(&buf, 1, 1, f);
fseek(f, 4, SEEK_SET);
fwrite("!", 1, 1, f);
fseek(f, 0, SEEK_SET);
fread(&buf, 4095, 1, f);
printf("%s\n", buf);
return 0;
}
The PHP version outputs 'quxbar!.
The C version outputs 'quxb!r'.
In fact, for any PHP code of the structure:
<?php
fseek($fp, $x, SEEK_SET);
fread($fp, $n);
fseek($fp, $y, SEEK_SET);
fwrite($fp, '!', 1);
?>
the data from the fwrite always gets written to the end of the stream
when $x < $y and $n is exactly 1. I can reproduce this with different
whence parameters, but it seems to only happen with a seek followed by
a single-byte read.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=22362&edit=1