Skip to content

Commit ce04e83

Browse files
author
Will Toozs
committed
fixup: bug fixes api
1 parent d18f9ec commit ce04e83

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

lib/api/api.js

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -186,11 +186,11 @@ const api = {
186186
}
187187
return { returnTagCount, isImplicitDeny };
188188
}
189-
let bb;
189+
let formDataParser;
190190
let fileEventData = null;
191191

192192
if (apiMethod === 'objectPost') {
193-
bb = busboy({ headers: request.headers });
193+
formDataParser = busboy({ headers: request.headers });
194194
}
195195

196196
return async.waterfall([
@@ -204,39 +204,41 @@ const api = {
204204
request.formData = {};
205205
let totalFieldSize = 0;
206206
const MAX_FIELD_SIZE = 20 * 1024; // 20KB
207-
bb.on('field', (fieldname, val) => {
207+
formDataParser.on('field', (fieldname, val) => {
208208
totalFieldSize += Buffer.byteLength(val, 'utf8');
209209
if (totalFieldSize > MAX_FIELD_SIZE) {
210210
const err = errors.MaxPostPreDataLengthExceeded;
211-
bb.emit('error', err);
211+
formDataParser.emit('error', err);
212212
}
213213
// Convert fieldname to lowercase for case-insensitive comparison
214214
const lowerFieldname = fieldname.toLowerCase();
215215
request.formData[lowerFieldname] = val;
216216
});
217217

218-
bb.on('file', (fieldname, file, filename, encoding, mimetype) => {
218+
formDataParser.on('file', (fieldname, file, filename, encoding, mimetype) => {
219219
fileEventData = { fieldname, file, filename, encoding, mimetype };
220220
return next(null);
221221
});
222222

223-
bb.on('finish', () => {
224-
// if fields are found but no file, continue
223+
formDataParser.on('finish', () => {
224+
// No file field == error
225225
if (!fileEventData) {
226-
return next(null);
226+
const err = errors.InvalidArgument
227+
.customizeDescription('POST requires exactly one file upload per request.');
228+
formDataParser.emit('error', err);
227229
}
228230
return undefined;
229231
});
230232

231-
bb.on('error', (err) => {
233+
formDataParser.on('error', (err) => {
232234
log.trace('Error processing form data:', {
233235
error: err,
234236
});
235-
request.unpipe(bb);
237+
request.unpipe(formDataParser);
236238
return next(err);
237239
});
238240

239-
request.pipe(bb);
241+
request.pipe(formDataParser);
240242
} else {
241243
// issue 100 Continue to the client
242244
writeContinue(request, response);

0 commit comments

Comments
 (0)