From c73de31a9029d8352eeb7344c8cc6c0ffef35a75 Mon Sep 17 00:00:00 2001 From: Klimov Paul Date: Mon, 23 Jan 2017 13:18:31 +0200 Subject: [PATCH] Fixed `yii\web\MultipartFormDataParser` adds an extra newline to every value --- framework/CHANGELOG.md | 1 + framework/web/MultipartFormDataParser.php | 2 +- tests/framework/web/MultipartFormDataParserTest.php | 8 ++++---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index c42cdf72b7..df762832eb 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -49,6 +49,7 @@ Yii Framework 2 Change Log - Bug #13309: Fixes incorrect console width/height detecting with using Stty on Mac (nowm) - Bug #13326: Fixed wrong background color generation in `BaseConsole::renderColoredString()` (nowm, silverfire) - Bug #12133: Fixed `getDbTargets()` function in `yii\log\migrations\m141106_185632_log_init` that would create a log table correctly (bumstik) +- Bug #13416: Fixed `yii\web\MultipartFormDataParser` adds an extra newline to every value (klimov-paul) - Enh #475: Added Bash and Zsh completion support for the `./yii` command (cebe, silverfire) - Enh #6242: Access to validator in inline validation (arogachev) - Enh #6373: Introduce `yii\db\Query::emulateExecution()` to force returning an empty result for a query (klimov-paul) diff --git a/framework/web/MultipartFormDataParser.php b/framework/web/MultipartFormDataParser.php index cf580cfd32..12e569c4ec 100644 --- a/framework/web/MultipartFormDataParser.php +++ b/framework/web/MultipartFormDataParser.php @@ -132,7 +132,7 @@ class MultipartFormDataParser extends Object implements RequestParserInterface } $boundary = $matches[1]; - $bodyParts = preg_split('/-+' . preg_quote($boundary) . '/s', $rawBody); + $bodyParts = preg_split('/\\R?-+' . preg_quote($boundary) . '/s', $rawBody); array_pop($bodyParts); // last block always has no data, contains boundary ending like `--` $bodyParams = []; diff --git a/tests/framework/web/MultipartFormDataParserTest.php b/tests/framework/web/MultipartFormDataParserTest.php index 993514e56a..31bf7f158c 100644 --- a/tests/framework/web/MultipartFormDataParserTest.php +++ b/tests/framework/web/MultipartFormDataParserTest.php @@ -18,10 +18,10 @@ class MultipartFormDataParserTest extends TestCase $boundary = '---------------------------22472926011618'; $contentType = 'multipart/form-data; boundary=' . $boundary; $rawBody = "--{$boundary}\nContent-Disposition: form-data; name=\"title\"\r\n\r\ntest-title"; - $rawBody .= "--{$boundary}\nContent-Disposition: form-data; name=\"Item[name]\"\r\n\r\ntest-name"; - $rawBody .= "--{$boundary}\nContent-Disposition: form-data; name=\"someFile\"; filename=\"some-file.txt\"\nContent-Type: text/plain\r\n\r\nsome file content"; - $rawBody .= "--{$boundary}\nContent-Disposition: form-data; name=\"Item[file]\"; filename=\"item-file.txt\"\nContent-Type: text/plain\r\n\r\nitem file content"; - $rawBody .= "--{$boundary}--"; + $rawBody .= "\r\n--{$boundary}\nContent-Disposition: form-data; name=\"Item[name]\"\r\n\r\ntest-name"; + $rawBody .= "\r\n--{$boundary}\nContent-Disposition: form-data; name=\"someFile\"; filename=\"some-file.txt\"\nContent-Type: text/plain\r\n\r\nsome file content"; + $rawBody .= "\r\n--{$boundary}\nContent-Disposition: form-data; name=\"Item[file]\"; filename=\"item-file.txt\"\nContent-Type: text/plain\r\n\r\nitem file content"; + $rawBody .= "\r\n--{$boundary}--"; $bodyParams = $parser->parse($rawBody, $contentType);