Skip to content

Commit d1ec2d5

Browse files
author
Eran Hammer
committed
Merge pull request hapijs#2429 from kanongil/upload-limit-fix
Fix for hapijs#2427
2 parents 118330e + 07b7764 commit d1ec2d5

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

lib/transmit.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,16 @@ internals.transmit = function (response, callback) {
312312
var preview = (tap ? source.pipe(tap) : source);
313313
var compressed = (compressor ? preview.pipe(compressor) : preview);
314314
var ranged = (ranger ? compressed.pipe(ranger) : compressed);
315-
ranged.pipe(request.raw.res);
315+
ranged.pipe(request.raw.res, { end: false });
316+
317+
ranged.once('end', function () {
318+
319+
if (request.raw.req.complete === false) {
320+
return; // Don't end requests that are still uploading
321+
}
322+
323+
end();
324+
});
316325

317326
// Injection
318327

test/payload.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ var Code = require('code');
88
var Hapi = require('..');
99
var Hoek = require('hoek');
1010
var Lab = require('lab');
11+
var Wreck = require('wreck');
1112

1213

1314
// Declare internals
@@ -153,6 +154,40 @@ describe('payload', function () {
153154
});
154155
});
155156

157+
it('returns 400 when payload is not consumed', function (done) {
158+
159+
var payload = new Buffer(10 * 1024 * 1024).toString();
160+
161+
var handler = function (request, reply) {
162+
163+
expect(request.payload.toString()).to.equal(payload);
164+
return reply(request.payload);
165+
};
166+
167+
var server = new Hapi.Server();
168+
server.connection();
169+
server.route({ method: 'POST', path: '/', config: { handler: handler, payload: { maxBytes: 10 } } });
170+
171+
server.start(function () {
172+
173+
var uri = 'http://localhost:' + server.info.port;
174+
175+
Wreck.post(uri, { payload: payload, agent: false }, function (err, res, body) {
176+
177+
expect(err).to.not.exist();
178+
expect(res.statusCode).to.equal(400);
179+
expect(body).to.exist();
180+
Wreck.post(uri, { payload: payload, agent: false }, function (err, res, body) {
181+
182+
expect(err).to.not.exist();
183+
expect(res.statusCode).to.equal(400);
184+
expect(body).to.exist();
185+
done();
186+
});
187+
});
188+
});
189+
});
190+
156191
it('peeks at unparsed data', function (done) {
157192

158193
var data = null;

0 commit comments

Comments
 (0)