ID:               36741
 Updated by:       [EMAIL PROTECTED]
 Reported By:      elliot dot li at gmail dot com
-Status:           Open
+Status:           Feedback
 Bug Type:         Streams related
 Operating System: Linux
 PHP Version:      5.1.2
 New Comment:

Do you have a patch? (unified diff, please)


Previous Comments:
------------------------------------------------------------------------

[2006-03-15 05:58:13] elliot dot li at gmail dot com

Description:
------------
This case(php-5.1.2/ext/standard/tests/file/userstreams.phpt) generates
a bunch of random numbers and use them as offsets for fseek() test on a
userstream. However, the range of these random numbers is [0,
$DATALEN](rand(0, $DATALEN)), which should be [0, $DATALEN).

======== CODE SNIP FOLLOWS ========
/* generate some random seek offsets */
$position = 0;
for ($i = 0; $i < 256; $i++) {
        $whence = $whence_map[array_rand($whence_map, 1)];
        switch($whence) {
                case SEEK_SET:
                        $offset = rand(0, $DATALEN);
                        $position = $offset;
                        break;
                case SEEK_END:
                        $offset = -rand(0, $DATALEN);
                        $position = $DATALEN + $offset;
                        break;
                case SEEK_CUR:
                        $offset = rand(0, $DATALEN);
                        $offset -= $position;
                        $position += $offset;
                        break;
        }

        $seeks[] = array($whence, $offset, $position);
}
========  CODE SNIP ABOVE  ========

Reproduce code:
---------------
Run this case on and on for a while, you can encounter this problem. I
found this problem during a regression test, and reproduced it on my
PC(Pentium 4 2.6GHz) within one day.

Expected result:
----------------
No error should be reported if everything goes OK.

Actual result:
--------------
========= LOG SNIP FOLLOWS =========
--[34] whence=SEEK_SET offset=32550 line_length=1024
position_should_be=32550 --
REAL: pos=(29175,32550,32550) ret=0 line[0]=`'
USER: pos=(29175,29175,29175) ret=0 line[16]=`zl urnq vf ubzr
'
###################################### FAIL!
=========  LOG SNIP ABOVE  =========

32550 is the total length of the userstream, so fseek($fp, 32550,
SEEK_SET) must fail.

I noticed another problem: mystream.stream_seek() would return a false
on this condition, but the return value of fseek() is still 0! This
would lead to the result that the failure of seeking in a userstream
couldn't be noticed by the main program.


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=36741&edit=1

Reply via email to