-
Bug
-
Resolution: Unresolved
-
Minor
-
None
-
Jenkins 2.89
I have the following methods:
def executeCake(String target, String configuration, Boolean failOnError, String... arguments) { // Some fancy logic } def executeCake(String target, String configuration, String... arguments) { executeCake(target, configuration, true, arguments) }
Now when running this in Jenkins, it fails to find the correct method and ends in the following exception:
java.lang.IllegalStateException: cannot compare public java.lang.Object project.Utilities.executeCake(java.lang.String,java.lang.String,java.lang.Boolean,java.lang.String[]) to public java.lang.Object project.Utilities.executeCake(java.lang.String,java.lang.String,java.lang.String[]) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.isMoreSpecific(GroovyCallSiteSelector.java:250) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.findMatchingMethod(GroovyCallSiteSelector.java:196) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.method(GroovyCallSiteSelector.java:146) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:87) at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:153) at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:157) at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17) at WorkflowScript.executeCake(WorkflowScript:164) at WorkflowScript.run(WorkflowScript:83)
This is probably due to an incomplete implementation of choosing the most specific method:
[JENKINS-48108] isMoreSpecific fails in script security for overloads
Description |
Original:
I have he following methods: {code:java} def executeCake(String target, String configuration, Boolean failOnError, String... arguments) { // Some fancy logic } def executeCake(String target, String configuration, String... arguments) { executeCake(target, configuration, true, arguments) }{code} Now when running this in Jenkins, it fails to find the correct method and ends in the following exception: {code:java} java.lang.IllegalStateException: cannot compare public java.lang.Object ksta.Utilities.executeCake(java.lang.String,java.lang.String,java.lang.Boolean,java.lang.String[]) to public java.lang.Object ksta.Utilities.executeCake(java.lang.String,java.lang.String,java.lang.String[]) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.isMoreSpecific(GroovyCallSiteSelector.java:250) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.findMatchingMethod(GroovyCallSiteSelector.java:196) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.method(GroovyCallSiteSelector.java:146) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:87) at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:153) at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:157) at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17) at WorkflowScript.executeCake(WorkflowScript:164) at WorkflowScript.run(WorkflowScript:83) {code} This is probably due to an incomplete implementation of choosing the most specific method: https://github.com/jenkinsci/script-security-plugin/blob/5f3851062f4fd9431f4eb20c1e55748ef83c4ac8/src/main/java/org/jenkinsci/plugins/scriptsecurity/sandbox/groovy/GroovyCallSiteSelector.java#L241 |
New:
I have he following methods: {code:java} def executeCake(String target, String configuration, Boolean failOnError, String... arguments) { // Some fancy logic } def executeCake(String target, String configuration, String... arguments) { executeCake(target, configuration, true, arguments) }{code} Now when running this in Jenkins, it fails to find the correct method and ends in the following exception: {code:java} java.lang.IllegalStateException: cannot compare public java.lang.Object project.Utilities.executeCake(java.lang.String,java.lang.String,java.lang.Boolean,java.lang.String[]) to public java.lang.Object project.Utilities.executeCake(java.lang.String,java.lang.String,java.lang.String[]) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.isMoreSpecific(GroovyCallSiteSelector.java:250) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.findMatchingMethod(GroovyCallSiteSelector.java:196) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.method(GroovyCallSiteSelector.java:146) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:87) at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:153) at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:157) at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17) at WorkflowScript.executeCake(WorkflowScript:164) at WorkflowScript.run(WorkflowScript:83) {code} This is probably due to an incomplete implementation of choosing the most specific method: [https://github.com/jenkinsci/script-security-plugin/blob/5f3851062f4fd9431f4eb20c1e55748ef83c4ac8/src/main/java/org/jenkinsci/plugins/scriptsecurity/sandbox/groovy/GroovyCallSiteSelector.java#L241] |
Description |
Original:
I have he following methods: {code:java} def executeCake(String target, String configuration, Boolean failOnError, String... arguments) { // Some fancy logic } def executeCake(String target, String configuration, String... arguments) { executeCake(target, configuration, true, arguments) }{code} Now when running this in Jenkins, it fails to find the correct method and ends in the following exception: {code:java} java.lang.IllegalStateException: cannot compare public java.lang.Object project.Utilities.executeCake(java.lang.String,java.lang.String,java.lang.Boolean,java.lang.String[]) to public java.lang.Object project.Utilities.executeCake(java.lang.String,java.lang.String,java.lang.String[]) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.isMoreSpecific(GroovyCallSiteSelector.java:250) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.findMatchingMethod(GroovyCallSiteSelector.java:196) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.method(GroovyCallSiteSelector.java:146) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:87) at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:153) at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:157) at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17) at WorkflowScript.executeCake(WorkflowScript:164) at WorkflowScript.run(WorkflowScript:83) {code} This is probably due to an incomplete implementation of choosing the most specific method: [https://github.com/jenkinsci/script-security-plugin/blob/5f3851062f4fd9431f4eb20c1e55748ef83c4ac8/src/main/java/org/jenkinsci/plugins/scriptsecurity/sandbox/groovy/GroovyCallSiteSelector.java#L241] |
New:
I have the following methods: {code:java} def executeCake(String target, String configuration, Boolean failOnError, String... arguments) { // Some fancy logic } def executeCake(String target, String configuration, String... arguments) { executeCake(target, configuration, true, arguments) }{code} Now when running this in Jenkins, it fails to find the correct method and ends in the following exception: {code:java} java.lang.IllegalStateException: cannot compare public java.lang.Object project.Utilities.executeCake(java.lang.String,java.lang.String,java.lang.Boolean,java.lang.String[]) to public java.lang.Object project.Utilities.executeCake(java.lang.String,java.lang.String,java.lang.String[]) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.isMoreSpecific(GroovyCallSiteSelector.java:250) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.findMatchingMethod(GroovyCallSiteSelector.java:196) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.method(GroovyCallSiteSelector.java:146) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:87) at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:153) at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:157) at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17) at WorkflowScript.executeCake(WorkflowScript:164) at WorkflowScript.run(WorkflowScript:83) {code} This is probably due to an incomplete implementation of choosing the most specific method: [https://github.com/jenkinsci/script-security-plugin/blob/5f3851062f4fd9431f4eb20c1e55748ef83c4ac8/src/main/java/org/jenkinsci/plugins/scriptsecurity/sandbox/groovy/GroovyCallSiteSelector.java#L241] |