busboy
Advanced tools
Comparing version 0.0.13 to 0.0.14
@@ -28,5 +28,5 @@ // TODO: | ||
defCharset = cfg.defCharset || 'utf8', | ||
fileopts = typeof cfg.fileHwm === 'number' | ||
? { highWaterMark: cfg.fileHwm } | ||
: {}; | ||
fileopts = (typeof cfg.fileHwm === 'number' | ||
? { highWaterMark: cfg.fileHwm } | ||
: {}); | ||
@@ -71,3 +71,3 @@ for (i = 0, len = parsedConType.length; i < len; ++i) { | ||
if (cfg.highWaterMark) | ||
parserCfg.highWaterMark = cfg.highWaterMark | ||
parserCfg.highWaterMark = cfg.highWaterMark; | ||
this.parser = new Dicer(parserCfg); | ||
@@ -85,4 +85,5 @@ this.parser.on('drain', function() { | ||
self.parser.removeListener('part', onPart); | ||
self.parser.on('part', skipParts); | ||
return; | ||
self.parser.on('part', skipPart); | ||
boy.emit('partsLimit'); | ||
return skipPart(part); | ||
} | ||
@@ -110,3 +111,3 @@ part.on('header', function(header) { | ||
if (!RE_FIELD.test(parsed[0])) | ||
return; | ||
return skipPart(part); | ||
for (i = 0, len = parsed.length; i < len; ++i) { | ||
@@ -128,3 +129,3 @@ if (RE_NAME.test(parsed[i][0])) { | ||
} else | ||
return; | ||
return skipPart(part); | ||
@@ -139,4 +140,9 @@ if (header['content-transfer-encoding']) | ||
// file/binary field | ||
if (nfiles === filesLimit) | ||
return; | ||
if (nfiles === filesLimit) { | ||
if (!boy.hitFilesLimit) { | ||
boy.hitFilesLimit = true; | ||
boy.emit('filesLimit'); | ||
} | ||
return skipPart(part); | ||
} | ||
@@ -164,3 +170,5 @@ ++nfiles; | ||
if ((nsize += data.length) > fileSizeLimit) { | ||
file.push(data.slice(0, (fileSizeLimit - nsize))); | ||
var extralen = (fileSizeLimit - (nsize - data.length)); | ||
if (extralen > 0) | ||
file.push(data.slice(0, extralen)); | ||
file.emit('limit'); | ||
@@ -177,4 +185,9 @@ part.removeAllListeners('data'); | ||
// non-file field | ||
if (nfields === fieldsLimit) | ||
return; | ||
if (nfields === fieldsLimit) { | ||
if (!boy.hitFieldsLimit) { | ||
boy.hitFieldsLimit = true; | ||
boy.emit('fieldsLimit'); | ||
} | ||
return skipPart(part); | ||
} | ||
@@ -187,3 +200,4 @@ ++nfields; | ||
if ((nsize += data.length) > fieldSizeLimit) { | ||
buffer += data.toString('binary', 0, (fieldSizeLimit - nsize)); | ||
var extralen = (fieldSizeLimit - (nsize - data.length)); | ||
buffer += data.toString('binary', 0, extralen); | ||
truncated = true; | ||
@@ -233,3 +247,3 @@ part.removeAllListeners('data'); | ||
function skipParts(part) { | ||
function skipPart(part) { | ||
part.resume(); | ||
@@ -236,0 +250,0 @@ } |
@@ -49,4 +49,9 @@ var jsencoding = require('../../deps/encoding/encoding'), | ||
UrlEncoded.prototype.write = function(data, cb) { | ||
if (this._fields === this.fieldsLimit) | ||
if (this._fields === this.fieldsLimit) { | ||
if (!boy.hitFieldsLimit) { | ||
this.boy.hitFieldsLimit = true; | ||
this.boy.emit('fieldsLimit'); | ||
} | ||
return cb(); | ||
} | ||
@@ -53,0 +58,0 @@ var idxeq, idxamp, i, p = 0, len = data.length; |
{ "name": "busboy", | ||
"version": "0.0.13", | ||
"version": "0.0.14", | ||
"author": "Brian White <mscdex@mscdex.net>", | ||
@@ -4,0 +4,0 @@ "description": "A streaming parser for HTML form data for node.js", |
@@ -193,3 +193,9 @@ Description | ||
* **partsLimit**() - Emitted when specified `parts` limit has been reached. No more 'file' or 'field' events will be emitted. | ||
* **filesLimit**() - Emitted when specified `files` limit has been reached. No more 'file' events will be emitted. | ||
* **fieldsLimit**() - Emitted when specified `fields` limit has been reached. No more 'field' events will be emitted. | ||
**Note:** The `stream` passed in on the 'file' event will also emit a 'limit' event (no arguments) if the `fileSize` limit is reached. If this happens, no more data will be available on the stream. | ||
@@ -196,0 +202,0 @@ |
@@ -76,2 +76,26 @@ var Multipart = require('../lib/types/multipart'), | ||
}, | ||
{ source: [ | ||
['-----------------------------paZqsnEHRufoShdX6fh0lUhXBP4k', | ||
'Content-Disposition: form-data; name="file_name_0"', | ||
'', | ||
'super alpha file', | ||
'-----------------------------paZqsnEHRufoShdX6fh0lUhXBP4k', | ||
'Content-Disposition: form-data; name="upload_file_0"; filename="1k_a.dat"', | ||
'Content-Type: application/octet-stream', | ||
'', | ||
'ABCDEFGHIJKLMNOPQRSTUVWXYZ', | ||
'-----------------------------paZqsnEHRufoShdX6fh0lUhXBP4k--' | ||
].join('\r\n') | ||
], | ||
boundary: '---------------------------paZqsnEHRufoShdX6fh0lUhXBP4k', | ||
limits: { | ||
fileSize: 13, | ||
fieldSize: 5 | ||
}, | ||
expected: [ | ||
['field', 'file_name_0', 'super', true, false], | ||
['file', 'upload_file_0', 13, true, '1k_a.dat', '7bit', 'application/octet-stream'] | ||
], | ||
what: 'Fields and files (limits)' | ||
}, | ||
]; | ||
@@ -78,0 +102,0 @@ |
664157
5290
231