mirror of
https://github.com/nodejs/node.git
synced 2025-12-28 07:50:41 +00:00
tls: fix session and keylog add listener segfault
Fix an issue where adding a session or keylog listener on a tlsSocket after it was destroyed caused a segfault. fixes: https://github.com/nodejs/node/issues/38133 fixes: https://github.com/nodejs/node/issues/38135 PR-URL: https://github.com/nodejs/node/pull/38180 Fixes: https://github.com/nodejs/node/issues/38133 Fixes: https://github.com/nodejs/node/issues/38135 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
parent
0180fc5b9b
commit
3da003cc1c
@ -689,7 +689,9 @@ TLSSocket.prototype._init = function(socket, wrap) {
|
||||
if (event !== 'keylog')
|
||||
return;
|
||||
|
||||
ssl.enableKeylogCallback();
|
||||
// Guard against enableKeylogCallback after destroy
|
||||
if (!this._handle) return;
|
||||
this._handle.enableKeylogCallback();
|
||||
|
||||
// Remove this listener since it's no longer needed.
|
||||
this.removeListener('newListener', keylogNewListener);
|
||||
@ -733,7 +735,9 @@ TLSSocket.prototype._init = function(socket, wrap) {
|
||||
if (event !== 'session')
|
||||
return;
|
||||
|
||||
ssl.enableSessionCallbacks();
|
||||
// Guard against enableSessionCallbacks after destroy
|
||||
if (!this._handle) return;
|
||||
this._handle.enableSessionCallbacks();
|
||||
|
||||
// Remove this listener since it's no longer needed.
|
||||
this.removeListener('newListener', newListener);
|
||||
|
||||
22
test/parallel/test-tls-tlswrap-segfault-2.js
Normal file
22
test/parallel/test-tls-tlswrap-segfault-2.js
Normal file
@ -0,0 +1,22 @@
|
||||
'use strict';
|
||||
const common = require('../common');
|
||||
if (!common.hasCrypto)
|
||||
common.skip('missing crypto');
|
||||
|
||||
// This test ensures that Node.js doesn't incur a segfault while
|
||||
// adding session or keylog listeners after destroy.
|
||||
// https://github.com/nodejs/node/issues/38133
|
||||
// https://github.com/nodejs/node/issues/38135
|
||||
|
||||
const tls = require('tls');
|
||||
const tlsSocketKeyLog = tls.connect('cause-error');
|
||||
tlsSocketKeyLog.on('error', common.mustCall());
|
||||
tlsSocketKeyLog.on('close', common.mustCall(() => {
|
||||
tlsSocketKeyLog.on('keylog', common.mustNotCall());
|
||||
}));
|
||||
|
||||
const tlsSocketSession = tls.connect('cause-error-2');
|
||||
tlsSocketSession.on('error', common.mustCall());
|
||||
tlsSocketSession.on('close', common.mustCall(() => {
|
||||
tlsSocketSession.on('session', common.mustNotCall());
|
||||
}));
|
||||
Loading…
Reference in New Issue
Block a user