From cf9827331989a3edc1f5612ae9618221133b414f Mon Sep 17 00:00:00 2001 From: Geoffrey Challen Date: Wed, 10 Jun 2020 12:43:28 -0500 Subject: [PATCH] Change redirection call signature to enable Java interop. --- core/build.gradle.kts | 2 +- core/src/main/kotlin/Sandbox.kt | 19 ++++++++++++------- core/src/main/kotlin/server/Response.kt | 2 +- .../edu.illinois.cs.cs125.jeed.core.version | 2 +- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 19a2849c..8295cc6d 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -3,7 +3,7 @@ import java.io.StringWriter import java.util.Properties group = "com.github.cs125-illinois" -version = "2020.6.0" +version = "2020.6.1" plugins { kotlin("jvm") diff --git a/core/src/main/kotlin/Sandbox.kt b/core/src/main/kotlin/Sandbox.kt index a6fbab24..f062f4d7 100644 --- a/core/src/main/kotlin/Sandbox.kt +++ b/core/src/main/kotlin/Sandbox.kt @@ -41,7 +41,7 @@ import org.objectweb.asm.MethodVisitor import org.objectweb.asm.Opcodes import org.objectweb.asm.Type -private typealias SandboxCallableArguments = (Pair Unit) -> Pair>) -> T +private typealias SandboxCallableArguments = (Pair Any?) -> Sandbox.RedirectedOutput>) -> T object Sandbox { @JsonClass(generateAdapter = true) @@ -49,7 +49,8 @@ object Sandbox { val whitelistedClasses: Set = DEFAULT_WHITELISTED_CLASSES, blacklistedClasses: Set = DEFAULT_BLACKLISTED_CLASSES, unsafeExceptions: Set = DEFAULT_UNSAFE_EXCEPTIONS, - isolatedClasses: Set = DEFAULT_ISOLATED_CLASSES + isolatedClasses: Set = DEFAULT_ISOLATED_CLASSES, + val isWhiteList: Boolean? = null ) { val blacklistedClasses = blacklistedClasses.union(PERMANENTLY_BLACKLISTED_CLASSES) val unsafeExceptions = unsafeExceptions.union(ALWAYS_UNSAFE_EXCEPTIONS) @@ -619,7 +620,8 @@ object Sandbox { } } - private val isWhiteList = whitelistedClasses.isNotEmpty() + private val isWhiteList = classLoaderConfiguration.isWhiteList ?: whitelistedClasses.isNotEmpty() + private fun delegateClass(name: String): Class<*> { val klass = super.loadClass(name) loadedClasses.add(name) @@ -1223,18 +1225,21 @@ object Sandbox { } } + data class RedirectedOutput(val stdout: String, val stderr: String, val returned: Any?) + @JvmStatic - fun redirectOutput(block: () -> Unit): Pair { + fun redirectOutput(block: () -> Any?): RedirectedOutput { val confinedTask = confinedTaskByThreadGroup() ?: check { "should only be used from a confined task" } check(!confinedTask.redirectingOutput) { "can't nest calls to redirectOutput" } confinedTask.redirectingOutput = true - block() + val returned = block() confinedTask.redirectingOutput = false - val toReturn = Pair( + val toReturn = RedirectedOutput( confinedTask.redirectedOutputLines[TaskResults.OutputLine.Console.STDOUT].toString(), - confinedTask.redirectedOutputLines[TaskResults.OutputLine.Console.STDERR].toString() + confinedTask.redirectedOutputLines[TaskResults.OutputLine.Console.STDERR].toString(), + returned ) confinedTask.redirectedOutputLines[TaskResults.OutputLine.Console.STDOUT] = StringBuilder() confinedTask.redirectedOutputLines[TaskResults.OutputLine.Console.STDERR] = StringBuilder() diff --git a/core/src/main/kotlin/server/Response.kt b/core/src/main/kotlin/server/Response.kt index 01ca3d58..6064c496 100644 --- a/core/src/main/kotlin/server/Response.kt +++ b/core/src/main/kotlin/server/Response.kt @@ -22,8 +22,8 @@ import edu.illinois.cs.cs125.jeed.core.moshi.TemplatedSourceResult @JsonClass(generateAdapter = true) class CompletedTasks( - var snippet: Snippet? = null, var template: TemplatedSourceResult? = null, + var snippet: Snippet? = null, var compilation: CompiledSourceResult? = null, var kompilation: CompiledSourceResult? = null, var checkstyle: CheckstyleResults? = null, diff --git a/core/src/main/resources/edu.illinois.cs.cs125.jeed.core.version b/core/src/main/resources/edu.illinois.cs.cs125.jeed.core.version index 4aac7991..e399a698 100644 --- a/core/src/main/resources/edu.illinois.cs.cs125.jeed.core.version +++ b/core/src/main/resources/edu.illinois.cs.cs125.jeed.core.version @@ -1 +1 @@ -version=2020.5.6 \ No newline at end of file +version=2020.6.0 \ No newline at end of file