From 6aa72c713ae4e76470d7a4371b52b3f643c02e4d Mon Sep 17 00:00:00 2001 From: Jamie Peabody Date: Thu, 25 Aug 2022 13:30:45 +0100 Subject: [PATCH] Fixes #297 --- lib/types/multipart.js | 4 ++-- test/test-types-multipart.js | 43 ++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/lib/types/multipart.js b/lib/types/multipart.js index cc0d7bb..4b9a323 100644 --- a/lib/types/multipart.js +++ b/lib/types/multipart.js @@ -473,7 +473,7 @@ retrydata: } fileSize += chunk.length; - if (fileSize === fileSizeLimit) { + if (fileSize === fileSizeLimit && chunk.length < (end - start)) { if (chunk.length > 0) this._fileStream.push(chunk); this._fileStream.emit('limit'); @@ -499,7 +499,7 @@ retrydata: fieldSize += actualLen; field.push(chunk); - if (fieldSize === fieldSizeLimit) { + if (fieldSize === fieldSizeLimit && chunk.length < (end - start)) { skipPart = true; partTruncated = true; } diff --git a/test/test-types-multipart.js b/test/test-types-multipart.js index 9755642..a7b58a2 100644 --- a/test/test-types-multipart.js +++ b/test/test-types-multipart.js @@ -180,6 +180,49 @@ const tests = [ ], what: 'Fields and files (limits)' }, + { source: [ + ['-----------------------------paZqsnEHRufoShdX6fh0lUhXBP4k', + 'Content-Disposition: form-data; name="file_name_0"', + '', + 'super alpha file', + '-----------------------------paZqsnEHRufoShdX6fh0lUhXBP4k', + 'Content-Disposition: form-data; ' + + 'name="upload_file_0"; filename="1k_a.dat"', + 'Content-Type: application/octet-stream', + '', + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + '-----------------------------paZqsnEHRufoShdX6fh0lUhXBP4k--' + ].join('\r\n') + ], + boundary: '---------------------------paZqsnEHRufoShdX6fh0lUhXBP4k', + limits: { + fileSize: 26, + fieldSize: 16 + }, + expected: [ + { type: 'field', + name: 'file_name_0', + val: 'super alpha file', + info: { + nameTruncated: false, + valueTruncated: false, + encoding: '7bit', + mimeType: 'text/plain', + }, + }, + { type: 'file', + name: 'upload_file_0', + data: Buffer.from('ABCDEFGHIJKLMNOPQRSTUVWXYZ'), + info: { + filename: '1k_a.dat', + encoding: '7bit', + mimeType: 'application/octet-stream', + }, + limited: false + }, + ], + what: 'Fields and files (exact limits)' + }, { source: [ ['-----------------------------paZqsnEHRufoShdX6fh0lUhXBP4k', 'Content-Disposition: form-data; name="file_name_0"',