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

 ID:               37096
 Updated by:       [email protected]
 Reported by:      [email protected]
 Summary:          referencing bug with return value for stream_seek
-Status:           No Feedback
+Status:           Open
 Type:             Bug
 Package:          Streams related
 Operating System: *
 PHP Version:      5CVS-2006-04-16 (CVS)



Previous Comments:
------------------------------------------------------------------------
[2006-09-16 01:00:00] php-bugs at lists dot php dot net

No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".

------------------------------------------------------------------------
[2006-09-08 21:04:46] [email protected]

Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves. 

A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external 
resources such as databases, etc. If the script requires a 
database to demonstrate the issue, please make sure it creates 
all necessary tables, stored procedures etc.

Please avoid embedding huge scripts into the report.



------------------------------------------------------------------------
[2006-07-26 09:21:28] tendencies at free dot fr

See this bug : http://bugs.php.net/bug.php?id=30157

------------------------------------------------------------------------
[2006-04-16 02:29:02] [email protected]

Description:
------------
When using user-space streams via stream_wrapper_register(),

if you return the value of a property of the object from stream_seek(),
it gets mangled.



Sounds like a problem with the way that the retval from
call_user_function_ex() is disposed.



The workaround is to create a temporary value using a trick like this:



function stream_seek($offset, $whence) {

   ...

   $retval = $this->pos + 0;

   return $retval;

}



presumably the rest of the user wrapper code has the same flaw.

Reproduce code:
---------------
Abbreviated example; my actual test case is too large.

Valgrind does not indicate any memory errors, so the problem  is likely
logical rather than sloppy memory handling.



class MyStream {

  var $this->pos = 0;

 

  function stream_tell() {

    return $this->pos;

  }



  function stream_seek($offset, $whence) {

    return $this->pos;

  }

}



Actual result:
--------------
Problem manifested for me by converting $this->pos to bool(true), which
was then interpreted by the user space wrapper as an invalid return
value from stream_tell(), which simply returns $this->pos.


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



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

Reply via email to