diff --git a/lib/cors-anywhere.js b/lib/cors-anywhere.js index 97e7b3b5..7a82400d 100644 --- a/lib/cors-anywhere.js +++ b/lib/cors-anywhere.js @@ -414,7 +414,7 @@ exports.createServer = function createServer(options) { // When the error occurs after setting headers but before writing the response, // then any previously set headers must be removed. - var headerNames = res.getHeaderNames ? res.getHeaderNames() : Object.keys(res._headers); + var headerNames = res.getHeaderNames ? res.getHeaderNames() : Object.keys(res._headers || {}); headerNames.forEach(function(name) { res.removeHeader(name); }); diff --git a/test/test.js b/test/test.js index d2885e5d..367a01ab 100644 --- a/test/test.js +++ b/test/test.js @@ -392,6 +392,16 @@ describe('Proxy errors', function() { }); it('Invalid HTTP status code', function(done) { + // Strict HTTP status validation was introduced in Node 4.5.5+, 5.11.0+. + // https://github.com/nodejs/node/pull/6291 + var nodev = process.versions.node.split('.').map(function(v) { return parseInt(v); }); + if (nodev[0] < 4 || + nodev[0] === 4 && nodev[1] < 5 || + nodev[0] === 4 && nodev[1] === 5 && nodev[2] < 5 || + nodev[0] === 5 && nodev[1] < 11) { + this.skip(); + } + var errorMessage = 'RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: 0'; if (parseInt(process.versions.node, 10) < 9) { errorMessage = 'RangeError: Invalid status code: 0';