[quickjs-devel] segfault when accidently specifying directory path in import statement

  • From: Mario Gliewe <mag@xxxxxxxxx>
  • To: quickjs-devel@xxxxxxxxxxxxx
  • Date: Wed, 21 Aug 2019 14:11:34 +0200

Hi,

when accidently trying to specify a directory path as module import, qjs
will segfault in js_load_file().

I guess that happens when the fseek()/ftell() combination for the input
file reports a negative size (aka an error) ?

greets

maG

--snip--

$  uname -a
Linux mag-laptop 4.15.0-54-generic #58-Ubuntu SMP Mon Jun 24 10:55:24
UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ gdb qjs -x run test.js

Program received signal SIGSEGV, Segmentation fault.
js_load_file (ctx=ctx@entry=0x555555806620,
pbuf_len=pbuf_len@entry=0x7fffffffd8b0,
filename=filename@entry=0x55555581d6b0 "../../test") at quickjs-libc.c:315
315        buf[buf_len] = '\0';
(gdb) bt
#0  js_load_file (ctx=ctx@entry=0x555555806620,
pbuf_len=pbuf_len@entry=0x7fffffffd8b0,
filename=filename@entry=0x55555581d6b0 "../../test") at quickjs-libc.c:315
#1  0x00005555555ce025 in js_module_loader (ctx=<optimized out>,
module_name=<optimized out>, opaque=<optimized out>,
module_name=<optimized out>, ctx=<optimized out>) at quickjs-libc.c:420
#2  0x00005555555811c8 in js_host_resolve_imported_module.lto_priv.108
(ctx=0x555555806620, base_module_name=<optimized out>,
module_name1=<optimized out>) at quickjs.c:25263
#3  0x00005555555aadfd in js_resolve_module.part.180.lto_priv.346
(ctx=0x555555806620, m=0x555555809c00) at quickjs.c:25711
#4  0x0000555555580fcb in js_resolve_module () at quickjs.c:31240
#5  __JS_EvalInternal.lto_priv.151 (ctx=<optimized out>, this_obj=...,
input=<optimized out>, input_len=<optimized out>, filename=<optimized
out>, flags=1, scope_idx=-1) at quickjs.c:31246
#6  0x000055555557447f in JS_EvalInternal (scope_idx=-1,
flags=<optimized out>, filename=<optimized out>, input_len=<optimized
out>, input=<optimized out>, this_obj=..., ctx=<optimized out>) at
quickjs.c:31271
#7  JS_Eval (ctx=<optimized out>, input=<optimized out>,
input_len=<optimized out>, filename=<optimized out>,
eval_flags=<optimized out>) at quickjs.c:31301
#8  0x0000555555573081 in eval_buf (ctx=0x555555806620, buf=<optimized
out>, buf_len=<optimized out>, filename=<optimized out>,
eval_flags=<optimized out>) at qjs.c:57
#9  0x00005555555621b3 in eval_file (eval_flags=1,
filename=0x7fffffffe137 "01-alloc.js", ctx=0x555555806620) at qjs.c:79
#10 main (argc=<optimized out>, argv=<optimized out>) at qjs.c:417
---

Other related posts: