http: do not abort if socket is missing
Fixes: https://github.com/nodejs/node/issues/14368 PR-URL: https://github.com/nodejs/node/pull/14387 Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Trevor Norris <trev.norris@gmail.com>
This commit is contained in:
parent
107db33fb9
commit
69fdb47e20
@ -642,7 +642,7 @@ OutgoingMessage.prototype.write = function write(chunk, encoding, callback) {
|
|||||||
function write_(msg, chunk, encoding, callback, fromEnd) {
|
function write_(msg, chunk, encoding, callback, fromEnd) {
|
||||||
if (msg.finished) {
|
if (msg.finished) {
|
||||||
var err = new Error('write after end');
|
var err = new Error('write after end');
|
||||||
nextTick(msg.socket[async_id_symbol],
|
nextTick(msg.socket && msg.socket[async_id_symbol],
|
||||||
writeAfterEndNT.bind(msg),
|
writeAfterEndNT.bind(msg),
|
||||||
err,
|
err,
|
||||||
callback);
|
callback);
|
||||||
|
27
test/parallel/test-http-server-write-after-end.js
Normal file
27
test/parallel/test-http-server-write-after-end.js
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const http = require('http');
|
||||||
|
const assert = require('assert');
|
||||||
|
|
||||||
|
// Fix for https://github.com/nodejs/node/issues/14368
|
||||||
|
|
||||||
|
const server = http.createServer(handle);
|
||||||
|
|
||||||
|
function handle(req, res) {
|
||||||
|
res.on('error', common.mustCall((err) => {
|
||||||
|
assert.strictEqual(err.message, 'write after end');
|
||||||
|
server.close();
|
||||||
|
}));
|
||||||
|
|
||||||
|
res.write('hello');
|
||||||
|
res.end();
|
||||||
|
|
||||||
|
setImmediate(common.mustCall(() => {
|
||||||
|
res.write('world');
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
server.listen(0, common.mustCall(() => {
|
||||||
|
http.get(`http://localhost:${server.address().port}`);
|
||||||
|
}));
|
Loading…
x
Reference in New Issue
Block a user