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) {
|
||||
if (msg.finished) {
|
||||
var err = new Error('write after end');
|
||||
nextTick(msg.socket[async_id_symbol],
|
||||
nextTick(msg.socket && msg.socket[async_id_symbol],
|
||||
writeAfterEndNT.bind(msg),
|
||||
err,
|
||||
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