Skip to content

REPL doesn't work when CONFIG_ASAN is set #502

@saghul

Description

@saghul
./build/qjs QuickJS-ng - Type ".help" for help qjs > RangeError: Maximum call stack size exceeded at ucs_length (<null>:0:0) at readline_print_prompt (<null>:0:0) at readline_start (<null>:0:0) at cmd_readline_start (<null>:0:0) at readline_handle_cmd (<null>:0:0) at handle_key (<null>:0:0) at handle_char (<null>:0:0) at handle_byte (<null>:0:0) at term_read_handler (<null>:0:0) 

I also needed this patch in order to make it that far, or ASAN trips:

diff --git a/quickjs.c b/quickjs.c index 22285d7..8d00d6f 100644 --- a/quickjs.c +++ b/quickjs.c @@ -6529,7 +6529,7 @@ static void build_backtrace(JSContext *ctx, JSValue error_obj, line_num1 = find_line_num(ctx, b, sf->cur_pc - b->byte_code_buf - 1, &col_num1); - atom_str = JS_AtomToCString(ctx, b->filename); + atom_str = b->filename ? JS_AtomToCString(ctx, b->filename) : NULL; dbuf_printf(&dbuf, " (%s", atom_str ? atom_str : "<null>"); JS_FreeCString(ctx, atom_str); if (line_num1 != -1) 

ASAN error:

================================================================= ==89091==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x000107900ab8 at pc 0x00010522ef0c bp 0x00016b4b79c0 sp 0x00016b4b7150 READ of size 1 at 0x000107900ab8 thread T0 #0 0x10522ef08 in printf_common(void*, char const*, char*)+0x84c (libclang_rt.asan_osx_dynamic.dylib:arm64e+0x22f08) #1 0x10522f2d8 in wrap_vsnprintf+0xac (libclang_rt.asan_osx_dynamic.dylib:arm64e+0x232d8) #2 0x1049126fc in dbuf_printf cutils.c:189 #3 0x104a2777c in build_backtrace quickjs.c:6533 #4 0x104a230c0 in JS_CallInternal quickjs.c:17111 #5 0x1049f1c4c in JS_CallInternal quickjs.c:15035 #6 0x1049f1c4c in JS_CallInternal quickjs.c:15035 #7 0x1049f1c4c in JS_CallInternal quickjs.c:15035 #8 0x1049f1c4c in JS_CallInternal quickjs.c:15035 #9 0x1049f1c4c in JS_CallInternal quickjs.c:15035 #10 0x1049f1c4c in JS_CallInternal quickjs.c:15035 #11 0x1049f1c4c in JS_CallInternal quickjs.c:15035 #12 0x1049f1c4c in JS_CallInternal quickjs.c:15035 #13 0x1049e2c08 in JS_Call quickjs.c:17159 #14 0x1048f2500 in call_handler quickjs-libc.c:2160 #15 0x1048f04f8 in js_os_poll quickjs-libc.c:2403 #16 0x1048dc55c in js_std_loop quickjs-libc.c:4020 #17 0x1048d2e58 in main qjs.c:526 #18 0x1a4b2bf24 (<unknown module>) 0x000107900ab8 is located 0 bytes after 40-byte region [0x000107900a90,0x000107900ab8) allocated by thread T0 here: #0 0x10525f244 in wrap_malloc+0x94 (libclang_rt.asan_osx_dynamic.dylib:arm64e+0x53244) #1 0x104a798b0 in js_def_malloc quickjs.c:1707 #2 0x1049748f8 in js_malloc_rt quickjs.c:1377 #3 0x104974a8c in js_mallocz_rt quickjs.c:1404 #4 0x104996ec4 in __JS_NewAtom quickjs.c:2748 #5 0x10499b134 in __JS_NewAtomInit quickjs.c:2848 #6 0x104976c30 in JS_InitAtoms quickjs.c:2600 #7 0x1049761c8 in JS_NewRuntime2 quickjs.c:1652 #8 0x10497d0a0 in JS_NewRuntime quickjs.c:1763 #9 0x1048d29c0 in main qjs.c:465 #10 0x1a4b2bf24 (<unknown module>) 

Not sure if legit bug or shenanigans...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions