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‎

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

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

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

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,17 @@ const server = http.Server(common.mustCall(function(req, res){
2020
case1:
2121
assert.throws(common.mustCall(()=>{
2222
res.writeHead(Infinity);
23-
}),createErrorMessage(0));
23+
}),createErrorMessage(Infinity));
2424
break;
2525
case2:
2626
assert.throws(common.mustCall(()=>{
2727
res.writeHead(NaN);
28-
}),createErrorMessage(0));
28+
}),createErrorMessage(NaN));
2929
break;
3030
case3:
3131
assert.throws(common.mustCall(()=>{
3232
res.writeHead({});
33-
}),createErrorMessage(0));
33+
}),createErrorMessage('\\[object Object\\]'));
3434
break;
3535
case4:
3636
assert.throws(common.mustCall(()=>{
@@ -45,37 +45,37 @@ const server = http.Server(common.mustCall(function(req, res){
4545
case6:
4646
assert.throws(common.mustCall(()=>{
4747
res.writeHead('1000');
48-
}),createErrorMessage(1000));
48+
}),createErrorMessage('1000'));
4949
break;
5050
case7:
5151
assert.throws(common.mustCall(()=>{
5252
res.writeHead(null);
53-
}),createErrorMessage(0));
53+
}),createErrorMessage(null));
5454
break;
5555
case8:
5656
assert.throws(common.mustCall(()=>{
5757
res.writeHead(true);
58-
}),createErrorMessage(1));
58+
}),createErrorMessage(true));
5959
break;
6060
case9:
6161
assert.throws(common.mustCall(()=>{
6262
res.writeHead([]);
63-
}),createErrorMessage(0));
63+
}),createErrorMessage([]));
6464
break;
6565
case10:
6666
assert.throws(common.mustCall(()=>{
6767
res.writeHead('this is not valid');
68-
}),createErrorMessage(0));
68+
}),createErrorMessage('this is not valid'));
6969
break;
7070
case11:
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
case12:
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)