summaryrefslogtreecommitdiff
path: root/lib/_http_outgoing.js
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2017-11-03 20:04:12 +0800
committerJoyee Cheung <joyeec9h3@gmail.com>2017-11-06 18:24:34 +0800
commit0a84e95cd9293bfcf1e746857921684f0732dd60 (patch)
tree719f4113cd1c7dad36b324ef075ed069fc2f8b45 /lib/_http_outgoing.js
parent11a9f36cae0d1e6e11c9f40ec82d9f887aa0a911 (diff)
downloadandroid-node-v8-0a84e95cd9293bfcf1e746857921684f0732dd60.tar.gz
android-node-v8-0a84e95cd9293bfcf1e746857921684f0732dd60.tar.bz2
android-node-v8-0a84e95cd9293bfcf1e746857921684f0732dd60.zip
http: improve errors thrown in header validation
PR-URL: https://github.com/nodejs/node/pull/16719 Fixes: https://github.com/nodejs/node/issues/16714 Reviewed-By: Anatoli Papirovski <apapirovski@mac.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'lib/_http_outgoing.js')
-rw-r--r--lib/_http_outgoing.js38
1 files changed, 18 insertions, 20 deletions
diff --git a/lib/_http_outgoing.js b/lib/_http_outgoing.js
index 76d83b1921..b4cfe61d86 100644
--- a/lib/_http_outgoing.js
+++ b/lib/_http_outgoing.js
@@ -437,16 +437,7 @@ function _storeHeader(firstLine, headers) {
function storeHeader(self, state, key, value, validate) {
if (validate) {
- if (typeof key !== 'string' || !key || !checkIsHttpToken(key)) {
- throw new errors.TypeError(
- 'ERR_INVALID_HTTP_TOKEN', 'Header name', key);
- }
- if (value === undefined) {
- throw new errors.TypeError('ERR_MISSING_ARGS', `header "${key}"`);
- } else if (checkInvalidHeaderChar(value)) {
- debug('Header "%s" contains invalid characters', key);
- throw new errors.TypeError('ERR_INVALID_CHAR', 'header content', key);
- }
+ validateHeader(key, value);
}
state.header += key + ': ' + escapeHeaderValue(value) + CRLF;
matchHeader(self, state, key, value);
@@ -494,20 +485,27 @@ function matchHeader(self, state, field, value) {
}
}
-function validateHeader(msg, name, value) {
- if (typeof name !== 'string' || !name || !checkIsHttpToken(name))
- throw new errors.TypeError('ERR_INVALID_HTTP_TOKEN', 'Header name', name);
- if (value === undefined)
- throw new errors.TypeError('ERR_MISSING_ARGS', 'value');
- if (msg._header)
- throw new errors.Error('ERR_HTTP_HEADERS_SENT', 'set');
- if (checkInvalidHeaderChar(value)) {
+function validateHeader(name, value) {
+ let err;
+ if (typeof name !== 'string' || !name || !checkIsHttpToken(name)) {
+ err = new errors.TypeError('ERR_INVALID_HTTP_TOKEN', 'Header name', name);
+ } else if (value === undefined) {
+ err = new errors.TypeError('ERR_HTTP_INVALID_HEADER_VALUE', value, name);
+ } else if (checkInvalidHeaderChar(value)) {
debug('Header "%s" contains invalid characters', name);
- throw new errors.TypeError('ERR_INVALID_CHAR', 'header content', name);
+ err = new errors.TypeError('ERR_INVALID_CHAR', 'header content', name);
+ }
+ if (err !== undefined) {
+ Error.captureStackTrace(err, validateHeader);
+ throw err;
}
}
+
OutgoingMessage.prototype.setHeader = function setHeader(name, value) {
- validateHeader(this, name, value);
+ if (this._header) {
+ throw new errors.Error('ERR_HTTP_HEADERS_SENT', 'set');
+ }
+ validateHeader(name, value);
if (!this[outHeadersKey])
this[outHeadersKey] = {};