Skip to content

Commit

Permalink
tls: cleanup onhandshakestart callback
Browse files Browse the repository at this point in the history
Re-arrange and cleanup the flow of the onhandshakestart to be
more clear and less repetitive. Exit early in the case of a
first ever handshake for a given connection.

PR-URL: #20466
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
  • Loading branch information
apapirovski authored and MylesBorins committed May 8, 2018
1 parent d0cbb4c commit cfb2f34
Showing 1 changed file with 15 additions and 19 deletions.
34 changes: 15 additions & 19 deletions lib/_tls_wrap.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,32 +62,28 @@ const noop = () => {};
function onhandshakestart(now) {
debug('onhandshakestart');

assert(now >= this.lastHandshakeTime);
const { lastHandshakeTime } = this;
assert(now >= lastHandshakeTime);

const owner = this.owner;
this.lastHandshakeTime = now;

if ((now - this.lastHandshakeTime) >= tls.CLIENT_RENEG_WINDOW * 1000) {
this.handshakes = 0;
}
// If this is the first handshake we can skip the rest of the checks.
if (lastHandshakeTime === 0)
return;

const first = (this.lastHandshakeTime === 0);
this.lastHandshakeTime = now;
if (first) return;
if ((now - lastHandshakeTime) >= tls.CLIENT_RENEG_WINDOW * 1000)
this.handshakes = 1;
else
this.handshakes++;

if (++this.handshakes > tls.CLIENT_RENEG_LIMIT) {
// Defer the error event to the next tick. We're being called from OpenSSL's
// state machine and OpenSSL is not re-entrant. We cannot allow the user's
// callback to destroy the connection right now, it would crash and burn.
setImmediate(emitSessionAttackError, owner);
const { owner } = this;
if (this.handshakes > tls.CLIENT_RENEG_LIMIT) {
owner._emitTLSError(new ERR_TLS_SESSION_ATTACK());
return;
}

if (owner[kDisableRenegotiation] && this.handshakes > 0) {
if (owner[kDisableRenegotiation])
owner._emitTLSError(new ERR_TLS_RENEGOTIATION_DISABLED());
}
}

function emitSessionAttackError(socket) {
socket._emitTLSError(new ERR_TLS_SESSION_ATTACK());
}

function onhandshakedone() {
Expand Down

0 comments on commit cfb2f34

Please sign in to comment.