Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
http: bubble up parser errors to ClientRequest
Make parser errors bubble up to the ClientRequest instead of the underlying
net.Socket object.

Fixes #3776.
  • Loading branch information
mscdex authored and bnoordhuis committed Aug 24, 2012
1 parent 1867511 commit c78678b
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 29 deletions.
4 changes: 3 additions & 1 deletion lib/http.js
Expand Up @@ -1367,7 +1367,9 @@ function socketOnData(d, start, end) {
if (ret instanceof Error) {
debug('parse error');
freeParser(parser, req);
socket.destroy(ret);
socket.destroy();
req.emit('error', ret);
req._hadError = true;
} else if (parser.incoming && parser.incoming.upgrade) {
// Upgrade or CONNECT
var bytesParsed = ret;
Expand Down
54 changes: 26 additions & 28 deletions test/simple/test-http-client-parse-error.js
Expand Up @@ -25,37 +25,35 @@ var assert = require('assert');
var http = require('http');
var net = require('net');

// Create a TCP server
var srv = net.createServer(function(c) {
c.write('bad http - should trigger parse error\r\n');
var connects = 0;
var parseErrors = 0;

// Create a TCP server
net.createServer(function(c) {
console.log('connection');

c.on('end', function() { c.end(); });
});

var parseError = false;

srv.listen(common.PORT, '127.0.0.1', function() {
var req = http.request({
host: '127.0.0.1',
port: common.PORT,
method: 'GET',
path: '/'});
req.end();

req.on('error', function(e) {
console.log('got error from client');
srv.close();
assert.ok(e.message.indexOf('Parse Error') >= 0);
assert.equal(e.code, 'HPE_INVALID_CONSTANT');
parseError = true;
});
if (++connects === 1) {
c.end('HTTP/1.1 302 Object Moved\r\nContent-Length: 0\r\n\r\nhi world');
} else {
c.end('bad http - should trigger parse error\r\n');
this.close();
}
}).listen(common.PORT, '127.0.0.1', function() {
for (var i = 0; i < 2; i++) {
http.request({
host: '127.0.0.1',
port: common.PORT,
method: 'GET',
path: '/'
}).on('error', function(e) {
console.log('got error from client');
assert.ok(e.message.indexOf('Parse Error') >= 0);
assert.equal(e.code, 'HPE_INVALID_CONSTANT');
parseErrors++;
}).end();
}
});


process.on('exit', function() {
assert.ok(parseError);
assert.equal(connects, 2);
assert.equal(parseErrors, 2);
});


0 comments on commit c78678b

Please sign in to comment.