When creating new files, set creator version to 2.0 instead of Unix spec 3.0. Otherwise unzip thinks that external_attributes field contains access mode bits and fails to extract.

RELNOTES:

--
MOS_MIGRATED_REVID=131724308
diff --git a/src/tools/singlejar/BUILD b/src/tools/singlejar/BUILD
index ebb5c43..63f6a45 100644
--- a/src/tools/singlejar/BUILD
+++ b/src/tools/singlejar/BUILD
@@ -133,6 +133,19 @@
     ],
 )
 
+sh_test(
+    name = "output_jar_bash_test",
+    srcs = ["output_jar_shell_test.sh"],
+    args = [
+        "src/test/shell",
+        "$(location :singlejar)",
+    ],
+    data = [
+        ":singlejar",
+    ],
+    deps = ["//src/test/shell:bashunit"],
+)
+
 cc_test(
     name = "output_jar_simple_test",
     srcs = [
diff --git a/src/tools/singlejar/output_jar.cc b/src/tools/singlejar/output_jar.cc
index df70c2b..f99055d 100644
--- a/src/tools/singlejar/output_jar.cc
+++ b/src/tools/singlejar/output_jar.cc
@@ -530,7 +530,9 @@
   CDH *cdh = reinterpret_cast<CDH *>(
       ReserveCdh(sizeof(CDH) + entry->file_name_length()));
   cdh->signature();
-  cdh->version(0x031E);         // Created on Unix (03), conforms to 3.0
+  // Note: do not set the version to Unix 3.0 spec, otherwise
+  // unzip will think that 'external_attributes' field contains access mode
+  cdh->version(20);
   cdh->version_to_extract(20);  // 2.0
   cdh->bit_flag(0x0);
   cdh->compression_method(entry->compression_method());
diff --git a/src/tools/singlejar/output_jar_shell_test.sh b/src/tools/singlejar/output_jar_shell_test.sh
new file mode 100755
index 0000000..f4b334c
--- /dev/null
+++ b/src/tools/singlejar/output_jar_shell_test.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+#
+# Copyright 2015 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+# Arguments:
+#   unittest.bash script
+#   singlejar path
+#   jar tool path
+
+(($# >= 2)) || \
+  { echo "Usage: $0 <unittest.bash dir> <singlejar>" >&2; exit 1; }
+
+# Load test environment
+source $1/unittest.bash \
+  || { echo "unittest.bash not found!" >&2; exit 1; }
+
+set -e
+declare -r singlejar="$2"
+
+
+# Test that the entries single jar creates can be extracted (that is, they do
+# not have some funny Unix access more settings making them unreadable).
+function test_new_entries() {
+  local -r out_jar="${TEST_TMPDIR}/out.jar"
+  "$singlejar" --output "$out_jar"
+  cd "${TEST_TMPDIR}"
+  unzip "$out_jar" build-data.properties
+  [[ -r build-data.properties ]] || \
+    { echo "build-data.properties is not readable" >&2; exit 1; }
+}
+
+run_suite "Misc shell tests"
+#!/bin/bash
+