From 37c5656f2cf969bbce8f1f0e0ff6a0462f348a8e Mon Sep 17 00:00:00 2001 From: "Ing. Pavel Janousek" Date: Fri, 2 Oct 2015 09:51:29 +0200 Subject: [PATCH] [JENKINS-30742] Fixed possible NPE in AbstractProject.resolveForCLI() --- .../java/hudson/model/AbstractProject.java | 7 ++++-- .../hudson/model/AbstractProjectTest.groovy | 23 ++++++++++++++++++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/hudson/model/AbstractProject.java b/core/src/main/java/hudson/model/AbstractProject.java index 22fc55ecb8..f294a15d69 100644 --- a/core/src/main/java/hudson/model/AbstractProject.java +++ b/core/src/main/java/hudson/model/AbstractProject.java @@ -2248,8 +2248,11 @@ public abstract class AbstractProject

,R extends A public static AbstractProject resolveForCLI( @Argument(required=true,metaVar="NAME",usage="Job name") String name) throws CmdLineException { AbstractProject item = Jenkins.getInstance().getItemByFullName(name, AbstractProject.class); - if (item==null) - throw new CmdLineException(null,Messages.AbstractItem_NoSuchJobExists(name,AbstractProject.findNearest(name).getFullName())); + if (item==null) { + AbstractProject project = AbstractProject.findNearest(name); + throw new CmdLineException(null, project == null ? Messages.AbstractItem_NoSuchJobExistsWithoutSuggestion(name) + : Messages.AbstractItem_NoSuchJobExists(name, project.getFullName())); + } return item; } diff --git a/test/src/test/groovy/hudson/model/AbstractProjectTest.groovy b/test/src/test/groovy/hudson/model/AbstractProjectTest.groovy index dd99ae7f13..a273a8bfaf 100644 --- a/test/src/test/groovy/hudson/model/AbstractProjectTest.groovy +++ b/test/src/test/groovy/hudson/model/AbstractProjectTest.groovy @@ -47,7 +47,8 @@ import hudson.triggers.Trigger import hudson.triggers.TriggerDescriptor; import hudson.util.StreamTaskListener; import hudson.util.OneShotEvent -import jenkins.model.Jenkins; +import jenkins.model.Jenkins +import org.junit.Assert; import org.jvnet.hudson.test.HudsonTestCase import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.TestExtension; @@ -56,6 +57,7 @@ import org.jvnet.hudson.test.recipes.PresetData.DataSet import org.apache.commons.io.FileUtils; import org.junit.Assume; import org.jvnet.hudson.test.MockFolder +import org.kohsuke.args4j.CmdLineException /** * @author Kohsuke Kawaguchi @@ -588,6 +590,25 @@ public class AbstractProjectTest extends HudsonTestCase { assert project.triggers().size() == 1 } + @Issue("JENKINS-30742") + public void testResolveForCLI() { + try { + AbstractProject not_found = AbstractProject.resolveForCLI("never_created"); + fail("Exception should occur before!"); + } catch (CmdLineException e) { + assert e.getMessage().contentEquals("No such job \u2018never_created\u2019 exists."); + } + + AbstractProject project = jenkins.createProject(FreeStyleProject.class, "never_created"); + try { + AbstractProject not_found = AbstractProject.resolveForCLI("never_created1"); + fail("Exception should occur before!"); + } catch (CmdLineException e) { + assert e.getMessage().contentEquals("No such job \u2018never_created1\u2019 exists. Perhaps you meant \u2018never_created\u2019?") + } + + } + static class MockBuildTriggerThrowsNPEOnStart extends Trigger { @Override public void start(hudson.model.Item project, boolean newInstance) { throw new NullPointerException(); } -- GitLab