From: Dmitry Volyntsev Date: Tue, 22 Sep 2026 03:37:09 +0000 (-0700) Subject: FS: convert QJS numeric modes safely X-Git-Tag: 1.0.2~17 X-Git-Url: https://git.kaiwu.me/?a=commitdiff_plain;h=e89ba0d51c581f43834dc1f3de9f53e7631192fe;p=njs.git FS: convert QJS numeric modes safely --- 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);