]> granicus.if.org Git - php/commitdiff
Fix seeking in php://input
authorLauri Kenttä <lauri.kentta@gmail.com>
Wed, 16 Jan 2019 20:08:03 +0000 (22:08 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 18 Jan 2019 11:44:47 +0000 (12:44 +0100)
ext/standard/php_fopen_wrapper.c
tests/basic/enable_post_data_reading_07.phpt [new file with mode: 0644]

index 1746018d38df1f69d66209c0e6cf8767f6d361d1..8c273d15987e03f40bce4fc9e438177793e1bfc1 100644 (file)
@@ -128,7 +128,7 @@ static int php_stream_input_seek(php_stream *stream, zend_off_t offset, int when
 
        if (input->body) {
                int sought = php_stream_seek(input->body, offset, whence);
-               *newoffset = (input->body)->position;
+               *newoffset = input->position = (input->body)->position;
                return sought;
        }
 
diff --git a/tests/basic/enable_post_data_reading_07.phpt b/tests/basic/enable_post_data_reading_07.phpt
new file mode 100644 (file)
index 0000000..b58e158
--- /dev/null
@@ -0,0 +1,34 @@
+--TEST--
+enable_post_data_reading: seeking in php://input
+--INI--
+enable_post_data_reading=1
+--POST_RAW--
+Content-Type: application/unknown
+0123456789
+--FILE--
+<?php
+echo "Test\n";
+
+$f1 = fopen("php://input", "r");
+fseek($f1, 3, SEEK_SET);
+echo fgetc($f1);
+fseek($f1, 1, SEEK_SET);
+echo fgetc($f1);
+fseek($f1, 3, SEEK_CUR);
+echo fgetc($f1);
+fseek($f1, -3, SEEK_CUR);
+echo fgetc($f1);
+fseek($f1, 3, SEEK_END);
+echo fgetc($f1);
+fseek($f1, -3, SEEK_END);
+$f2 = fopen("php://input", "r");
+fseek($f2, 1, SEEK_SET);
+echo fgetc($f1);
+echo fgetc($f2);
+?>
+
+Done
+--EXPECT--
+Test
+315371
+Done