From 3c5d270e062addb214cf1e2ed5f394b15b327ed1 Mon Sep 17 00:00:00 2001 From: Yagiz Nizipli Date: Mon, 5 Jun 2023 11:57:27 -0400 Subject: [PATCH 1/3] src: add missing to_ascii method in dns queries --- src/cares_wrap.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/cares_wrap.cc b/src/cares_wrap.cc index da546b15f264c2..fe70bd91a5234c 100644 --- a/src/cares_wrap.cc +++ b/src/cares_wrap.cc @@ -1411,12 +1411,13 @@ static void Query(const FunctionCallbackInfo& args) { CHECK(args[1]->IsString()); Local req_wrap_obj = args[0].As(); - Local string = args[1].As(); auto wrap = std::make_unique(channel, req_wrap_obj); - node::Utf8Value name(env->isolate(), string); + auto plain_name = + node::Utf8Value(env->isolate(), args[1].As()).ToStringView(); + std::string name = ada::idna::to_ascii(plain_name); channel->ModifyActivityQueryCount(1); - int err = wrap->Send(*name); + int err = wrap->Send(name.data()); if (err) { channel->ModifyActivityQueryCount(-1); } else { From e0be0006ed2b912d9a2c285a7a5963ae6dfaf7e3 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 5 Jun 2023 19:17:24 -0400 Subject: [PATCH 2/3] fix: potentially dangling string_view instance --- src/cares_wrap.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cares_wrap.cc b/src/cares_wrap.cc index fe70bd91a5234c..3c76a4db041121 100644 --- a/src/cares_wrap.cc +++ b/src/cares_wrap.cc @@ -1411,10 +1411,11 @@ static void Query(const FunctionCallbackInfo& args) { CHECK(args[1]->IsString()); Local req_wrap_obj = args[0].As(); + Local string = args[1].As(); auto wrap = std::make_unique(channel, req_wrap_obj); - auto plain_name = - node::Utf8Value(env->isolate(), args[1].As()).ToStringView(); + node::Utf8Value utf8name(env->isolate(), string); + auto plain_name = utf8name.ToStringView(); std::string name = ada::idna::to_ascii(plain_name); channel->ModifyActivityQueryCount(1); int err = wrap->Send(name.data()); From a1030bfc6fc71372a3cdab0c257c4dec627d845b Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 5 Jun 2023 19:22:09 -0400 Subject: [PATCH 3/3] fix:passing a C string to be safe. --- src/cares_wrap.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cares_wrap.cc b/src/cares_wrap.cc index 3c76a4db041121..96aee6df99850f 100644 --- a/src/cares_wrap.cc +++ b/src/cares_wrap.cc @@ -1418,7 +1418,7 @@ static void Query(const FunctionCallbackInfo& args) { auto plain_name = utf8name.ToStringView(); std::string name = ada::idna::to_ascii(plain_name); channel->ModifyActivityQueryCount(1); - int err = wrap->Send(name.data()); + int err = wrap->Send(name.c_str()); if (err) { channel->ModifyActivityQueryCount(-1); } else {