]> granicus.if.org Git - php/commitdiff
MFH: Fixed bug #48307 (stream_copy_to_stream() copies 0 bytes when $source
authorArnaud Le Blanc <lbarnaud@php.net>
Sat, 16 May 2009 20:23:06 +0000 (20:23 +0000)
committerArnaud Le Blanc <lbarnaud@php.net>
Sat, 16 May 2009 20:23:06 +0000 (20:23 +0000)
is a socket)

ext/standard/tests/streams/stream_copy_to_stream_socket.phpt [new file with mode: 0644]
main/streams/streams.c

diff --git a/ext/standard/tests/streams/stream_copy_to_stream_socket.phpt b/ext/standard/tests/streams/stream_copy_to_stream_socket.phpt
new file mode 100644 (file)
index 0000000..7e304b1
--- /dev/null
@@ -0,0 +1,30 @@
+--TEST--
+stream_copy_to_stream() with socket as $source
+--SKIPIF--
+<?php
+$sockets = @stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
+if (!$sockets) die("skip stream_socket_pair");
+?>
+--FILE--
+<?php
+
+$sockets = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
+$tmp = tmpfile();
+
+fwrite($sockets[0], b"a");
+stream_socket_shutdown($sockets[0], STREAM_SHUT_WR);
+stream_copy_to_stream($sockets[1], $tmp);
+
+fseek($tmp, 0, SEEK_SET);
+var_dump(stream_get_contents($tmp));
+
+stream_copy_to_stream($sockets[1], $tmp);
+
+fseek($tmp, 0, SEEK_SET);
+var_dump(stream_get_contents($tmp));
+
+
+?>
+--EXPECT--
+string(1) "a"
+string(1) "a"
index def2acec3d8f268c1f1ab37f39a158b88d071cd4..77a6b6e024a266ace1a400f0016789ebb13f870b 100755 (executable)
@@ -1322,11 +1322,8 @@ PHPAPI size_t _php_stream_copy_to_stream_ex(php_stream *src, php_stream *dest, s
 
        if (php_stream_stat(src, &ssbuf) == 0) {
                if (ssbuf.sb.st_size == 0
-#ifdef S_ISFIFO
-                && !S_ISFIFO(ssbuf.sb.st_mode)
-#endif
-#ifdef S_ISCHR
-                && !S_ISCHR(ssbuf.sb.st_mode)
+#ifdef S_ISREG
+                       && S_ISREG(ssbuf.sb.st_mode)
 #endif
                ) {
                        *len = 0;