mirror of
https://github.com/DoneJS-Runtime/quickjs-done-nextgen.git
synced 2025-01-09 17:43:15 +00:00
Fix cyclic import/export segfault (#568)
Before this commit it segfaulted, now it throws a SyntaxError. That's still not correct behavior but better than segfaulting. To be continued. Includes a small run-test262 fix to handle Windows line endings. Refs: https://github.com/quickjs-ng/quickjs/issues/567
This commit is contained in:
parent
d9d6939b20
commit
36227a5310
5 changed files with 21 additions and 1 deletions
|
@ -26774,6 +26774,11 @@ static JSValue js_build_module_ns(JSContext *ctx, JSModuleDef *m)
|
|||
case EXPORTED_NAME_NORMAL:
|
||||
{
|
||||
JSVarRef *var_ref = en->u.var_ref;
|
||||
if (!var_ref) {
|
||||
js_resolve_export_throw_error(ctx, JS_RESOLVE_RES_CIRCULAR,
|
||||
m, en->export_name);
|
||||
goto fail;
|
||||
}
|
||||
pr = add_property(ctx, p, en->export_name,
|
||||
JS_PROP_ENUMERABLE | JS_PROP_WRITABLE |
|
||||
JS_PROP_VARREF);
|
||||
|
|
|
@ -1836,7 +1836,7 @@ int run_test(const char *filename, int *msec)
|
|||
if (q) {
|
||||
while (isspace((unsigned char)*q))
|
||||
q++;
|
||||
error_type = strdup_len(q, strcspn(q, " \n"));
|
||||
error_type = strdup_len(q, strcspn(q, " \r\n"));
|
||||
}
|
||||
is_negative = TRUE;
|
||||
}
|
||||
|
|
|
@ -4,5 +4,6 @@ verbose=yes
|
|||
testdir=tests
|
||||
|
||||
[exclude]
|
||||
tests/fixture_cyclic_import.js
|
||||
tests/microbench.js
|
||||
tests/test_worker_module.js
|
||||
|
|
2
tests/fixture_cyclic_import.js
Normal file
2
tests/fixture_cyclic_import.js
Normal file
|
@ -0,0 +1,2 @@
|
|||
import * as a from "./test_cyclic_import.js"
|
||||
export function f(x) { return 2 * a.g(x) }
|
12
tests/test_cyclic_import.js
Normal file
12
tests/test_cyclic_import.js
Normal file
|
@ -0,0 +1,12 @@
|
|||
/*---
|
||||
negative:
|
||||
phase: resolution
|
||||
type: SyntaxError
|
||||
---*/
|
||||
// FIXME(bnoordhuis) shouldn't throw SyntaxError but that's still better
|
||||
// than segfaulting, see https://github.com/quickjs-ng/quickjs/issues/567
|
||||
import {assert} from "./assert.js"
|
||||
import {f} from "./fixture_cyclic_import.js"
|
||||
export {f}
|
||||
export function g(x) { return x + 1 }
|
||||
assert(f(1), 4)
|
Loading…
Reference in a new issue