summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMatteo Collina <hello@matteocollina.com>2019-09-03 09:41:15 +0200
committerMatteo Collina <hello@matteocollina.com>2019-12-03 12:14:50 +0100
commit286b4536c5bf754150fc5e42db06acae9691da13 (patch)
treeeb9b81cea64f03f29b228465d965fe11f26e36a6 /lib
parente490d9b1539a7ec5f6b9d9b2f18753ce1c3459f7 (diff)
downloadandroid-node-v8-286b4536c5bf754150fc5e42db06acae9691da13.tar.gz
android-node-v8-286b4536c5bf754150fc5e42db06acae9691da13.tar.bz2
android-node-v8-286b4536c5bf754150fc5e42db06acae9691da13.zip
http: implement capture rejections for 'request' event
PR-URL: https://github.com/nodejs/node/pull/27867 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Michaƫl Zasso <targos@protonmail.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/_http_server.js21
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/_http_server.js b/lib/_http_server.js
index 6c52f7adbc..3444c44a6c 100644
--- a/lib/_http_server.js
+++ b/lib/_http_server.js
@@ -27,6 +27,7 @@ const {
} = primordials;
const net = require('net');
+const EE = require('events');
const assert = require('internal/assert');
const {
parsers,
@@ -357,6 +358,26 @@ Server.prototype.setTimeout = function setTimeout(msecs, callback) {
return this;
};
+Server.prototype[EE.captureRejectionSymbol] = function(
+ err, event, req, res) {
+
+ switch (event) {
+ case 'request':
+ if (!res.headersSent && !res.writableEnded) {
+ // Don't leak headers.
+ for (const name of res.getHeaderNames()) {
+ res.removeHeader(name);
+ }
+ res.statusCode = 500;
+ res.end(STATUS_CODES[500]);
+ } else {
+ res.destroy();
+ }
+ break;
+ default:
+ this.emit('error', err);
+ }
+};
function connectionListener(socket) {
defaultTriggerAsyncIdScope(