From 28be71b2b3cd649fcb9389f6ad47c865d0ac3296 Mon Sep 17 00:00:00 2001 From: Oscar Boykin Date: Wed, 14 Jun 2017 08:35:45 -1000 Subject: [PATCH 1/2] don't put signatures in fat jar --- src/java/io/bazel/rulesscala/jar/JarCreator.java | 10 ++++++++++ src/java/io/bazel/rulesscala/jar/JarHelper.java | 8 ++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/java/io/bazel/rulesscala/jar/JarCreator.java b/src/java/io/bazel/rulesscala/jar/JarCreator.java index c98c3f6ab..33d002a47 100644 --- a/src/java/io/bazel/rulesscala/jar/JarCreator.java +++ b/src/java/io/bazel/rulesscala/jar/JarCreator.java @@ -173,6 +173,16 @@ public void execute() throws IOException { } } + @Override + protected boolean ignoreFileName(String name) { + /* + * It does not make sense to copy signature files + * into a fat jar because the jar signature will + * be broken + */ + return (name.endsWith(".DSA") || name.endsWith(".RSA")); + } + public static void buildJar(String[] args) throws IOException { if (args.length < 1) { System.err.println("usage: CreateJar [-m manifest] output [root directories]"); diff --git a/src/java/io/bazel/rulesscala/jar/JarHelper.java b/src/java/io/bazel/rulesscala/jar/JarHelper.java index d51956972..44707413a 100644 --- a/src/java/io/bazel/rulesscala/jar/JarHelper.java +++ b/src/java/io/bazel/rulesscala/jar/JarHelper.java @@ -177,17 +177,21 @@ protected void writeManifestEntry(byte[] content) throws IOException { } } + protected boolean ignoreFileName(String name) { + return false; + } + /** * This copies the contents of jarFile into out * This is a static method to make it clear what is mutated (and it * was written by someone who really likes to minimize state changes). */ - static private void copyJar(JarFile nameJf, Set names, JarOutputStream out) throws IOException { + private void copyJar(JarFile nameJf, Set names, JarOutputStream out) throws IOException { byte[] buffer = new byte[2048]; for (Enumeration e = nameJf.entries(); e.hasMoreElements();) { JarEntry existing = e.nextElement(); String name = existing.getName(); - if (!names.contains(name)) { + if (!(ignoreFileName(name) || names.contains(name))) { JarEntry outEntry = new JarEntry(name); outEntry.setTime(existing.getTime()); outEntry.setSize(existing.getSize()); From 8e4247515084f395c3188d6b6ed72de5dc12d86a Mon Sep 17 00:00:00 2001 From: Oscar Boykin Date: Wed, 28 Jun 2017 15:05:42 -1000 Subject: [PATCH 2/2] Add tests --- test/BUILD | 24 ++++++++++++++++++++++++ test/fake_sig.jar | Bin 0 -> 492 bytes test/jar_lister.py | 5 +++++ test/no_sigs.sh | 13 +++++++++++++ 4 files changed, 42 insertions(+) create mode 100644 test/fake_sig.jar create mode 100644 test/jar_lister.py create mode 100755 test/no_sigs.sh diff --git a/test/BUILD b/test/BUILD index fe0091a97..578596e46 100644 --- a/test/BUILD +++ b/test/BUILD @@ -388,3 +388,27 @@ scala_library( srcs = ["src/main/scala/scala/test/utf8/JavaClassWithUtf8.java", "src/main/scala/scala/test/utf8/ScalaClassWithUtf8.scala"] ) + +# make sure making a fat jar strips signatures +java_import( + name = "fakejar", + jars = ["fake_sig.jar"]) + +scala_binary( + name = "ScalaBinary_with_fake", + srcs = ["ScalaBinary.scala"], + main_class = "scala.test.ScalaBinary", + deps = [":HelloLib", ":MacroTest", ":fakejar"], +) + +py_binary( + name = "jar_lister", + srcs = ["jar_lister.py"] +) + +sh_test( + name = "no_sig", + srcs = ["no_sigs.sh"], + args = ["$(location //test:jar_lister)", "$(location //test:ScalaBinary_with_fake_deploy.jar)"], + data = [":ScalaBinary_with_fake_deploy.jar", ":jar_lister"], +) diff --git a/test/fake_sig.jar b/test/fake_sig.jar new file mode 100644 index 0000000000000000000000000000000000000000..b76b2261cef1a908dade50a1b08b4bae352a0de2 GIT binary patch literal 492 zcmWIWW@h1H00GvLJ6>Q0l;C8LVeoYgan$wnbJGtE;bdU$^a_cb4aB7t+zgB?Ul|z~ zSVVw|1K>uyFGe*&5ZMSfM{id>mtaS*QHelfK*r%T>K#F&f}lpl<1&hoNsbwp*Ce2x z6kvGk2x206lojGp43{B{!}KQ1I0l9#jn2r%Av_H<7UXF>#$tLI+1Ne|W5EFcG!_&9 U7{;=)fxN{GgnxnbO%R6x07d3ay8r+H literal 0 HcmV?d00001 diff --git a/test/jar_lister.py b/test/jar_lister.py new file mode 100644 index 000000000..3c3992bcc --- /dev/null +++ b/test/jar_lister.py @@ -0,0 +1,5 @@ +import zipfile +import sys + +for n in zipfile.ZipFile(sys.argv[1]).namelist(): + print n diff --git a/test/no_sigs.sh b/test/no_sigs.sh new file mode 100755 index 000000000..756ecfd7c --- /dev/null +++ b/test/no_sigs.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +OUTPUT1=`$1 $2 | grep DSA` +OUTPUT2=`$1 $2 | grep RSA` + +if [[ $OUTPUT1 ]]; then + echo $OUTPUT1 + exit 1 +fi +if [[ $OUTPUT2 ]]; then + echo $OUTPUT2 + exit 1 +fi