Skip to content

Commit 066d010

Browse files
Fix mangled non-ASCII module specifiers (#569)
1 parent e73ae1a commit 066d010

2 files changed

Lines changed: 22 additions & 2 deletions

File tree

src/module/module_handle.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ auto ModuleHandle::GetDependencySpecifiers() -> Local<Value> {
8989
size_t length = info->dependency_specifiers.size();
9090
Local<Array> deps = Array::New(isolate, length);
9191
for (size_t ii = 0; ii < length; ++ii) {
92-
Unmaybe(deps->Set(isolate->GetCurrentContext(), ii, v8_string(info->dependency_specifiers[ii].c_str())));
92+
Unmaybe(deps->Set(isolate->GetCurrentContext(), ii, HandleCast<Local<String>>(info->dependency_specifiers[ii])));
9393
}
9494
return deps;
9595
}
@@ -308,7 +308,7 @@ class ModuleLinker : public ClassHandle {
308308
argv[1] = module->This();
309309
Local<Function> fn = callback.Deref();
310310
for (size_t ii = 0; ii < info->dependency_specifiers.size(); ++ii) {
311-
argv[0] = v8_string(info->dependency_specifiers[ii].c_str());
311+
argv[0] = HandleCast<Local<String>>(info->dependency_specifiers[ii]);
312312
impl->HandleCallbackReturn(module, ii, Unmaybe(fn->Call(context, recv, 2, argv)));
313313
}
314314
}

tests/module-specifier-utf8.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const ivm = require('isolated-vm');
2+
const { strictEqual } = require('assert');
3+
4+
(async function() {
5+
const isolate = new ivm.Isolate();
6+
const context = await isolate.createContext();
7+
const specifier = './café-中-😀.js';
8+
const root = await isolate.compileModule(`import value from '${specifier}'; globalThis.value = value;`);
9+
const dependency = await isolate.compileModule('export default 42;');
10+
11+
strictEqual(root.dependencySpecifiers[0], specifier);
12+
await root.instantiate(context, received => {
13+
strictEqual(received, specifier);
14+
return dependency;
15+
});
16+
await root.evaluate();
17+
strictEqual(await context.global.get('value'), 42);
18+
19+
console.log('pass');
20+
})().catch(err => { console.error(err); });

0 commit comments

Comments
 (0)