From 939940e784ce8468149b1bf7a547f7cd81fbf036 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Wed, 28 Oct 2020 14:28:36 +0900 Subject: [PATCH] re-impl of js eval function because wtf js --- assets/JS_INIT.js | 11 ++++++++--- src/net/torvald/tsvm/VMRunnerFactory.kt | 18 +++++++----------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/assets/JS_INIT.js b/assets/JS_INIT.js index 405c229..734a2dc 100644 --- a/assets/JS_INIT.js +++ b/assets/JS_INIT.js @@ -268,10 +268,15 @@ if ('function' !== typeof Array.prototype.reduceRight) { }; } -/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////// +// NOTE TO PROGRAMMERS: this JS_INIT script does not, and must not be invoked with strict mode // +/////////////////////////////////////////////////////////////////////////////////////////////////// -load = undefined -loadWithNewGlobal = undefined +load = undefined; +loadWithNewGlobal = undefined; +var eval = function(s) { // installing new eval function + return Function('"use strict";return(function(){'+s+'}())')(); +} // function javaArrayToJs(jarr) { if (!jarr.toString.startsWith("[")) return jarr; diff --git a/src/net/torvald/tsvm/VMRunnerFactory.kt b/src/net/torvald/tsvm/VMRunnerFactory.kt index 21b0017..2ac7cbf 100644 --- a/src/net/torvald/tsvm/VMRunnerFactory.kt +++ b/src/net/torvald/tsvm/VMRunnerFactory.kt @@ -1,8 +1,6 @@ package net.torvald.tsvm import jdk.nashorn.api.scripting.NashornScriptEngineFactory -import jdk.nashorn.api.scripting.ScriptUtils -import jdk.nashorn.internal.runtime.regexp.joni.Syntax.Java import net.torvald.tsvm.peripheral.GraphicsAdapter import net.torvald.tsvm.vdc.Videotron2K import java.io.FileReader @@ -68,7 +66,7 @@ object VMRunnerFactory { init { val engineFactory = NashornScriptEngineFactory() - engine = engineFactory.getScriptEngine("-strict", "--no-java", "--no-syntax-extensions", "--language=es6") + engine = engineFactory.getScriptEngine("--no-java", "--no-syntax-extensions", "--language=es6") assertNotNull(engine, "Script engine for extension $extension not found") } @@ -83,17 +81,15 @@ object VMRunnerFactory { bind.put("base64", Base64Delegate()) bind.put("com", SerialHelperDelegate(vm)) - if (extension == "js") { - val fr = FileReader("./assets/JS_INIT.js") - val prg = fr.readText() - fr.close() - engine.eval(sanitiseJS(prg), context) - } + val fr = FileReader("./assets/JS_INIT.js") + val prg = fr.readText() + fr.close() + engine.eval(sanitiseJS(prg), context) } override suspend fun executeCommand(command: String) { try { - engine.eval("\"use strict\";" + encapsulateJS(sanitiseJS(command)), context) + engine.eval(encapsulateJS(sanitiseJS(command)), context) } catch (e: javax.script.ScriptException) { System.err.println("ScriptException from the script:") @@ -113,6 +109,6 @@ object VMRunnerFactory { private fun sanitiseJS(code: String) = code//.replace("\\", "\\\\") - private fun encapsulateJS(code: String) = "(function(){$code})()" + private fun encapsulateJS(code: String) = "\"use strict\";(function(){$code})()" }