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'); });