From 4f180f0ed1bb21b8b0374b645ab25148ba362049 Mon Sep 17 00:00:00 2001 From: Tooru Fujisawa Date: Mon, 22 May 2023 12:28:16 +0000 Subject: [PATCH] Bug 1492090 - Part 9: Use UTF-8 in module ThrowResolutionError. r=nbp Differential Revision: https://phabricator.services.mozilla.com/D151453 --- js/src/tests/shell/script-file-name-utf8.js | 15 +++++++++++++++ js/src/vm/Modules.cpp | 7 ++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/js/src/tests/shell/script-file-name-utf8.js b/js/src/tests/shell/script-file-name-utf8.js index 77b97042444e..99fb318ae2da 100644 --- a/js/src/tests/shell/script-file-name-utf8.js +++ b/js/src/tests/shell/script-file-name-utf8.js @@ -165,6 +165,20 @@ function getLcovInfoScriptName(fileName) { return scriptFiles[0].substring(3); } +// Return the file name from the error during module import. +function moduleResolutionError(fileName) { + const a = parseModule(`import { x } from "b";`, fileName); + const ma = registerModule("a", a); + const b = parseModule(`export var y = 10;`); + const mb = registerModule("b", b); + + try { + moduleLink(ma); + } catch (e) { + return e.fileName; + } +} + // Return the file name from the profiler stack. function geckoInterpProfilingStack(fileName) { enableGeckoProfilingWithSlowAssertions(); @@ -191,6 +205,7 @@ const testFunctions = [ fromErrorStackAsmJS, fromErrorStackStreamingWasm, getBacktraceScriptName, + moduleResolutionError, ]; if (isLcovEnabled()) { diff --git a/js/src/vm/Modules.cpp b/js/src/vm/Modules.cpp index 44144ec028ec..ba7e133d306f 100644 --- a/js/src/vm/Modules.cpp +++ b/js/src/vm/Modules.cpp @@ -885,7 +885,12 @@ static void ThrowResolutionError(JSContext* cx, Handle module, } RootedString filename(cx); - filename = JS_NewStringCopyZ(cx, module->script()->filename()); + if (const char* chars = module->script()->filename()) { + filename = + JS_NewStringCopyUTF8Z(cx, JS::ConstUTF8CharsZ(chars, strlen(chars))); + } else { + filename = cx->names().empty; + } if (!filename) { return; }