Skip to content

Commit fa01907

Browse files
committed
Upload-Defer-Length value MUST be 1
1 parent 173318c commit fa01907

File tree

5 files changed

+30
-15
lines changed

5 files changed

+30
-15
lines changed

lib/handlers/HeadHandler.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class HeadHandler extends BaseHandler {
3232
return super.send(res, error);
3333
}
3434

35-
return super.send(res, 404);
35+
return super.send(res, 500);
3636
});
3737
}
3838
}

lib/handlers/PatchHandler.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class PatchHandler extends BaseHandler {
5656
return super.send(res, error);
5757
}
5858

59-
return super.send(res, 404);
59+
return super.send(res, 500);
6060
});
6161
}
6262
}

lib/handlers/PostHandler.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,19 @@ class PostHandler extends BaseHandler {
1616
const deferred_length = req.headers['upload-defer-length'];
1717
// The request MUST include a Upload-Length or Upload-Defer-Length header
1818
if (!length && !deferred_length) {
19-
return super.send(res, 400, { 'Content-Type': 'text/plain' }, 'Upload-Length or Upload-Defer-Length required');
19+
return super.send(res, 400);
2020
}
2121

2222
length = parseInt(length, 10);
2323
// The value MUST be a non-negative integer.
2424
if (isNaN(length) || length < 0) {
25-
return super.send(res, 400, { 'Content-Type': 'text/plain' }, 'Upload-Length must be non-negative');
25+
return super.send(res, 400);
26+
}
27+
28+
length = parseInt(length, 10);
29+
// The Upload-Defer-Length value MUST be 1.
30+
if (deferred_length && deferred_length !== '1') {
31+
return super.send(res, 400);
2632
}
2733

2834
const file = new File(length);
@@ -32,7 +38,11 @@ class PostHandler extends BaseHandler {
3238
return super.send(res, 201, { Location: url });
3339
})
3440
.catch((error) => {
35-
super.send(res, 404);
41+
if (Number.isInteger(error)) {
42+
return super.send(res, error);
43+
}
44+
45+
return super.send(res, 500);
3646
});
3747
}
3848
}

test/Test-PostHandler.js

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
/* eslint-env node, mocha */
2+
/* eslint no-unused-vars: ["error", { "vars": "none" }] */
13
'use strict';
24

35
const assert = require('assert');
@@ -6,10 +8,6 @@ const http = require('http');
68
const DataStore = require('../lib/stores/DataStore');
79
const PostHandler = require('../lib/handlers/PostHandler');
810

9-
let pluckBody = (res) => {
10-
return /\n(.*)$/.exec(res.output[0])[1];
11-
}
12-
1311
describe('PostHandler', () => {
1412
let res = null;
1513
let store = new DataStore({ path: '/files' });
@@ -25,8 +23,7 @@ describe('PostHandler', () => {
2523
it('MUST require the Upload-Length or Upload-Defer-Length required header', (done) => {
2624
req.headers = {};
2725
handler.send(req, res);
28-
assert.equal(res.statusCode, 400)
29-
assert.equal(pluckBody(res), 'Upload-Length or Upload-Defer-Length required');
26+
assert.equal(res.statusCode, 400);
3027
done();
3128
});
3229

@@ -35,8 +32,16 @@ describe('PostHandler', () => {
3532
'upload-length': -2
3633
};
3734
handler.send(req, res);
38-
assert.equal(res.statusCode, 400)
39-
assert.equal(pluckBody(res), 'Upload-Length must be non-negative');
35+
assert.equal(res.statusCode, 400);
36+
done();
37+
});
38+
39+
it('The Upload-Defer-Length value MUST be 1', (done) => {
40+
req.headers = {
41+
'upload-defer-length': 5
42+
};
43+
handler.send(req, res);
44+
assert.equal(res.statusCode, 400);
4045
done();
4146
});
4247

test/Test-Server.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,15 @@ describe('Server', () => {
6969
request(server.listen())
7070
.post(server.datastore.path)
7171
.set('Tus-Resumable', TUS_RESUMABLE)
72-
.expect(400, 'Upload-Length or Upload-Defer-Length required', done)
72+
.expect(400, {}, done)
7373
});
7474

7575
it('POST should require non negative Upload-Length number', (done) => {
7676
request(server.listen())
7777
.post(server.datastore.path)
7878
.set('Tus-Resumable', TUS_RESUMABLE)
7979
.set('Upload-Length', -3)
80-
.expect(400, 'Upload-Length must be non-negative', done)
80+
.expect(400, {}, done)
8181
});
8282

8383
it('should 404 other requests', (done) => {

0 commit comments

Comments
 (0)