summaryrefslogtreecommitdiff
path: root/ext/node/polyfills/dns.ts
diff options
context:
space:
mode:
authorNathan Whitaker <17734409+nathanwhit@users.noreply.github.com>2024-03-11 15:49:43 -0700
committerGitHub <noreply@github.com>2024-03-11 15:49:43 -0700
commita77b2987bc90879af30a39ba274df9061cc7fbae (patch)
treead7463374e66eb3aa61e41d96c512e67e717e349 /ext/node/polyfills/dns.ts
parentd69aab62b0789dd54b8c09b54af022a38f060b5b (diff)
fix(ext/node): Match punycode module behavior to node (#22847)
Fixes #19214. We were using the `idna` crate to implement our polyfill for `punycode.toASCII` and `punycode.toUnicode`. The `idna` crate is correct, and adheres to the IDNA2003/2008 spec, but it turns out `node`'s implementations don't really follow any spec! Instead, node splits the domain by `'.'` and punycode encodes/decodes each part. This means that node's implementations will happily work on codepoints that are disallowed by the IDNA specs, causing the error in #19214. While fixing this, I went ahead and matched the node behavior on all of the punycode functions and enabled node's punycode test in our `node_compat` suite.
Diffstat (limited to 'ext/node/polyfills/dns.ts')
-rw-r--r--ext/node/polyfills/dns.ts12
1 files changed, 9 insertions, 3 deletions
diff --git a/ext/node/polyfills/dns.ts b/ext/node/polyfills/dns.ts
index 3b3565cb3..78b934e60 100644
--- a/ext/node/polyfills/dns.ts
+++ b/ext/node/polyfills/dns.ts
@@ -92,7 +92,7 @@ import {
GetAddrInfoReqWrap,
QueryReqWrap,
} from "ext:deno_node/internal_binding/cares_wrap.ts";
-import { toASCII } from "node:punycode";
+import { domainToASCII } from "ext:deno_node/internal/idna.ts";
import { notImplemented } from "ext:deno_node/_utils.ts";
function onlookup(
@@ -264,7 +264,13 @@ export function lookup(
req.hostname = hostname;
req.oncomplete = all ? onlookupall : onlookup;
- const err = getaddrinfo(req, toASCII(hostname), family, hints, verbatim);
+ const err = getaddrinfo(
+ req,
+ domainToASCII(hostname),
+ family,
+ hints,
+ verbatim,
+ );
if (err) {
nextTick(
@@ -332,7 +338,7 @@ function resolver(bindingName: keyof ChannelWrapQuery) {
req.ttl = !!(options && (options as ResolveOptions).ttl);
- const err = this._handle[bindingName](req, toASCII(name));
+ const err = this._handle[bindingName](req, domainToASCII(name));
if (err) {
throw dnsException(err, bindingName, name);