--- /dev/null
+--TEST--
+rfc1867 anonymous upload
+--INI--
+file_uploads=1
+error_reporting=E_ALL&~E_NOTICE
+comment=debug builds show some additional E_NOTICE errors
+upload_max_filesize=1024
+--SKIPIF--
+<?php if (php_sapi_name()=='cli') die('skip'); ?>
+--POST_RAW--
+Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; filename="file1.txt"
+Content-Type: text/plain-file1
+
+1
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; filename="file2.txt"
+Content-Type: text/plain-file2
+
+2
+-----------------------------20896060251896012921717172737--
+--FILE--
+<?php
+var_dump($_FILES);
+var_dump($_POST);
+?>
+--EXPECTF--
+array(2) {
+ [%d]=>
+ array(5) {
+ [%u|b%"name"]=>
+ %string|unicode%(9) "file1.txt"
+ [%u|b%"type"]=>
+ %string|unicode%(16) "text/plain-file1"
+ [%u|b%"tmp_name"]=>
+ %string|unicode%(%d) "%s"
+ [%u|b%"error"]=>
+ int(0)
+ [%u|b%"size"]=>
+ int(1)
+ }
+ [%d]=>
+ array(5) {
+ [%u|b%"name"]=>
+ %string|unicode%(9) "file2.txt"
+ [%u|b%"type"]=>
+ %string|unicode%(16) "text/plain-file2"
+ [%u|b%"tmp_name"]=>
+ %string|unicode%(%d) "%s"
+ [%u|b%"error"]=>
+ int(0)
+ [%u|b%"size"]=>
+ int(1)
+ }
+}
+array(0) {
+}
--- /dev/null
+--TEST--
+rfc1867 array upload
+--INI--
+file_uploads=1
+error_reporting=E_ALL&~E_NOTICE
+comment=debug builds show some additional E_NOTICE errors
+upload_max_filesize=1024
+--SKIPIF--
+<?php if (php_sapi_name()=='cli') die('skip'); ?>
+--POST_RAW--
+Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="file[]"; filename="file1.txt"
+Content-Type: text/plain-file1
+
+1
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="file[2]"; filename="file2.txt"
+Content-Type: text/plain-file2
+
+2
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="file[]"; filename="file3.txt"
+Content-Type: text/plain-file3
+
+3
+-----------------------------20896060251896012921717172737--
+--FILE--
+<?php
+var_dump($_FILES);
+var_dump($_POST);
+?>
+--EXPECTF--
+array(1) {
+ [%u|b%"file"]=>
+ array(5) {
+ [%u|b%"name"]=>
+ array(3) {
+ [0]=>
+ %unicode|string%(9) "file1.txt"
+ [2]=>
+ %unicode|string%(9) "file2.txt"
+ [3]=>
+ %unicode|string%(9) "file3.txt"
+ }
+ [%u|b%"type"]=>
+ array(3) {
+ [0]=>
+ %unicode|string%(16) "text/plain-file1"
+ [2]=>
+ %unicode|string%(16) "text/plain-file2"
+ [3]=>
+ %unicode|string%(16) "text/plain-file3"
+ }
+ [%u|b%"tmp_name"]=>
+ array(3) {
+ [0]=>
+ %unicode|string%(%d) "%s"
+ [2]=>
+ %unicode|string%(%d) "%s"
+ [3]=>
+ %unicode|string%(%d) "%s"
+ }
+ [%u|b%"error"]=>
+ array(3) {
+ [0]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(0)
+ }
+ [%u|b%"size"]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [2]=>
+ int(1)
+ [3]=>
+ int(1)
+ }
+ }
+}
+array(0) {
+}
--- /dev/null
+--TEST--
+rfc1867 boundary 1
+--INI--
+post_max_size=1024
+error_reporting=E_ALL&~E_NOTICE
+comment=debug builds show some additional E_NOTICE errors
+--SKIPIF--
+<?php if (php_sapi_name()=='cli') die('skip'); ?>
+--POST_RAW--
+Content-Type: multipart/form-data; boundary="------------------------------------foobar"
+--------------------------------------foobar
+Content-Disposition: form-data; name="foobar"
+
+1
+--------------------------------------foobar--
+--FILE--
+<?php
+var_dump($_FILES);
+var_dump($_POST);
+?>
+--EXPECTF--
+array(0) {
+}
+array(1) {
+ [%u|b%"foobar"]=>
+ %unicode|string%(1) "1"
+}
--- /dev/null
+--TEST--
+rfc1867 boundary 2
+--INI--
+post_max_size=1024
+error_reporting=E_ALL&~E_NOTICE
+comment=debug builds show some additional E_NOTICE errors
+--SKIPIF--
+<?php if (php_sapi_name()=='cli') die('skip'); ?>
+--POST_RAW--
+Content-Type: multipart/form-data; boundary=------------------------------------foo, bar
+--------------------------------------foo
+Content-Disposition: form-data; name="foobar"
+
+1
+--------------------------------------foo--
+--FILE--
+<?php
+var_dump($_FILES);
+var_dump($_POST);
+?>
+--EXPECTF--
+array(0) {
+}
+array(1) {
+ [%u|b%"foobar"]=>
+ %unicode|string%(1) "1"
+}
--- /dev/null
+--TEST--
+rfc1867 empty upload
+--INI--
+file_uploads=1
+error_reporting=E_ALL&~E_NOTICE
+comment=debug builds show some additional E_NOTICE errors
+upload_max_filesize=1024
+--SKIPIF--
+<?php if (php_sapi_name()=='cli') die('skip'); ?>
+--POST_RAW--
+Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="foo"
+
+
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="file1"; filename="file1.txt"
+Content-Type: text/plain-file1
+
+1
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="file2"; filename=""
+Content-Type: text/plain-file2
+
+
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="file3"; filename="file3.txt"
+Content-Type: text/plain-file3
+
+3
+-----------------------------20896060251896012921717172737--
+--FILE--
+<?php
+var_dump($_FILES);
+var_dump($_POST);
+if (is_uploaded_file($_FILES["file1"]["tmp_name"])) {
+ var_dump(file_get_contents($_FILES["file1"]["tmp_name"]));
+}
+if (is_uploaded_file($_FILES["file3"]["tmp_name"])) {
+ var_dump(file_get_contents($_FILES["file3"]["tmp_name"]));
+}
+?>
+--EXPECTF--
+array(3) {
+ [%u|b%"file1"]=>
+ array(5) {
+ [%u|b%"name"]=>
+ %string|unicode%(9) "file1.txt"
+ [%u|b%"type"]=>
+ %string|unicode%(16) "text/plain-file1"
+ [%u|b%"tmp_name"]=>
+ %string|unicode%(%d) "%s"
+ [%u|b%"error"]=>
+ int(0)
+ [%u|b%"size"]=>
+ int(1)
+ }
+ [%u|b%"file2"]=>
+ array(5) {
+ [%u|b%"name"]=>
+ %string|unicode%(0) ""
+ [%u|b%"type"]=>
+ %string|unicode%(0) ""
+ [%u|b%"tmp_name"]=>
+ %string|unicode%(0) ""
+ [%u|b%"error"]=>
+ int(4)
+ [%u|b%"size"]=>
+ int(0)
+ }
+ [%u|b%"file3"]=>
+ array(5) {
+ [%u|b%"name"]=>
+ %string|unicode%(9) "file3.txt"
+ [%u|b%"type"]=>
+ %string|unicode%(16) "text/plain-file3"
+ [%u|b%"tmp_name"]=>
+ %string|unicode%(%d) "%s"
+ [%u|b%"error"]=>
+ int(0)
+ [%u|b%"size"]=>
+ int(1)
+ }
+}
+array(1) {
+ [%u|b%"foo"]=>
+ %unicode|string%(0) ""
+}
+string(1) "1"
+string(1) "3"
--- /dev/null
+--TEST--
+rfc1867 file_upload disabled
+--INI--
+file_uploads=0
+error_reporting=E_ALL&~E_NOTICE
+comment=debug builds show some additional E_NOTICE errors
+--SKIPIF--
+<?php if (php_sapi_name()=='cli') die('skip'); ?>
+--POST_RAW--
+Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="foo"
+
+bar
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="file1"; filename="file1.txt"
+Content-Type: text/plain-file1
+
+1
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="bar"
+
+foo
+-----------------------------20896060251896012921717172737--
+--FILE--
+<?php
+var_dump($_FILES);
+var_dump($_POST);
+?>
+--EXPECTF--
+array(0) {
+}
+array(2) {
+ [%u|b%"foo"]=>
+ %unicode|string%(3) "bar"
+ [%u|b%"bar"]=>
+ %unicode|string%(3) "foo"
+}
--- /dev/null
+--TEST--
+rfc1867 garbled mime headers
+--INI--
+file_uploads=1
+error_reporting=E_ALL&~E_NOTICE
+comment=debug builds show some additional E_NOTICE errors
+upload_max_filesize=1024
+--SKIPIF--
+<?php if (php_sapi_name()=='cli') die('skip'); ?>
+--POST_RAW--
+Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data
+
+
+-----------------------------20896060251896012921717172737--
+--FILE--
+<?php
+var_dump($_FILES);
+var_dump($_POST);
+?>
+--EXPECTF--
+Warning: File Upload Mime headers garbled in %s
+array(0) {
+}
+array(0) {
+}
--- /dev/null
+--TEST--
+rfc1867 invalid boundary
+--INI--
+post_max_size=1024
+error_reporting=E_ALL&~E_NOTICE
+comment=debug builds show some additional E_NOTICE errors
+--SKIPIF--
+<?php if (php_sapi_name()=='cli') die('skip'); ?>
+--POST_RAW--
+Content-Type: multipart/form-data; boundary="foobar
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="foobar"
+
+1
+-----------------------------20896060251896012921717172737--
+--FILE--
+<?php
+var_dump($_FILES);
+var_dump($_POST);
+?>
+--EXPECTF--
+Warning: Invalid boundary in multipart/form-data POST data in %s
+array(0) {
+}
+array(0) {
+}
--- /dev/null
+--TEST--
+rfc1867 malicious input
+--INI--
+file_uploads=1
+error_reporting=E_ALL&~E_NOTICE
+comment=debug builds show some additional E_NOTICE errors
+upload_max_filesize=1024
+--SKIPIF--
+<?php if (php_sapi_name()=='cli') die('skip'); ?>
+--POST_RAW--
+Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="foo[]bar"; filename="file1.txt"
+Content-Type: text/plain-file1
+
+1
+-----------------------------20896060251896012921717172737--
+--FILE--
+<?php
+var_dump($_FILES);
+var_dump($_POST);
+?>
+--EXPECTF--
+array(0) {
+}
+array(0) {
+}
--- /dev/null
+--TEST--
+rfc1867 MAX_FILE_SIZE
+--INI--
+file_uploads=1
+error_reporting=E_ALL&~E_NOTICE
+comment=debug builds show some additional E_NOTICE errors
+upload_max_filesize=1024
+--SKIPIF--
+<?php if (php_sapi_name()=='cli') die('skip'); ?>
+--POST_RAW--
+Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="MAX_FILE_SIZE"
+
+1
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="file1"; filename="file1.txt"
+Content-Type: text/plain-file1
+
+1
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="file2"; filename="file2.txt"
+Content-Type: text/plain-file2
+
+22
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="file3"; filename="C:\foo\bar/file3.txt"
+Content-Type: text/plain-file3;
+
+3
+-----------------------------20896060251896012921717172737--
+--FILE--
+<?php
+var_dump($_FILES);
+var_dump($_POST);
+if (is_uploaded_file($_FILES["file1"]["tmp_name"])) {
+ var_dump(file_get_contents($_FILES["file1"]["tmp_name"]));
+}
+if (is_uploaded_file($_FILES["file3"]["tmp_name"])) {
+ var_dump(file_get_contents($_FILES["file3"]["tmp_name"]));
+}
+?>
+--EXPECTF--
+array(3) {
+ [%u|b%"file1"]=>
+ array(5) {
+ [%u|b%"name"]=>
+ %string|unicode%(9) "file1.txt"
+ [%u|b%"type"]=>
+ %string|unicode%(16) "text/plain-file1"
+ [%u|b%"tmp_name"]=>
+ %string|unicode%(%d) "%s"
+ [%u|b%"error"]=>
+ int(0)
+ [%u|b%"size"]=>
+ int(1)
+ }
+ [%u|b%"file2"]=>
+ array(5) {
+ [%u|b%"name"]=>
+ %string|unicode%(9) "file2.txt"
+ [%u|b%"type"]=>
+ %string|unicode%(0) ""
+ [%u|b%"tmp_name"]=>
+ %string|unicode%(0) ""
+ [%u|b%"error"]=>
+ int(2)
+ [%u|b%"size"]=>
+ int(0)
+ }
+ [%u|b%"file3"]=>
+ array(5) {
+ [%u|b%"name"]=>
+ %string|unicode%(9) "file3.txt"
+ [%u|b%"type"]=>
+ %string|unicode%(16) "text/plain-file3"
+ [%u|b%"tmp_name"]=>
+ %string|unicode%(%d) "%s"
+ [%u|b%"error"]=>
+ int(0)
+ [%u|b%"size"]=>
+ int(1)
+ }
+}
+array(1) {
+ [%u|b%"MAX_FILE_SIZE"]=>
+ %string|unicode%(1) "1"
+}
+string(1) "1"
+string(1) "3"
--- /dev/null
+--TEST--
+rfc1867 missing boundary
+--INI--
+post_max_size=1024
+error_reporting=E_ALL&~E_NOTICE
+comment=debug builds show some additional E_NOTICE errors
+--SKIPIF--
+<?php if (php_sapi_name()=='cli') die('skip'); ?>
+--POST_RAW--
+Content-Type: multipart/form-data
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="foobar"
+
+1
+-----------------------------20896060251896012921717172737--
+--FILE--
+<?php
+var_dump($_FILES);
+var_dump($_POST);
+?>
+--EXPECTF--
+Warning: Missing boundary in multipart/form-data POST data in %s
+array(0) {
+}
+array(0) {
+}
--- /dev/null
+--TEST--
+rfc1867 missing boundary 2
+--INI--
+file_uploads=1
+error_reporting=E_ALL&~E_NOTICE
+comment=debug builds show some additional E_NOTICE errors
+upload_max_filesize=1024
+--SKIPIF--
+<?php if (php_sapi_name()=='cli') die('skip'); ?>
+--POST_RAW--
+Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="file1"; filename="file1.txt"
+Content-Type: text/plain-file1
+
+1
+--FILE--
+<?php
+var_dump($_FILES);
+var_dump($_POST);
+?>
+--EXPECTF--
+array(1) {
+ [%u|b%"file1"]=>
+ array(5) {
+ [%u|b%"name"]=>
+ %string|unicode%(9) "file1.txt"
+ [%u|b%"type"]=>
+ %string|unicode%(0) ""
+ [%u|b%"tmp_name"]=>
+ %string|unicode%(0) ""
+ [%u|b%"error"]=>
+ int(3)
+ [%u|b%"size"]=>
+ int(0)
+ }
+}
+array(0) {
+}
--- /dev/null
+--TEST--
+rfc1867 post_max_filesize
+--INI--
+file_uploads=1
+error_reporting=E_ALL&~E_NOTICE
+comment=debug builds show some additional E_NOTICE errors
+upload_max_filesize=1
+--SKIPIF--
+<?php if (php_sapi_name()=='cli') die('skip'); ?>
+--POST_RAW--
+Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="file1"; filename="file1.txt"
+Content-Type: text/plain-file1
+
+1
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="file2"; filename="file2.txt"
+Content-Type: text/plain-file2
+
+22
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="file3"; filename="file3.txt"
+Content-Type: text/plain-file3
+
+3
+-----------------------------20896060251896012921717172737--
+--FILE--
+<?php
+var_dump($_FILES);
+var_dump($_POST);
+if (is_uploaded_file($_FILES["file1"]["tmp_name"])) {
+ var_dump(file_get_contents($_FILES["file1"]["tmp_name"]));
+}
+if (is_uploaded_file($_FILES["file3"]["tmp_name"])) {
+ var_dump(file_get_contents($_FILES["file3"]["tmp_name"]));
+}
+?>
+--EXPECTF--
+array(3) {
+ [%u|b%"file1"]=>
+ array(5) {
+ [%u|b%"name"]=>
+ %string|unicode%(9) "file1.txt"
+ [%u|b%"type"]=>
+ %string|unicode%(16) "text/plain-file1"
+ [%u|b%"tmp_name"]=>
+ %string|unicode%(%d) "%s"
+ [%u|b%"error"]=>
+ int(0)
+ [%u|b%"size"]=>
+ int(1)
+ }
+ [%u|b%"file2"]=>
+ array(5) {
+ [%u|b%"name"]=>
+ %string|unicode%(9) "file2.txt"
+ [%u|b%"type"]=>
+ %string|unicode%(0) ""
+ [%u|b%"tmp_name"]=>
+ %string|unicode%(0) ""
+ [%u|b%"error"]=>
+ int(1)
+ [%u|b%"size"]=>
+ int(0)
+ }
+ [%u|b%"file3"]=>
+ array(5) {
+ [%u|b%"name"]=>
+ %string|unicode%(9) "file3.txt"
+ [%u|b%"type"]=>
+ %string|unicode%(16) "text/plain-file3"
+ [%u|b%"tmp_name"]=>
+ %string|unicode%(%d) "%s"
+ [%u|b%"error"]=>
+ int(0)
+ [%u|b%"size"]=>
+ int(1)
+ }
+}
+array(0) {
+}
+string(1) "1"
+string(1) "3"
--- /dev/null
+--TEST--
+rfc1867 post_max_size
+--INI--
+post_max_size=1
+error_reporting=E_ALL&~E_NOTICE
+comment=debug builds show some additional E_NOTICE errors
+--SKIPIF--
+<?php if (php_sapi_name()=='cli') die('skip'); ?>
+--POST_RAW--
+Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737
+-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="foobar"
+
+1
+-----------------------------20896060251896012921717172737--
+--FILE--
+<?php
+var_dump($_FILES);
+var_dump($_POST);
+?>
+--EXPECTF--
+Warning: POST Content-Length of %d bytes exceeds the limit of 1 bytes in %s
+array(0) {
+}
+array(0) {
+}