Skip to content

Commit

Permalink
Merge pull request #3842 from hardillb/fix-broken-headers-tests
Browse files Browse the repository at this point in the history
Add missing property to node object HTTPRequest
  • Loading branch information
knolleary committed Sep 2, 2022
2 parents a032c2e + 58b951e commit a5d7f7a
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ in your Node-RED user directory (${RED.settings.userDir}).
if (n.paytoqs === true || n.paytoqs === "query") { paytoqs = true; }
else if (n.paytoqs === "body") { paytobody = true; }

node.insecureHTTPParser = n.insecureHTTPParser

var prox, noprox;
if (process.env.http_proxy) { prox = process.env.http_proxy; }
Expand Down
71 changes: 71 additions & 0 deletions test/nodes/core/network/21-httprequest_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ var multer = require("multer");
var RED = require("nr-test-utils").require("node-red/lib/red");
var fs = require('fs-extra');
var auth = require('basic-auth');
const { version } = require("os");
const net = require('net')

describe('HTTP Request Node', function() {
var testApp;
Expand Down Expand Up @@ -2265,4 +2267,73 @@ describe('HTTP Request Node', function() {
});
});
});

describe('should parse broken headers', function(done) {

const versions = process.versions.node.split('.')

if (( versions[0] == 14 && versions[1] >= 20 ) ||
( versions[0] == 16 && versions[1] >= 16 ) ||
( versions[0] == 18 && versions[1] >= 5 ) ||
( versions[0] > 18)) {
// only test if on new enough NodeJS version

let port = testPort++

let server;

before(function() {
server = net.createServer(function (socket) {
socket.write("HTTP/1.0 200\nContent-Type: text/plain\n\nHelloWorld")
socket.end()
})

server.listen(port,'127.0.0.1', function(err) {
})
});

after(function() {
server.close()
});

it('should accept broken headers', function (done) {
var flow = [{id:'n1',type:'http request',wires:[['n2']],method:'GET',ret:'obj',url:`http://localhost:${port}/`, insecureHTTPParser: true},
{id:"n2", type:"helper"}];
helper.load(httpRequestNode, flow, function() {
var n1 = helper.getNode("n1");
var n2 = helper.getNode("n2");
n2.on('input', function(msg) {
try {
msg.payload.should.equal('HelloWorld')
done()
} catch (err) {
done(err)
}
})
n1.receive({payload: 'foo'})
});
});

it('should reject broken headers', function (done) {
var flow = [{id:'n1',type:'http request',wires:[['n2']],method:'GET',ret:'obj',url:`http://localhost:${port}/`},
{id:"n2", type:"helper"}];
helper.load(httpRequestNode, flow, function() {
var n1 = helper.getNode("n1");
var n2 = helper.getNode("n2");
n2.on('input', function(msg) {
try{
msg.payload.should.equal(`RequestError: Parse Error: Missing expected CR after header value : http://localhost:${port}/`)
done()
} catch (err) {
done(err)
}
})
n1.receive({payload: 'foo'})

});
});
} else {
done()
}
});
});

0 comments on commit a5d7f7a

Please sign in to comment.