restify/node-restify
Ver no GitHubbodyParser ignores maxBodySize and buffers whole file in memory for file uploads
Open
#956 aberto em 23 de nov. de 2015
BugCriticalGood First IssueHelp Wanted
Description
The bodyParser middleware seems to buffer the whole file in memory for file uploads.
Check the following minimum example:
'use strict';
var os = require( 'os' );
var restify = require( 'restify' );
var server = restify.createServer( {} );
server.use( restify.bodyParser( {
// this should supposedly limit maximum upload size to 10 KiB
maxBodySize: 10 * 1024,
mapParms: true,
mapFiles: true,
keepExtensions: true,
uploadDir: os.tmpdir()
} ) );
server.get( '/', function( req, res, next ) {
res.json( { message: 'hello' } );
next();
} );
server.post( '/upload', function( req, res, next ) {
console.log( 'Received files:', req.files );
res.send( 200 );
next();
} );
server.listen( 8000 );
Then, upload a really big file to it:
# bigfile.dat has a couple of GiB
curl -F "file=@/path/to/bigfile.dat" localhost:8000/upload
This will send the process into accumulating tons of memory until it eventually runs out of memory and crashes with:
FATAL ERROR: JS Allocation failed - process out of memory
Am I making a mistake in setting up the middleware or is this a bug?