diff --git a/pom.xml b/pom.xml index 0c70dc31..66d3ae8d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.jenkins-ci.plugins plugin - 6.2189.v695a_c41f5249 + 6.2211.v27f680c93c53 diff --git a/src/main/java/org/jenkinsci/plugins/scriptsecurity/scripts/ScriptApproval.java b/src/main/java/org/jenkinsci/plugins/scriptsecurity/scripts/ScriptApproval.java index e3ea81c0..d013208d 100644 --- a/src/main/java/org/jenkinsci/plugins/scriptsecurity/scripts/ScriptApproval.java +++ b/src/main/java/org/jenkinsci/plugins/scriptsecurity/scripts/ScriptApproval.java @@ -77,6 +77,7 @@ import edu.umd.cs.findbugs.annotations.CheckForNull; import edu.umd.cs.findbugs.annotations.NonNull; +import java.io.OutputStream; import jenkins.model.Jenkins; import net.sf.json.JSON; import org.jenkinsci.plugins.scriptsecurity.sandbox.Whitelist; @@ -256,10 +257,7 @@ String hashClasspathEntry(URL entry) throws IOException { try { MessageDigest digest = digest(); try (InputStream is = entry.openStream(); BufferedInputStream bis = new BufferedInputStream(is); DigestInputStream input = new DigestInputStream(bis, digest)) { - byte[] buffer = new byte[1024]; - while (input.read(buffer) != -1) { - // discard - } + input.transferTo(OutputStream.nullOutputStream()); return prefix() + Util.toHexString(digest.digest()); } } catch (NoSuchAlgorithmException x) { diff --git a/src/test/java/org/jenkinsci/plugins/scriptsecurity/scripts/HasherScriptApprovalTest.java b/src/test/java/org/jenkinsci/plugins/scriptsecurity/scripts/HasherScriptApprovalTest.java index ad10842e..cba4a446 100644 --- a/src/test/java/org/jenkinsci/plugins/scriptsecurity/scripts/HasherScriptApprovalTest.java +++ b/src/test/java/org/jenkinsci/plugins/scriptsecurity/scripts/HasherScriptApprovalTest.java @@ -18,6 +18,7 @@ import static org.hamcrest.Matchers.containsInRelativeOrder; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -145,6 +146,13 @@ public void testClasspathEntriesConvertedOnUse() throws Throwable { }); } + @Test + public void hashClasspathEntry() throws Exception { + var url = HasherScriptApprovalTest.class.getResource("/org/jenkinsci/plugins/scriptsecurity/sandbox/groovy/somejar.jar"); + assertThat(ScriptApproval.Hasher.SHA512.hashClasspathEntry(url), is("SHA512:8c649f770baefbbf33a2ed6bb06a4ab5cd8b1921fec4176906e068337d76aa54b28aeac6987a46d5e6c73fcbbfaab93651a4fb082bcc96f1511e6395eb3b2b5f")); + assertThat(ScriptApproval.Hasher.SHA1.hashClasspathEntry(url), is("049d9ec67a2a95263ee50e7db8e406b97d300bbe")); + } + private void addApprovedClasspathEntries(final ScriptApproval approval) throws IOException { URL url = getJar("org/apache/commons/lang3/StringUtils.class"); ScriptApproval.ApprovedClasspathEntry acp = new ScriptApproval.ApprovedClasspathEntry(