From dbf5198d17bc8a3e8ba81049db8373b839e05649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Nie=C3=9Fen?= Date: Sun, 30 Jul 2017 22:36:29 +0200 Subject: [PATCH 1/3] crypto: change segmentation faults to CHECKs Fixes: https://github.com/nodejs/node/issues/14519 --- src/node_crypto.cc | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/node_crypto.cc b/src/node_crypto.cc index 84f006b00f67eb..a77b634b67307c 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -5424,8 +5424,11 @@ void PBKDF2(const FunctionCallbackInfo& args) { if (args[5]->IsFunction()) { obj->Set(env->ondone_string(), args[5]); - if (env->in_domain()) - obj->Set(env->domain_string(), env->domain_array()->Get(0)); + if (env->in_domain()) { + obj->Set(env->domain_string(), + env->domain_array()->Get(env->context(), 0).ToLocalChecked()); + } + uv_queue_work(env->event_loop(), req->work_req(), PBKDF2Request::Work, @@ -5627,8 +5630,11 @@ void RandomBytes(const FunctionCallbackInfo& args) { if (args[1]->IsFunction()) { obj->Set(env->ondone_string(), args[1]); - if (env->in_domain()) - obj->Set(env->domain_string(), env->domain_array()->Get(0)); + if (env->in_domain()) { + obj->Set(env->domain_string(), + env->domain_array()->Get(env->context(), 0).ToLocalChecked()); + } + uv_queue_work(env->event_loop(), req->work_req(), RandomBytesWork, @@ -5673,7 +5679,8 @@ void RandomBytesBuffer(const FunctionCallbackInfo& args) { if (env->in_domain()) { obj->Set(env->context(), env->domain_string(), - env->domain_array()->Get(0)).FromJust(); + env->domain_array()->Get(env->context(), 0).ToLocalChecked()) + .FromJust(); } uv_queue_work(env->event_loop(), From 5199aa544c0cce24d506e8d34c36ca46c419fd0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Nie=C3=9Fen?= Date: Mon, 31 Jul 2017 01:07:26 +0200 Subject: [PATCH 2/3] Fix nit --- src/node_crypto.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/node_crypto.cc b/src/node_crypto.cc index a77b634b67307c..2520c6347efbb2 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -5680,7 +5680,7 @@ void RandomBytesBuffer(const FunctionCallbackInfo& args) { obj->Set(env->context(), env->domain_string(), env->domain_array()->Get(env->context(), 0).ToLocalChecked()) - .FromJust(); + .FromJust(); } uv_queue_work(env->event_loop(), From 96017272316a879919ef93aa51ad869eb4838bd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Nie=C3=9Fen?= Date: Mon, 31 Jul 2017 12:31:40 +0200 Subject: [PATCH 3/3] Crash if Set() fails --- src/node_crypto.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/node_crypto.cc b/src/node_crypto.cc index 2520c6347efbb2..eb69f3549a2255 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -5425,8 +5425,10 @@ void PBKDF2(const FunctionCallbackInfo& args) { obj->Set(env->ondone_string(), args[5]); if (env->in_domain()) { - obj->Set(env->domain_string(), - env->domain_array()->Get(env->context(), 0).ToLocalChecked()); + obj->Set(env->context(), + env->domain_string(), + env->domain_array()->Get(env->context(), 0).ToLocalChecked()) + .FromJust(); } uv_queue_work(env->event_loop(), @@ -5631,8 +5633,10 @@ void RandomBytes(const FunctionCallbackInfo& args) { obj->Set(env->ondone_string(), args[1]); if (env->in_domain()) { - obj->Set(env->domain_string(), - env->domain_array()->Get(env->context(), 0).ToLocalChecked()); + obj->Set(env->context(), + env->domain_string(), + env->domain_array()->Get(env->context(), 0).ToLocalChecked()) + .FromJust(); } uv_queue_work(env->event_loop(),