diff options
author | Matt Ranney <mjr@ranney.com> | 2011-02-17 20:41:13 -1000 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2011-02-18 00:08:05 -0800 |
commit | ab969bfaf85c1b0d95e1fa5ad54e53b2543ec014 (patch) | |
tree | 0cdd2626657fbc242fa2c099fbb25fa1a169155b /test | |
parent | 15a6aa75009e285113e4cc2b13daaf5c67633fb7 (diff) | |
download | nodejs-ab969bfaf85c1b0d95e1fa5ad54e53b2543ec014.tar.gz nodejs-ab969bfaf85c1b0d95e1fa5ad54e53b2543ec014.tar.bz2 nodejs-ab969bfaf85c1b0d95e1fa5ad54e53b2543ec014.zip |
Add failing test for broken HTTP responses with extra bytes.
For GH-680.
Diffstat (limited to 'test')
-rw-r--r-- | test/simple/test-http-extra-response.js | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/test/simple/test-http-extra-response.js b/test/simple/test-http-extra-response.js new file mode 100644 index 000000000..741372f65 --- /dev/null +++ b/test/simple/test-http-extra-response.js @@ -0,0 +1,65 @@ +var common = require('../common'); +var assert = require('assert'); +var http = require('http'); +var net = require('net'); + +// If an HTTP server is broken and sends data after the end of the response, +// node should ignore it and drop the connection. +// Demos this bug: https://github.com/ry/node/issues/680 + +var body = 'hello world\r\n'; +var fullResponse = + 'HTTP/1.1 500 Internal Server Error\r\n' + + 'Content-Length: ' + body.length + '\r\n' + + 'Content-Type: text/plain\r\n' + + 'Date: Fri + 18 Feb 2011 06:22:45 GMT\r\n' + + 'Host: 10.20.149.2\r\n' + + 'Access-Control-Allow-Credentials: true\r\n' + + 'Server: badly broken/0.1 (OS NAME)\r\n' + + '\r\n' + + body; + +var gotResponse = false; + + +var server = net.createServer(function (socket) { + var postBody = ''; + + socket.setEncoding('utf8'); + + socket.on('data', function (chunk) { + postBody += chunk; + + if (postBody.indexOf('\r\n') > -1) { + socket.write(fullResponse); + // omg, I wrote the response twice, what a terrible HTTP server I am. + socket.end(fullResponse); + } + }); +}); + + +server.listen(common.PORT, function() { + http.get({ port: common.PORT }, function(res) { + var buffer = ''; + console.log('Got res code: ' + res.statusCode); + + res.setEncoding('utf8'); + res.on('data', function (chunk) { + buffer += chunk; + }); + + res.on('end', function () { + console.log('Response ended, read ' + buffer.length + ' bytes'); + assert.equal(body, buffer); + server.close(); + gotResponse = true; + }); + }); +}); + + +process.on('exit', function() { + assert.ok(gotResponse); +}); + |