From e89ba0d51c581f43834dc1f3de9f53e7631192fe Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Mon, 21 Sep 2026 20:37:09 -0700 Subject: [PATCH] FS: convert QJS numeric modes safely --- external/qjs_fs_module.c | 10 ++++++++-- test/fs/access.t.mjs | 1 + test/fs/mkdir.t.mjs | 4 ++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/external/qjs_fs_module.c b/external/qjs_fs_module.c index 49c2e65e..059b46eb 100644 --- a/external/qjs_fs_module.c +++ b/external/qjs_fs_module.c @@ -398,7 +398,10 @@ qjs_fs_access(JSContext *cx, JSValueConst this_val, int argc, } if (JS_IsNumber(mode)) { - md = JS_VALUE_GET_INT(mode); + md = qjs_fs_mode(cx, mode, F_OK); + if (md == -1) { + return JS_EXCEPTION; + } } else if (JS_IsUndefined(mode)) { md = F_OK; @@ -595,7 +598,10 @@ qjs_fs_mkdir(JSContext *cx, JSValueConst this_val, int argc, recursive = 0; if (JS_IsNumber(options)) { - md = JS_VALUE_GET_INT(options); + md = qjs_fs_mode(cx, options, 0777); + if (md == (mode_t) -1) { + return JS_EXCEPTION; + } } else if (!JS_IsUndefined(options)) { if (!JS_IsObject(options)) { diff --git a/test/fs/access.t.mjs b/test/fs/access.t.mjs index 36cd480a..41069ed4 100644 --- a/test/fs/access.t.mjs +++ b/test/fs/access.t.mjs @@ -13,6 +13,7 @@ var testSync = () => new Promise((resolve, reject) => { fs.accessSync(fname); fs.accessSync(fname, fs.constants.R_OK | fs.constants.W_OK); + fs.accessSync(fname, 0.5); try { fs.accessSync(fname + '___'); diff --git a/test/fs/mkdir.t.mjs b/test/fs/mkdir.t.mjs index 1fe33be4..39afb854 100644 --- a/test/fs/mkdir.t.mjs +++ b/test/fs/mkdir.t.mjs @@ -18,6 +18,10 @@ var testSync = () => new Promise((resolve, reject) => { fs.mkdirSync(dname); + try { fs.rmdirSync(dname + '_fractional'); } catch (e) {} + try { fs.mkdirSync(dname + '_fractional', 0.5); } catch (e) {} + try { fs.rmdirSync(dname + '_fractional'); } catch (e) {} + try { fs.mkdirSync(dname); -- 2.47.3