From 5545b67ebd681864ce2f8d4d4a48d59ada939383 Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Sat, 19 Sep 2015 20:14:09 +0200 Subject: [PATCH] Do not allow for System exit Change-Id: I268b12dfab2e6021ad057a4dc9716a01efbe375d --- .../tests/MockServerIntegrationTest.groovy | 27 +++++++++++++++++++ .../pl/touk/mockserver/server/Mock.groovy | 5 +++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy index 077a893..7790522 100644 --- a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy +++ b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy @@ -839,4 +839,31 @@ class MockServerIntegrationTest extends Specification { false | 1 true | 0 } + + @Unroll + def "should reject mock when it has System.exit in closure"() { + when: + remoteMockServer.addMock(new AddMockRequestData( + name: 'testRest', + path: 'testEndpoint', + port: 9999, + predicate: predicate, + response: '''{req -> ""}''', + soap: false + )) + then: + thrown(InvalidMockDefinition) + expect: + remoteMockServer.listMocks() == [] + where: + predicate << [ + '''{req -> System.exit(-1); req.xml.name() == 'request'}''', + '''{req -> System .exit(-1); req.xml.name() == 'request'}''', + '''{req -> System + + .exit(-1); req.xml.name() == 'request'}''', + '''{req -> System. exit(-1); req.xml.name() == 'request'}''', + '''{req -> System.exit (-1); req.xml.name() == 'request'}''' + ] + } } diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy index 61a8132..25f0168 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy @@ -18,7 +18,7 @@ class Mock implements Comparable { String responseHeadersClosureText = '{ _ -> [:] }' Closure predicate = toClosure(predicateClosureText) Closure response = toClosure(responseClosureText) - Closure responseHeaders =toClosure(responseHeadersClosureText) + Closure responseHeaders = toClosure(responseHeadersClosureText) boolean soap = false int statusCode = 200 String method = 'POST' @@ -64,6 +64,9 @@ class Mock implements Comparable { } private Closure toClosure(String predicate) { + if (predicate ==~ /(?m).*System\s*\.\s*exit\s*\(.*/) { + throw new RuntimeException('System.exit is forbidden') + } GroovyShell sh = new GroovyShell(this.class.classLoader); return sh.evaluate(predicate) as Closure }