Bug #36741 [Com]: userstreams testcase have off-by-one error on fseek()

From: Date: Mon, 13 Dec 2021 09:21:32 +0000
Subject: Bug #36741 [Com]: userstreams testcase have off-by-one error on fseek()
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-238368@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=36741&edit=1 ID: 36741 Comment by: mygroundbiz dot fun at gmail dot com Reported by: elliot dot li at gmail dot com Summary: userstreams testcase have off-by-one error on fseek() Status: Closed Type: Bug Package: Streams related Operating System: Linux PHP Version: 5.1.2 Block user comment: N Private report: N New Comment: MyGroundBiz is a FedEx online official portal where customers can sign in to get the latest updated news and details on various factors. Customers in the United States just love spending time on this portal to get fruitful services. This is a highly encrypted portal that makes sure that each and every information stored about the users is extremely secure. https://www.mygroundbiz.fun/ Previous Comments: ------------------------------------------------------------------------ [2021-03-01 07:39:50] devendonaldson473 at gmail dot com Thanks for the info i will try to figure it out for more https://www.mygroundbiz.website/ ------------------------------------------------------------------------ [2006-03-20 23:09:18] tony2001@php.net This bug has been fixed in CVS. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. ------------------------------------------------------------------------ [2006-03-20 01:43:18] elliot dot li at gmail dot com Well, this is my patch. (sorry, I don't know how to append an attachment) ===== php-5.1.2-userstreams.test.patch FOLLOWS ===== diff -Nur php-5.1.2/ext/standard/tests/file/userstreams.phpt php-5.1.2.my/ext/standard/tests/file/userstreams.phpt --- php-5.1.2/ext/standard/tests/file/userstreams.phpt 2003-11-30 21:57:17.000000000 +0800 +++ php-5.1.2.my/ext/standard/tests/file/userstreams.phpt 2006-03-20 08:32:10.000000000 +0800 @@ -211,15 +211,15 @@ $whence = $whence_map[array_rand($whence_map, 1)]; switch($whence) { case SEEK_SET: - $offset = rand(0, $DATALEN); + $offset = rand(0, $DATALEN-1); $position = $offset; break; case SEEK_END: - $offset = -rand(0, $DATALEN); + $offset = -rand(0, $DATALEN-1); $position = $DATALEN + $offset; break; case SEEK_CUR: - $offset = rand(0, $DATALEN); + $offset = rand(0, $DATALEN-1); $offset -= $position; $position += $offset; break; ===== php-5.1.2-userstreams.test.patch ABOVE ===== ------------------------------------------------------------------------ [2006-03-18 21:57:31] tony2001@php.net Do you have a patch? (unified diff, please) ------------------------------------------------------------------------ [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 https://bugs.php.net/bug.php?id=36741&edit=1

« previous php.bugs (#238368) next »