Compare commits

...

1 Commits

Author SHA1 Message Date
Claude Bot
0e167288f3 Fix url.domainToASCII to return empty string for invalid domains
Previously, domainToASCII and domainToUnicode would throw a TypeError
when encountering invalid domains (e.g., punycode domains with unicode
characters like "xn--iñvalid.com"). According to Node.js behavior and
the WHATWG URL spec, these functions should return an empty string
instead of throwing an error.

Changes:
- Modified jsDomainToASCII to return empty string instead of throwing
- Modified jsDomainToUnicode to return empty string instead of throwing
- Added regression test for issue #24191

Fixes #24191

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-29 19:14:54 +00:00
2 changed files with 18 additions and 4 deletions

View File

@@ -68,8 +68,7 @@ JSC_DEFINE_HOST_FUNCTION(jsDomainToASCII, (JSC::JSGlobalObject * globalObject, J
if (U_SUCCESS(error) && !(processingDetails.errors & ~allowedNameToASCIIErrors) && numCharactersConverted) {
return JSC::JSValue::encode(JSC::jsString(vm, WTF::String(std::span { hostnameBuffer, static_cast<unsigned int>(numCharactersConverted) })));
}
throwTypeError(globalObject, scope, "domainToASCII failed"_s);
return {};
return JSC::JSValue::encode(jsEmptyString(vm));
}
JSC_DEFINE_HOST_FUNCTION(jsDomainToUnicode, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callFrame))
@@ -139,8 +138,7 @@ JSC_DEFINE_HOST_FUNCTION(jsDomainToUnicode, (JSC::JSGlobalObject * globalObject,
if (U_SUCCESS(error) && !(processingDetails.errors & ~allowedNameToUnicodeErrors) && numCharactersConverted) {
return JSC::JSValue::encode(JSC::jsString(vm, WTF::String(std::span { hostnameBuffer, static_cast<unsigned int>(numCharactersConverted) })));
}
throwTypeError(globalObject, scope, "domainToUnicode failed"_s);
return {};
return JSC::JSValue::encode(jsEmptyString(vm));
}
JSC::JSValue createNodeURLBinding(Zig::GlobalObject* globalObject)

View File

@@ -0,0 +1,16 @@
// https://github.com/oven-sh/bun/issues/24191
// `url.domainToASCII` should return an empty string for invalid domains, not throw an error
import { expect, test } from "bun:test";
import url from "node:url";
test("domainToASCII should not throw for invalid punycode with unicode", () => {
// The primary issue from the bug report: invalid punycode with unicode characters
// This was throwing "TypeError: domainToASCII failed" but should return empty string
expect(url.domainToASCII("xn--iñvalid.com")).toBe("");
});
test("domainToUnicode should not throw for invalid domains", () => {
// Should also return empty string for invalid domains, not throw
expect(url.domainToUnicode("xn--iñvalid.com")).toBe("");
});