From ceace1f96eb0862a2944bc38c2e897974169f622 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Tue, 20 Aug 2019 14:10:42 +0200 Subject: [PATCH] crypto: handle i2d_SSL_SESSION() error return i2d_SSL_SESSION() can return a value <= 0 when the session is malformed or otherwise invalid. Handle that case. This change comes without a regression test because I couldn't figure out a good way to generate an existing but invalid session in a timely fashion. Fixes: https://github.com/nodejs/node/issues/29202 PR-URL: https://github.com/nodejs/node/pull/29225 Reviewed-By: Colin Ihrig Reviewed-By: Anna Henningsen Reviewed-By: James M Snell --- src/node_crypto.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/node_crypto.cc b/src/node_crypto.cc index de301d77c229c1..5634d8b1dc5379 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -2317,11 +2317,12 @@ void SSLWrap::GetSession(const FunctionCallbackInfo& args) { return; int slen = i2d_SSL_SESSION(sess, nullptr); - CHECK_GT(slen, 0); + if (slen <= 0) + return; // Invalid or malformed session. AllocatedBuffer sbuf = env->AllocateManaged(slen); unsigned char* p = reinterpret_cast(sbuf.data()); - i2d_SSL_SESSION(sess, &p); + CHECK_LT(0, i2d_SSL_SESSION(sess, &p)); args.GetReturnValue().Set(sbuf.ToBuffer().ToLocalChecked()); }