diff options
-rwxr-xr-x | main/php_streams.h | 2 | ||||
-rw-r--r-- | main/streams/cast.c | 14 | ||||
-rwxr-xr-x | main/streams/streams.c | 2 |
3 files changed, 10 insertions, 8 deletions
diff --git a/main/php_streams.h b/main/php_streams.h index b87cf1b86e..b1d70a8401 100755 --- a/main/php_streams.h +++ b/main/php_streams.h @@ -438,7 +438,7 @@ BEGIN_EXTERN_C() ZEND_ATTRIBUTE_DEPRECATED PHPAPI size_t _php_stream_copy_to_stream(php_stream *src, php_stream *dest, size_t maxlen STREAMS_DC TSRMLS_DC); #define php_stream_copy_to_stream(src, dest, maxlen) _php_stream_copy_to_stream((src), (dest), (maxlen) STREAMS_CC TSRMLS_CC) -PHPAPI size_t _php_stream_copy_to_stream_ex(php_stream *src, php_stream *dest, size_t maxlen, size_t *len STREAMS_DC TSRMLS_DC); +PHPAPI int _php_stream_copy_to_stream_ex(php_stream *src, php_stream *dest, size_t maxlen, size_t *len STREAMS_DC TSRMLS_DC); #define php_stream_copy_to_stream_ex(src, dest, maxlen, len) _php_stream_copy_to_stream_ex((src), (dest), (maxlen), (len) STREAMS_CC TSRMLS_CC) diff --git a/main/streams/cast.c b/main/streams/cast.c index 38eb1a987c..305ee6e8aa 100644 --- a/main/streams/cast.c +++ b/main/streams/cast.c @@ -271,15 +271,15 @@ PHPAPI int _php_stream_cast(php_stream *stream, int castas, void **ret, int show newstream = php_stream_fopen_tmpfile(); if (newstream) { - size_t retval = php_stream_copy_to_stream_ex(stream, newstream, PHP_STREAM_COPY_ALL, NULL); + int retcopy = php_stream_copy_to_stream_ex(stream, newstream, PHP_STREAM_COPY_ALL, NULL); - if (ret != SUCCESS) { + if (retcopy != SUCCESS) { php_stream_close(newstream); } else { - int retcode = php_stream_cast(newstream, castas | flags, (void **)ret, show_err); + int retcast = php_stream_cast(newstream, castas | flags, (void **)ret, show_err); - if (retcode == SUCCESS) { - rewind(*(FILE**)retval); + if (retcast == SUCCESS) { + rewind(*(FILE**)ret); } /* do some specialized cleanup */ @@ -287,7 +287,9 @@ PHPAPI int _php_stream_cast(php_stream *stream, int castas, void **ret, int show php_stream_free(stream, PHP_STREAM_FREE_CLOSE_CASTED); } - return retcode; + /* TODO: we probably should be setting .stdiocast and .fclose_stdiocast or + * we may be leaking the FILE*. Needs investigation, though. */ + return retcast; } } } diff --git a/main/streams/streams.c b/main/streams/streams.c index 15c1454547..4679a97aa6 100755 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -1417,7 +1417,7 @@ PHPAPI size_t _php_stream_copy_to_mem(php_stream *src, char **buf, size_t maxlen } /* Returns SUCCESS/FAILURE and sets *len to the number of bytes moved */ -PHPAPI size_t _php_stream_copy_to_stream_ex(php_stream *src, php_stream *dest, size_t maxlen, size_t *len STREAMS_DC TSRMLS_DC) +PHPAPI int _php_stream_copy_to_stream_ex(php_stream *src, php_stream *dest, size_t maxlen, size_t *len STREAMS_DC TSRMLS_DC) { char buf[CHUNK_SIZE]; size_t readchunk; |