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:
|
case EXPORTED_NAME_NORMAL:
|
||||||
{
|
{
|
||||||
JSVarRef *var_ref = en->u.var_ref;
|
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,
|
pr = add_property(ctx, p, en->export_name,
|
||||||
JS_PROP_ENUMERABLE | JS_PROP_WRITABLE |
|
JS_PROP_ENUMERABLE | JS_PROP_WRITABLE |
|
||||||
JS_PROP_VARREF);
|
JS_PROP_VARREF);
|
||||||
|
|
|
@ -1836,7 +1836,7 @@ int run_test(const char *filename, int *msec)
|
||||||
if (q) {
|
if (q) {
|
||||||
while (isspace((unsigned char)*q))
|
while (isspace((unsigned char)*q))
|
||||||
q++;
|
q++;
|
||||||
error_type = strdup_len(q, strcspn(q, " \n"));
|
error_type = strdup_len(q, strcspn(q, " \r\n"));
|
||||||
}
|
}
|
||||||
is_negative = TRUE;
|
is_negative = TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,5 +4,6 @@ verbose=yes
|
||||||
testdir=tests
|
testdir=tests
|
||||||
|
|
||||||
[exclude]
|
[exclude]
|
||||||
|
tests/fixture_cyclic_import.js
|
||||||
tests/microbench.js
|
tests/microbench.js
|
||||||
tests/test_worker_module.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