avoid setters during `console.log()` in sandbox (#4055)
authorAlex Lam S.L <alexlamsl@gmail.com>
Tue, 18 Aug 2020 22:14:41 +0000 (23:14 +0100)
committerGitHub <noreply@github.com>
Tue, 18 Aug 2020 22:14:41 +0000 (06:14 +0800)
fixes #4054

test/compress/sandbox.js
test/sandbox.js

index 02097c1..9356f6f 100644 (file)
@@ -80,3 +80,21 @@ log_global: {
     }
     expect_stdout: "[object global]"
 }
+
+issue_4054: {
+    input: {
+        console.log({
+            set p(v) {
+                throw "FAIL";
+            },
+        });
+    }
+    expect: {
+        console.log({
+            set p(v) {
+                throw "FAIL";
+            },
+        });
+    }
+    expect_stdout: "{ p: [Setter] }"
+}
index 2f9ec67..c157578 100644 (file)
@@ -40,7 +40,7 @@ function createContext() {
             arg.constructor.toString();
             if (level--) for (var key in arg) {
                 var desc = Object.getOwnPropertyDescriptor(arg, key);
-                if (!desc || !desc.get) arg[key] = safe_log(arg[key], level);
+                if (!desc || !desc.get && !desc.set) arg[key] = safe_log(arg[key], level);
             }
         }
         return arg;