?? Feb 2004, Version 4.3.5
- Fixed bug #27196 (Missing content_length initialization in apache 2 sapis).
(Ilia, pdoru at kappa dot ro)
+- Fixed bug #27183 (userland stream wrapper segfaults on stream_write).
+ (Moriyoshi)
- Fixed bug #27175 (tzset() is not being called by PHP on startup).
(Ilia, sagawa at sohgoh dot net)
- Fixed bug #27172 (Possible floating point exception in gmp_powm()). (Ilia)
--- /dev/null
+--TEST--
+Bug #27183 (userland stream wrapper segfaults on stream_write)
+--FILE--
+<?php
+stream_wrapper_register("one", "StreamOne");
+$fd = fopen("one://tmp/bla", "w");
+fwrite($fd, "hmm");
+fclose($fd);
+
+class StreamOne {
+ function stream_open ($path, $mode, $options, &$opened_path)
+ {
+ $this->b = 'mmh';
+ return true;
+ }
+ function stream_write($data)
+ {
+ $this->a = $data;
+ }
+ function stream_close()
+ {
+ debug_zval_dump($this->a);
+ debug_zval_dump($this->b);
+ return true;
+ }
+}
+?>
+--EXPECT--
+string(3) "hmm" refcount(2)
+string(3) "mmh" refcount(2)
int call_result;
php_userstream_data_t *us = (php_userstream_data_t *)stream->abstract;
zval **args[1];
- zval zbuff, *zbufptr;
+ zval *zbufptr;
size_t didwrite = 0;
assert(us != NULL);
ZVAL_STRINGL(&func_name, USERSTREAM_WRITE, sizeof(USERSTREAM_WRITE)-1, 0);
- ZVAL_STRINGL(&zbuff, (char*)buf, count, 0);
- zbufptr = &zbuff;
+ MAKE_STD_ZVAL(zbufptr);
+ ZVAL_STRINGL(zbufptr, (char*)buf, count, 1);
args[0] = &zbufptr;
call_result = call_user_function_ex(NULL,
1, args,
0, NULL TSRMLS_CC);
+ zval_ptr_dtor(&zbufptr);
+
didwrite = 0;
if (call_result == SUCCESS && retval != NULL) {
convert_to_long(retval);