From 41898ffb4c83db88bcf25480da0250885af0a0ea Mon Sep 17 00:00:00 2001 From: Stefan Penner Date: Thu, 22 Jun 2017 14:39:53 -0700 Subject: [PATCH] loosen header parsing slightly --- addon/-private/utils/parse-response-headers.js | 2 +- tests/unit/utils/parse-response-headers-test.js | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/addon/-private/utils/parse-response-headers.js b/addon/-private/utils/parse-response-headers.js index 34d853a4040..3e02ab16fc8 100644 --- a/addon/-private/utils/parse-response-headers.js +++ b/addon/-private/utils/parse-response-headers.js @@ -21,7 +21,7 @@ export default function parseResponseHeaders(headersString) { } if (foundSep === false) { - break; + continue; } let field = header.substring(0, j).trim(); diff --git a/tests/unit/utils/parse-response-headers-test.js b/tests/unit/utils/parse-response-headers-test.js index b7c246cd284..d706a7b91d4 100644 --- a/tests/unit/utils/parse-response-headers-test.js +++ b/tests/unit/utils/parse-response-headers-test.js @@ -52,15 +52,26 @@ test('field-value parsing', function(assert) { assert.equal(headers['value-with-colon'], 'value with: a colon', 'has correct value when value contains a colon'); assert.equal(headers['value-with-trailing-whitespace'], 'banana', 'strips trailing whitespace from field-value'); }); +"\r\nfoo: bar" test('ignores headers that do not contain a colon', function(assert) { let headersString = [ 'Content-Encoding: gzip', - 'I am ignored because I do not contain a colon' + 'I am ignored because I do not contain a colon', + 'apple: pie' ].join(CRLF); let headers = parseResponseHeaders(headersString); assert.deepEqual(headers['Content-Encoding'], 'gzip', 'parses basic header pair'); + assert.deepEqual(headers['apple'], 'pie', 'parses basic header pair'); + assert.equal(Object.keys(headers).length, 2, 'only has the one valid header'); +}); + +test('tollerate extra new-lines', function(assert) { + let headersString = CRLF + 'foo: bar'; + let headers = parseResponseHeaders(headersString); + + assert.deepEqual(headers['foo'], 'bar', 'parses basic header pair'); assert.equal(Object.keys(headers).length, 1, 'only has the one valid header'); });