From c7ae5eeaa369403172c989bb18958fb643eadad1 Mon Sep 17 00:00:00 2001 From: Geoffrey Challen Date: Tue, 7 Sep 2021 09:30:51 -0500 Subject: [PATCH] Allow java.util.Currency to work. --- build.gradle.kts | 4 ++-- ...edu.illinois.cs.cs125.jeed.containerrunner.version | 2 +- core/build.gradle.kts | 2 +- core/src/main/kotlin/Execute.kt | 5 ++++- core/src/main/kotlin/Sandbox.kt | 4 +++- .../resources/edu.illinois.cs.cs125.jeed.core.version | 2 +- core/src/test/kotlin/TestSnippet.kt | 11 +++++++++++ server/build.gradle.kts | 2 +- .../edu.illinois.cs.cs125.jeed.server.version | 2 +- 9 files changed, 25 insertions(+), 9 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 01c4fe42..56f868e2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,7 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("jvm") version "1.5.30" apply false kotlin("kapt") version "1.5.30" apply false - id("org.jmailen.kotlinter") version "3.5.1" apply false + id("org.jmailen.kotlinter") version "3.6.0" apply false id("com.github.ben-manes.versions") version "0.39.0" id("io.gitlab.arturbosch.detekt") version "1.18.1" } @@ -18,7 +18,7 @@ allprojects { } subprojects { group = "com.github.cs125-illinois.jeed" - version = "2021.9.0" + version = "2021.9.1" tasks.withType { useJUnitPlatform() enableAssertions = true diff --git a/containerrunner/src/main/resources/edu.illinois.cs.cs125.jeed.containerrunner.version b/containerrunner/src/main/resources/edu.illinois.cs.cs125.jeed.containerrunner.version index 7e6c0502..8b454c46 100644 --- a/containerrunner/src/main/resources/edu.illinois.cs.cs125.jeed.containerrunner.version +++ b/containerrunner/src/main/resources/edu.illinois.cs.cs125.jeed.containerrunner.version @@ -1 +1 @@ -version=2021.9.0 \ No newline at end of file +version=2021.9.1 \ No newline at end of file diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 9b9e3d82..1eef67e2 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -19,7 +19,7 @@ dependencies { implementation("org.jetbrains.kotlin:kotlin-compiler-embeddable:1.5.30") implementation("org.jetbrains.kotlin:kotlin-reflect:1.5.30") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.1-native-mt") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2") implementation("com.puppycrawl.tools:checkstyle:9.0") implementation("com.pinterest.ktlint:ktlint-core:0.42.1") implementation("com.pinterest.ktlint:ktlint-ruleset-standard:0.42.1") diff --git a/core/src/main/kotlin/Execute.kt b/core/src/main/kotlin/Execute.kt index b329055b..45cba62d 100644 --- a/core/src/main/kotlin/Execute.kt +++ b/core/src/main/kotlin/Execute.kt @@ -43,7 +43,10 @@ class SourceExecutionArguments( RuntimePermission("localeServiceProvider"), // Not sure why this is required by Date, but it seems to be // ClassLoader enumeration is probably not unsafe... - RuntimePermission("getClassLoader") + RuntimePermission("getClassLoader"), + // Required by java.util.Currency + RuntimePermission("accessSystemModules"), + PropertyPermission("java.util.currency.data", "read") ) } } diff --git a/core/src/main/kotlin/Sandbox.kt b/core/src/main/kotlin/Sandbox.kt index 375de46a..e72417a7 100644 --- a/core/src/main/kotlin/Sandbox.kt +++ b/core/src/main/kotlin/Sandbox.kt @@ -1213,7 +1213,9 @@ object Sandbox { override fun checkRead(file: String) { val confinedTask = confinedTaskByClassLoader() ?: return systemSecurityManager?.checkRead(file) ?: return - if (!file.endsWith(".class")) { + if (file.endsWith("currency.properties")) { + confinedTask.addPermissionRequest(FilePermission(file, "read"), true) + } else if (!file.endsWith(".class")) { confinedTask.addPermissionRequest(FilePermission(file, "read"), false) } else { systemSecurityManager?.checkRead(file) 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 7e6c0502..8b454c46 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=2021.9.0 \ No newline at end of file +version=2021.9.1 \ No newline at end of file diff --git a/core/src/test/kotlin/TestSnippet.kt b/core/src/test/kotlin/TestSnippet.kt index 326c654e..3efea28b 100644 --- a/core/src/test/kotlin/TestSnippet.kt +++ b/core/src/test/kotlin/TestSnippet.kt @@ -695,6 +695,17 @@ class Example { executionResult should haveOutput("") } } + "should load Currency data" { + Source.fromSnippet( +""" +import java.util.Currency; + +System.out.println(Currency.getAvailableCurrencies()); + """.trimIndent() + ).compile().execute().also { executionResult -> + executionResult should haveCompleted() + } + } }) fun haveParseErrorOnLine(line: Int) = object : Matcher { diff --git a/server/build.gradle.kts b/server/build.gradle.kts index 80c15b3a..bd62bddf 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -19,7 +19,7 @@ dependencies { implementation("org.jetbrains.kotlin:kotlin-reflect:1.5.30") implementation("io.ktor:ktor-server-netty:1.6.3") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.1-native-mt") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2") implementation("com.squareup.moshi:moshi-kotlin-codegen:1.12.0") implementation("com.github.cs125-illinois:ktor-moshi:1.0.3") implementation("ch.qos.logback:logback-classic:1.2.5") diff --git a/server/src/main/resources/edu.illinois.cs.cs125.jeed.server.version b/server/src/main/resources/edu.illinois.cs.cs125.jeed.server.version index 7e6c0502..8b454c46 100644 --- a/server/src/main/resources/edu.illinois.cs.cs125.jeed.server.version +++ b/server/src/main/resources/edu.illinois.cs.cs125.jeed.server.version @@ -1 +1 @@ -version=2021.9.0 \ No newline at end of file +version=2021.9.1 \ No newline at end of file