From af2bbca3566f18e5b9d76f9492aabcd1c4d09004 Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Thu, 12 Oct 2017 13:34:51 +0200 Subject: [PATCH] Fix multipart newlines for Windows --- app/network/__tests__/multipart.test.js | 22 +++++++++++----------- app/network/__tests__/network.test.js | 7 ++++--- app/network/multipart.js | 18 +++++++++++++----- app/package.json | 2 +- 4 files changed, 29 insertions(+), 20 deletions(-) diff --git a/app/network/__tests__/multipart.test.js b/app/network/__tests__/multipart.test.js index 3f8f9875d5..3d0e36149d 100644 --- a/app/network/__tests__/multipart.test.js +++ b/app/network/__tests__/multipart.test.js @@ -20,10 +20,10 @@ describe('buildMultipart()', () => { `${boundary}`, 'Content-Disposition: form-data; name="multi-line"', '', - 'Hello', - 'World!', - `${boundary}--` - ].join('\n')); + 'Hello\nWorld!', + `${boundary}--`, + '' + ].join('\r\n')); }); it('builds with file', async () => { @@ -44,15 +44,14 @@ describe('buildMultipart()', () => { 'Content-Disposition: form-data; name="file"; filename="testfile.txt"', 'Content-Type: text/plain', '', - 'Hello World!', - '', - 'How are you?', + 'Hello World!\n\nHow are you?', `${boundary}`, 'Content-Disposition: form-data; name="baz"', '', 'qux', - `${boundary}--` - ].join('\n')); + `${boundary}--`, + '' + ].join('\r\n')); }); it('skips entries with no name or value', async () => { @@ -73,7 +72,8 @@ describe('buildMultipart()', () => { 'Content-Disposition: form-data; name="foo"', '', '', - `${boundary}--` - ].join('\n')); + `${boundary}--`, + '' + ].join('\r\n')); }); }); diff --git a/app/network/__tests__/network.test.js b/app/network/__tests__/network.test.js index 31868dcd76..3fbb82a974 100644 --- a/app/network/__tests__/network.test.js +++ b/app/network/__tests__/network.test.js @@ -324,8 +324,9 @@ describe('actuallySend()', () => { 'Content-Disposition: form-data; name="a"', '', 'AA', - '------------------------X-INSOMNIA-BOUNDARY--' - ].join('\n')); + '------------------------X-INSOMNIA-BOUNDARY--', + '' + ].join('\r\n')); expect(body.options).toEqual({ POST: 1, @@ -339,7 +340,7 @@ describe('actuallySend()', () => { 'Expect: ', 'Transfer-Encoding: ' ], - INFILESIZE_LARGE: 299, + INFILESIZE_LARGE: 310, NOPROGRESS: false, PROXY: '', TIMEOUT_MS: 0, diff --git a/app/network/multipart.js b/app/network/multipart.js index ef25281ef1..21a1ad48c9 100644 --- a/app/network/multipart.js +++ b/app/network/multipart.js @@ -7,6 +7,7 @@ import type {RequestBodyParameter} from '../models/request'; export function buildMultipart (params: Array): {boundary: string, body: Buffer} { const buffers = []; const boundary = '------------------------X-INSOMNIA-BOUNDARY'; + const lineBreak = '\r\n'; const add = (v: Buffer | string) => { if (typeof v === 'string') { @@ -24,7 +25,8 @@ export function buildMultipart (params: Array): {boundary: continue; } - add(`${boundary}\n`); + add(`${boundary}`); + add(lineBreak); if (param.type === 'file' && param.fileName) { const name = param.name || ''; @@ -33,21 +35,27 @@ export function buildMultipart (params: Array): {boundary: add( 'Content-Disposition: form-data; ' + `name="${name.replace(/"/g, '\\"')}"; ` + - `filename="${path.basename(fileName).replace(/"/g, '\\"')}"\n` + `filename="${path.basename(fileName).replace(/"/g, '\\"')}"` ); - add(`Content-Type: ${contentType}\n\n`); + add(lineBreak); + add(`Content-Type: ${contentType}`); + add(lineBreak); + add(lineBreak); add(fs.readFileSync(fileName)); } else { const name = param.name || ''; const value = param.value || ''; - add(`Content-Disposition: form-data; name="${name}"\n\n`); + add(`Content-Disposition: form-data; name="${name}"`); + add(lineBreak); + add(lineBreak); add(value); } - add('\n'); + add(lineBreak); } add(`${boundary}--`); + add(lineBreak); const body = Buffer.concat(buffers); return {boundary: boundary, body}; diff --git a/app/package.json b/app/package.json index 070bede67f..f3bf19cf26 100644 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "insomnia", - "version": "5.9.0", + "version": "5.9.1", "productName": "Insomnia", "longName": "Insomnia REST Client", "description": "Debug APIs like a human, not a robot",