summaryrefslogtreecommitdiff
path: root/main/streams/streams.c
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-09-11 10:27:32 +0200
committerNikita Popov <nikita.ppv@gmail.com>2019-09-11 10:27:32 +0200
commit11f3e24190fa45689c8ccaeea54a28db6752092e (patch)
tree4bc2ed82e2fc21f7dfcfe74fd11e4208a4d8b346 /main/streams/streams.c
parent0a24cd4e7c38d7565905152d4286ef0404d9d591 (diff)
downloadphp-git-11f3e24190fa45689c8ccaeea54a28db6752092e.tar.gz
Fixed bug #78506
Diffstat (limited to 'main/streams/streams.c')
-rw-r--r--main/streams/streams.c34
1 files changed, 16 insertions, 18 deletions
diff --git a/main/streams/streams.c b/main/streams/streams.c
index 566cdcde08..aef1ebe762 100644
--- a/main/streams/streams.c
+++ b/main/streams/streams.c
@@ -1586,33 +1586,31 @@ PHPAPI int _php_stream_copy_to_stream_ex(php_stream *src, php_stream *dest, size
while(1) {
size_t readchunk = sizeof(buf);
ssize_t didread;
+ char *writeptr;
if (maxlen && (maxlen - haveread) < readchunk) {
readchunk = maxlen - haveread;
}
didread = php_stream_read(src, buf, readchunk);
+ if (didread <= 0) {
+ *len = haveread;
+ return didread < 0 ? FAILURE : SUCCESS;
+ }
- if (didread > 0) {
- /* extra paranoid */
- char *writeptr;
-
- towrite = didread;
- writeptr = buf;
- haveread += didread;
-
- while (towrite) {
- ssize_t didwrite = php_stream_write(dest, writeptr, towrite);
- if (didwrite <= 0) {
- *len = haveread - (didread - towrite);
- return FAILURE;
- }
+ towrite = didread;
+ writeptr = buf;
+ haveread += didread;
- towrite -= didwrite;
- writeptr += didwrite;
+ while (towrite) {
+ ssize_t didwrite = php_stream_write(dest, writeptr, towrite);
+ if (didwrite <= 0) {
+ *len = haveread - (didread - towrite);
+ return FAILURE;
}
- } else {
- break;
+
+ towrite -= didwrite;
+ writeptr += didwrite;
}
if (maxlen - haveread == 0) {