Skip to content

Commit a4bb9fd

Browse files
committed
http: include provided status code in range error
ServerResponse#writeHead() coerces the user provided status code to a number and then performs a range check. If the check fails, a range error is thrown. The coerced status code is included in the error message. This commit uses the user provided status code instead. PR-URL: #11221 Reviewed-By: James M Snell <[email protected]>
1 parent c239581 commit a4bb9fd

File tree

2 files changed

+13
-11
lines changed

2 files changed

+13
-11
lines changed

lib/_http_server.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,11 @@ ServerResponse.prototype._implicitHeader = function _implicitHeader() {
161161

162162
ServerResponse.prototype.writeHead = writeHead;
163163
function writeHead(statusCode, reason, obj) {
164+
var originalStatusCode = statusCode;
165+
164166
statusCode |= 0;
165167
if (statusCode < 100 || statusCode > 999)
166-
throw new RangeError(`Invalid status code: ${statusCode}`);
168+
throw new RangeError(`Invalid status code: ${originalStatusCode}`);
167169

168170
if (typeof reason === 'string') {
169171
// writeHead(statusCode, reasonPhrase[, headers])

test/parallel/test-http-response-statuscode.js

+10-10
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,17 @@ const server = http.Server(common.mustCall(function(req, res) {
2020
case 1:
2121
assert.throws(common.mustCall(() => {
2222
res.writeHead(Infinity);
23-
}), createErrorMessage(0));
23+
}), createErrorMessage(Infinity));
2424
break;
2525
case 2:
2626
assert.throws(common.mustCall(() => {
2727
res.writeHead(NaN);
28-
}), createErrorMessage(0));
28+
}), createErrorMessage(NaN));
2929
break;
3030
case 3:
3131
assert.throws(common.mustCall(() => {
3232
res.writeHead({});
33-
}), createErrorMessage(0));
33+
}), createErrorMessage('\\[object Object\\]'));
3434
break;
3535
case 4:
3636
assert.throws(common.mustCall(() => {
@@ -45,37 +45,37 @@ const server = http.Server(common.mustCall(function(req, res) {
4545
case 6:
4646
assert.throws(common.mustCall(() => {
4747
res.writeHead('1000');
48-
}), createErrorMessage(1000));
48+
}), createErrorMessage('1000'));
4949
break;
5050
case 7:
5151
assert.throws(common.mustCall(() => {
5252
res.writeHead(null);
53-
}), createErrorMessage(0));
53+
}), createErrorMessage(null));
5454
break;
5555
case 8:
5656
assert.throws(common.mustCall(() => {
5757
res.writeHead(true);
58-
}), createErrorMessage(1));
58+
}), createErrorMessage(true));
5959
break;
6060
case 9:
6161
assert.throws(common.mustCall(() => {
6262
res.writeHead([]);
63-
}), createErrorMessage(0));
63+
}), createErrorMessage([]));
6464
break;
6565
case 10:
6666
assert.throws(common.mustCall(() => {
6767
res.writeHead('this is not valid');
68-
}), createErrorMessage(0));
68+
}), createErrorMessage('this is not valid'));
6969
break;
7070
case 11:
7171
assert.throws(common.mustCall(() => {
7272
res.writeHead('404 this is not valid either');
73-
}), createErrorMessage(0));
73+
}), createErrorMessage('404 this is not valid either'));
7474
break;
7575
case 12:
7676
assert.throws(common.mustCall(() => {
7777
res.writeHead();
78-
}), createErrorMessage(0));
78+
}), createErrorMessage(undefined));
7979
this.close();
8080
break;
8181
default:

0 commit comments

Comments
 (0)