Skip to content

Commit

Permalink
Add redirecting limits.
Browse files Browse the repository at this point in the history
  • Loading branch information
gchallen committed Sep 14, 2022
1 parent 0e6b5ef commit 78fe644
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 7 deletions.
18 changes: 12 additions & 6 deletions core/src/main/kotlin/Sandbox.kt
Original file line number Diff line number Diff line change
Expand Up @@ -493,6 +493,7 @@ object Sandbox {

var redirectingOutput: Boolean = false
var redirectingOutputLimit: Int? = null
var redirectingTruncatedLines: Int = 0
var outputListener: OutputListener? = null

val permissionRequests: MutableList<TaskResults.PermissionRequest> = mutableListOf()
Expand Down Expand Up @@ -596,6 +597,8 @@ object Sandbox {
currentRedirectingLine.startedThread
)
)
} else {
redirectingTruncatedLines += 1
}
currentRedirectedLines?.remove(console)
}
Expand Down Expand Up @@ -1871,10 +1874,6 @@ object Sandbox {
val flushedStdin =
confinedTask.currentRedirectingInputLine?.toString() ?: ""

confinedTask.currentRedirectedLines = null
confinedTask.outputListener = null
confinedTask.redirectingOutputLimit = null

return JeedOutputCapture(
returned,
threw,
Expand All @@ -1885,8 +1884,14 @@ object Sandbox {
.filter { it.console == TaskResults.OutputLine.Console.STDERR }
.joinToString("") { it.line } + flushedStderr,
confinedTask.redirectedInput.toString() + flushedStdin,
confinedTask.redirectingIOBytes.toByteArray().decodeToString()
confinedTask.redirectingIOBytes.toByteArray().decodeToString(),
confinedTask.redirectingTruncatedLines
).also {
confinedTask.currentRedirectedLines = null
confinedTask.outputListener = null
confinedTask.redirectingOutputLimit = null
confinedTask.redirectingTruncatedLines = 0

confinedTask.redirectedOutputLines = mutableListOf()
confinedTask.redirectedInput = StringBuilder()
confinedTask.redirectingIOBytes = mutableListOf()
Expand Down Expand Up @@ -2228,7 +2233,8 @@ data class JeedOutputCapture(
val stdout: String,
val stderr: String,
val stdin: String,
val interleavedInputOutput: String
val interleavedInputOutput: String,
val truncatedLines: Int
)

interface SandboxPlugin<A : Any, V : Any> {
Expand Down
3 changes: 2 additions & 1 deletion core/src/test/kotlin/sandbox/TestOutputCapture.kt
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,8 @@ for (int i = 0; i < 1024; i++) {
Sandbox.redirectOutput(redirectingOutputLimit = 32) {
classLoader.findClassMethod().invoke(null)
}.also {
assert(it.stdout.trim().lines().size == 16) { it.stdout.trim().lines().size }
assert(it.stdout.trim().lines().size == 16)
assert(it.truncatedLines > 0)
assert(it.stderr.trim().lines().size == 16)
}
}
Expand Down

0 comments on commit 78fe644

Please sign in to comment.