forked from pool/nodejs-electron
- New upstream release 33.4.2 * Updated Node.js to v20.18.3 * Backported fix for a upstream bug that cause Offscreen Rendering to stutter. * Fixed WebFrameMain crash related to accessing speculative frames that have been destroyed. * Fixed v8.setHeapSnapshotNearHeapLimit api in main and utility process, along with support for --diagnostic-dir Node.js cli flag to specify the directory to save the heap snapshots. * Security fixes for V8: CVE-2025-0611 CVE-2025-0612 CVE-2025-0999. (bsc#1236306 bsc#1237343) - 15.6: revert upstream changes to build with c-ares 1.19 * node-cares-1.21.patch OBS-URL: https://build.opensuse.org/request/show/1249082 OBS-URL: https://build.opensuse.org/package/show/devel:languages:nodejs/nodejs-electron?expand=0&rev=192
156 lines
5.3 KiB
Diff
156 lines
5.3 KiB
Diff
From 8807549ed9f6eaf6842ae56b8ac55ab385951636 Mon Sep 17 00:00:00 2001
|
|
From: Aviv Keller <redyetidev@gmail.com>
|
|
Date: Wed, 30 Oct 2024 10:10:28 -0400
|
|
Subject: [PATCH] dns: stop using deprecated `ares_query`
|
|
|
|
PR-URL: https://github.com/nodejs/node/pull/55430
|
|
Refs: https://github.com/nodejs/node/issues/52464
|
|
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
|
|
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
|
|
---
|
|
src/cares_wrap.cc | 24 ++++++++++++------------
|
|
src/cares_wrap.h | 35 +++++++++++++++++++----------------
|
|
2 files changed, 31 insertions(+), 28 deletions(-)
|
|
|
|
diff --git a/src/cares_wrap.cc b/src/cares_wrap.cc
|
|
index ac79eeaaf7b150..84d2ab2b065e5d 100644
|
|
--- a/third_party/electron_node/src/cares_wrap.cc
|
|
+++ b/third_party/electron_node/src/cares_wrap.cc
|
|
@@ -830,62 +830,62 @@ void ChannelWrap::EnsureServers() {
|
|
}
|
|
|
|
int AnyTraits::Send(QueryWrap<AnyTraits>* wrap, const char* name) {
|
|
- wrap->AresQuery(name, ns_c_in, ns_t_any);
|
|
+ wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_ANY);
|
|
return ARES_SUCCESS;
|
|
}
|
|
|
|
int ATraits::Send(QueryWrap<ATraits>* wrap, const char* name) {
|
|
- wrap->AresQuery(name, ns_c_in, ns_t_a);
|
|
+ wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_A);
|
|
return ARES_SUCCESS;
|
|
}
|
|
|
|
int AaaaTraits::Send(QueryWrap<AaaaTraits>* wrap, const char* name) {
|
|
- wrap->AresQuery(name, ns_c_in, ns_t_aaaa);
|
|
+ wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_AAAA);
|
|
return ARES_SUCCESS;
|
|
}
|
|
|
|
int CaaTraits::Send(QueryWrap<CaaTraits>* wrap, const char* name) {
|
|
- wrap->AresQuery(name, ns_c_in, T_CAA);
|
|
+ wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_CAA);
|
|
return ARES_SUCCESS;
|
|
}
|
|
|
|
int CnameTraits::Send(QueryWrap<CnameTraits>* wrap, const char* name) {
|
|
- wrap->AresQuery(name, ns_c_in, ns_t_cname);
|
|
+ wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_CNAME);
|
|
return ARES_SUCCESS;
|
|
}
|
|
|
|
int MxTraits::Send(QueryWrap<MxTraits>* wrap, const char* name) {
|
|
- wrap->AresQuery(name, ns_c_in, ns_t_mx);
|
|
+ wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_MX);
|
|
return ARES_SUCCESS;
|
|
}
|
|
|
|
int NsTraits::Send(QueryWrap<NsTraits>* wrap, const char* name) {
|
|
- wrap->AresQuery(name, ns_c_in, ns_t_ns);
|
|
+ wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_NS);
|
|
return ARES_SUCCESS;
|
|
}
|
|
|
|
int TxtTraits::Send(QueryWrap<TxtTraits>* wrap, const char* name) {
|
|
- wrap->AresQuery(name, ns_c_in, ns_t_txt);
|
|
+ wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_TXT);
|
|
return ARES_SUCCESS;
|
|
}
|
|
|
|
int SrvTraits::Send(QueryWrap<SrvTraits>* wrap, const char* name) {
|
|
- wrap->AresQuery(name, ns_c_in, ns_t_srv);
|
|
+ wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_SRV);
|
|
return ARES_SUCCESS;
|
|
}
|
|
|
|
int PtrTraits::Send(QueryWrap<PtrTraits>* wrap, const char* name) {
|
|
- wrap->AresQuery(name, ns_c_in, ns_t_ptr);
|
|
+ wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_PTR);
|
|
return ARES_SUCCESS;
|
|
}
|
|
|
|
int NaptrTraits::Send(QueryWrap<NaptrTraits>* wrap, const char* name) {
|
|
- wrap->AresQuery(name, ns_c_in, ns_t_naptr);
|
|
+ wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_NAPTR);
|
|
return ARES_SUCCESS;
|
|
}
|
|
|
|
int SoaTraits::Send(QueryWrap<SoaTraits>* wrap, const char* name) {
|
|
- wrap->AresQuery(name, ns_c_in, ns_t_soa);
|
|
+ wrap->AresQuery(name, ARES_CLASS_IN, ARES_REC_TYPE_SOA);
|
|
return ARES_SUCCESS;
|
|
}
|
|
|
|
diff --git a/src/cares_wrap.h b/src/cares_wrap.h
|
|
index 021ef1c9de518e..4a5d22c0ef085f 100644
|
|
--- a/third_party/electron_node/src/cares_wrap.h
|
|
+++ b/third_party/electron_node/src/cares_wrap.h
|
|
@@ -246,18 +246,20 @@ class QueryWrap final : public AsyncWrap {
|
|
return Traits::Send(this, name);
|
|
}
|
|
|
|
- void AresQuery(const char* name, int dnsclass, int type) {
|
|
+ void AresQuery(const char* name,
|
|
+ ares_dns_class_t dnsclass,
|
|
+ ares_dns_rec_type_t type) {
|
|
channel_->EnsureServers();
|
|
TRACE_EVENT_NESTABLE_ASYNC_BEGIN1(
|
|
TRACING_CATEGORY_NODE2(dns, native), trace_name_, this,
|
|
"name", TRACE_STR_COPY(name));
|
|
- ares_query(
|
|
- channel_->cares_channel(),
|
|
- name,
|
|
- dnsclass,
|
|
- type,
|
|
- Callback,
|
|
- MakeCallbackPointer());
|
|
+ ares_query_dnsrec(channel_->cares_channel(),
|
|
+ name,
|
|
+ dnsclass,
|
|
+ type,
|
|
+ Callback,
|
|
+ MakeCallbackPointer(),
|
|
+ nullptr);
|
|
}
|
|
|
|
void ParseError(int status) {
|
|
@@ -304,19 +306,20 @@ class QueryWrap final : public AsyncWrap {
|
|
return wrap;
|
|
}
|
|
|
|
- static void Callback(
|
|
- void* arg,
|
|
- int status,
|
|
- int timeouts,
|
|
- unsigned char* answer_buf,
|
|
- int answer_len) {
|
|
+ static void Callback(void* arg,
|
|
+ ares_status_t status,
|
|
+ size_t timeouts,
|
|
+ const ares_dns_record_t* dnsrec) {
|
|
QueryWrap<Traits>* wrap = FromCallbackPointer(arg);
|
|
if (wrap == nullptr) return;
|
|
|
|
unsigned char* buf_copy = nullptr;
|
|
+ size_t answer_len = 0;
|
|
if (status == ARES_SUCCESS) {
|
|
- buf_copy = node::Malloc<unsigned char>(answer_len);
|
|
- memcpy(buf_copy, answer_buf, answer_len);
|
|
+ // No need to explicitly call ares_free_string here,
|
|
+ // as it is a wrapper around free, which is already
|
|
+ // invoked when MallocedBuffer is destructed.
|
|
+ ares_dns_write(dnsrec, &buf_copy, &answer_len);
|
|
}
|
|
|
|
wrap->response_data_ = std::make_unique<ResponseData>();
|