Browse Source

Fix #15683: Fix file as array uploading in MultipartFormDataParser (#16950)

tags/2.0.16
Andrew 6 years ago committed by Alexander Makarov
parent
commit
3221ab0769
  1. 1
      framework/CHANGELOG.md
  2. 3
      framework/web/MultipartFormDataParser.php
  3. 17
      tests/framework/web/MultipartFormDataParserTest.php

1
framework/CHANGELOG.md

@ -4,6 +4,7 @@ Yii Framework 2 Change Log
2.0.16 under development
------------------------
- Bug #15683: Fixed file as array uploading in MultipartFormDataParser (Groonya)
- Bug #16822: Create config dir recursively in message/config (Groonya)
- Bug #16580: Delete unused php message files in MessageController if `$removeUnused` option is on (Groonya)
- Bug #16022: Fix UniqueValidator for PostgreSQL. Checks the uniqueness of keys in `jsonb` field (lav45)

3
framework/web/MultipartFormDataParser.php

@ -320,7 +320,8 @@ class MultipartFormDataParser extends BaseObject implements RequestParserInterfa
$namePart = trim($namePart, ']');
if ($namePart === '') {
$current[] = [];
$lastKey = array_pop(array_keys($current));
$keys = array_keys($current);
$lastKey = array_pop($keys);
$current = &$current[$lastKey];
} else {
if (!isset($current[$namePart])) {

17
tests/framework/web/MultipartFormDataParserTest.php

@ -129,6 +129,23 @@ class MultipartFormDataParserTest extends TestCase
$this->assertEquals(UPLOAD_ERR_INI_SIZE, $_FILES['thirdFile']['error']);
}
public function testUploadFileAsArray(){
$parser = new MultipartFormDataParser();
$boundary = '---------------------------22472926011618';
$contentType = 'multipart/form-data; boundary=' . $boundary;
$rawBody = "--{$boundary}\nContent-Disposition: form-data; name=\"someFile[]\"; filename=\"some-file.txt\"\nContent-Type: text/plain\r\n\r\nsome file content";
$rawBody .= "--{$boundary}--";
$parser->parse($rawBody, $contentType);
$this->assertNotEmpty($_FILES['someFile']);
$this->assertEquals(UPLOAD_ERR_OK, $_FILES['someFile']['error'][0]);
$this->assertEquals('some-file.txt', $_FILES['someFile']['name'][0]);
$this->assertEquals('text/plain', $_FILES['someFile']['type'][0]);
$this->assertStringEqualsFile($_FILES['someFile']['tmp_name'][0], 'some file content');
}
/**
* @depends testNotEmptyPost
* @depends testNotEmptyFiles

Loading…
Cancel
Save