]> git.kaiwu.me - njs.git/commitdiff
FS: convert QJS numeric modes safely
authorDmitry Volyntsev <xeioex@nginx.com>
Tue, 22 Sep 2026 03:37:09 +0000 (20:37 -0700)
committerDmitry Volyntsev <xeioexception@gmail.com>
Fri, 25 Sep 2026 23:00:29 +0000 (16:00 -0700)
external/qjs_fs_module.c
test/fs/access.t.mjs
test/fs/mkdir.t.mjs

index 49c2e65e93d0088ef78cc4de3ad72881c65fa221..059b46eb39cc213b9508711768bb697a685a0cb9 100644 (file)
@@ -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)) {
index 36cd480a8e10ef9e7435697e2abc1cfe11479c8e..41069ed429168a02d7ec78ccb405e97386873926 100644 (file)
@@ -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 + '___');
index 1fe33be433cc3fcc1a9f7aa168996e0b3fe8499f..39afb854a8240bd315061f328189707a9362c6c9 100644 (file)
@@ -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);