Fixed hardened build (gnu_andrew)
This commit is contained in:
parent
20c3d28f75
commit
322a6accbb
29
8143855.patch
Normal file
29
8143855.patch
Normal file
@ -0,0 +1,29 @@
|
||||
# HG changeset patch
|
||||
# User andrew
|
||||
# Date 1448509207 0
|
||||
# Thu Nov 26 03:40:07 2015 +0000
|
||||
# Node ID 4a4a5b8b3dfe44b25d2a40ba987e5243b3ebc9db
|
||||
# Parent 110735ab93eca3bd6e9b157955a942e00aed72e1
|
||||
8143855: Bad printf formatting in frame_zero.cpp
|
||||
Summary: Backport subset of 8075967 fix that resolves this issue.
|
||||
Reviewed-by: dholmes
|
||||
|
||||
diff -r 110735ab93ec -r 4a4a5b8b3dfe src/cpu/zero/vm/frame_zero.cpp
|
||||
--- openjdk/hotspot/src/cpu/zero/vm/frame_zero.cpp Wed Nov 04 13:38:38 2015 +0100
|
||||
+++ openjdk/hotspot/src/cpu/zero/vm/frame_zero.cpp Thu Nov 26 03:40:07 2015 +0000
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright 2007, 2008, 2009, 2010, 2011 Red Hat, Inc.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@@ -216,7 +216,7 @@
|
||||
valuebuf[buflen - 1] = '\0';
|
||||
|
||||
// Print the result
|
||||
- st->print_cr(" " PTR_FORMAT ": %-21s = %s", addr, fieldbuf, valuebuf);
|
||||
+ st->print_cr(" " PTR_FORMAT ": %-21s = %s", p2i(addr), fieldbuf, valuebuf);
|
||||
}
|
||||
}
|
||||
|
@ -38,6 +38,13 @@
|
||||
# note, that order normal_suffix debug_suffix, in case of both enabled,
|
||||
# is expected in one single case at the end of build
|
||||
|
||||
# Filter out flags from the optflags macro that cause problems with the OpenJDK build
|
||||
# We filter out -O flags so that the optimisation of HotSpot is not lowered from O3 to O2
|
||||
# We filter out -Wall which will otherwise cause HotSpot to produce hundreds of thousands of warnings (100+mb logs)
|
||||
# We replace it with -Wformat (required by -Werror=format-security) and -Wno-cpp to avoid FORTIFY_SOURCE warnings
|
||||
# We filter out -fexceptions as the HotSpot build explicitly does -fno-exceptions and it's otherwise the default for C++
|
||||
%global ourflags %(echo %optflags | sed -e 's|-Wall|-Wformat -Wno-cpp|' | sed -r -e 's|-O[0-9]*||')
|
||||
%global ourcppflags %(echo %ourflags | sed -e 's|-fexceptions||')
|
||||
|
||||
%global aarch64 aarch64 arm64 armv8
|
||||
# sometimes we need to distinguish big and little endian PPC64
|
||||
@ -699,7 +706,7 @@ Obsoletes: java-1.7.0-openjdk-accessibility%1
|
||||
|
||||
Name: java-%{javaver}-%{origin}
|
||||
Version: %{javaver}.%{updatever}
|
||||
Release: 10.%{buildver}%{?dist}
|
||||
Release: 11.%{buildver}%{?dist}
|
||||
# java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons,
|
||||
# and this change was brought into RHEL-4. java-1.5.0-ibm packages
|
||||
# also included the epoch in their virtual provides. This created a
|
||||
@ -785,8 +792,16 @@ Patch300: jstack-pr1845.patch
|
||||
# Fixes StackOverflowError on ARM32 bit Zero. See RHBZ#1206656
|
||||
Patch403: rhbz1206656_fix_current_stack_pointer.patch
|
||||
|
||||
# PR2428: OpenJDK build can't handle commas in LDFLAGS
|
||||
Patch501: pr2428.patch
|
||||
# PR2462: Backport "8074839: Resolve disabled warnings for libunpack and the unpack200 binary"
|
||||
# This fixes printf warnings that lead to build failure with -Werror=format-security from optflags
|
||||
Patch502: pr2462-01.patch
|
||||
Patch503: pr2462-02.patch
|
||||
# PR2095, RH1163501: 2048-bit DH upper bound too small for Fedora infrastructure (sync with IcedTea 2.x)
|
||||
Patch504: rh1163501.patch
|
||||
# S8143855: Bad printf formatting in frame_zero.cpp (upstream from u76)
|
||||
Patch505: 8143855.patch
|
||||
# S4890063, PR2304, RH1214835: HPROF: default text truncated when using doe=n option (upstreaming post-CPU 2015/07)
|
||||
Patch511: rh1214835.patch
|
||||
|
||||
@ -1068,7 +1083,11 @@ sh %{SOURCE12}
|
||||
%patch604
|
||||
%patch605
|
||||
|
||||
%patch501
|
||||
%patch502
|
||||
%patch503
|
||||
%patch504
|
||||
%patch505
|
||||
%patch511
|
||||
|
||||
# Extract systemtap tapsets
|
||||
@ -1127,11 +1146,12 @@ export ARCH_DATA_MODEL=64
|
||||
export CFLAGS="$CFLAGS -mieee"
|
||||
%endif
|
||||
|
||||
EXTRA_CFLAGS="-fstack-protector-strong"
|
||||
# We use ourcppflags because the OpenJDK build seems to
|
||||
# pass these to the HotSpot C++ compiler...
|
||||
EXTRA_CFLAGS="%ourcppflags"
|
||||
# Disable various optimizations to fix miscompliation. See:
|
||||
# - https://bugzilla.redhat.com/show_bug.cgi?id=1120792
|
||||
EXTRA_CFLAGS="$EXTRA_CFLAGS -fno-devirtualize"
|
||||
EXTRA_CPP_FLAGS="-fno-devirtualize -fno-tree-vrp"
|
||||
EXTRA_CPP_FLAGS="%ourcppflags -fno-tree-vrp"
|
||||
# PPC/PPC64 needs -fno-tree-vectorize since -O3 would
|
||||
# otherwise generate wrong code producing segfaults.
|
||||
%ifarch %{power64} ppc
|
||||
@ -1177,6 +1197,7 @@ bash ../../configure \
|
||||
--with-stdc++lib=dynamic \
|
||||
--with-extra-cxxflags="$EXTRA_CPP_FLAGS" \
|
||||
--with-extra-cflags="$EXTRA_CFLAGS" \
|
||||
--with-extra-ldflags="%__global_ldflags" \
|
||||
--with-num-cores="$NUM_PROC"
|
||||
|
||||
cat spec.gmk
|
||||
@ -1591,6 +1612,15 @@ fi
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Thu Dec 10 2015 Andrew Hughes <gnu.andrew@redhat.com> - 1:1.8.0.65-11.b17
|
||||
- Define our own optimisation flags based on the optflags macro and pass to OpenJDK build cflags/cxxflags.
|
||||
- Remove -fno-devirtualize as we are now on GCC 5 where the GCC bug it worked around is fixed.
|
||||
- Pass __global_ldflags to --with-extra-ldflags so Fedora linker flags are used in the build.
|
||||
- Also Pass ourcppflags to the OpenJDK build cflags as it wrongly uses them for the HotSpot C++ build.
|
||||
- Add PR2428, PR2462 & S8143855 patches to fix build issues that arise.
|
||||
- Resolves: rhbz#1283949
|
||||
- Resolves: rhbz#1120792
|
||||
|
||||
* Thu Dec 10 2015 Andrew Hughes <gnu.andrew@redhat.com> - 1:1.8.0.65-10.b17
|
||||
- Add patch to honour %%{_smp_ncpus_max} from Tuomo Soini
|
||||
- Resolves: rhbz#1152896
|
||||
|
27
pr2428.patch
Normal file
27
pr2428.patch
Normal file
@ -0,0 +1,27 @@
|
||||
# HG changeset patch
|
||||
# User andrew
|
||||
# Date 1434497865 -3600
|
||||
# Wed Jun 17 00:37:45 2015 +0100
|
||||
# Node ID adf1b3700c5ba6c13eb8f9d8eb4d6d32085bd483
|
||||
# Parent 9e470ada9ea747f711ad2bd5b69e8124fbad384f
|
||||
PR2428: OpenJDK build can't handle commas in LDFLAGS
|
||||
Summary: Expand LDFLAGS outside function call, as is done with CFLAGS
|
||||
|
||||
diff -r 9e470ada9ea7 -r adf1b3700c5b make/CompileDemos.gmk
|
||||
--- openjdk/jdk/make/CompileDemos.gmk Mon Jun 08 19:25:43 2015 +0100
|
||||
+++ openjdk/jdk/make/CompileDemos.gmk Wed Jun 17 00:37:45 2015 +0100
|
||||
@@ -246,12 +246,13 @@
|
||||
-I$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_INC) $3
|
||||
|
||||
# Remove the -incremental:no setting to get .ilk-files like in the old build.
|
||||
+ BUILD_DEMO_JVMTI_$1_LDFLAGS := $(filter-out -incremental:no -opt:ref, $(LDFLAGS_JDKLIB))
|
||||
+
|
||||
$$(eval $$(call SetupNativeCompilation,BUILD_DEMO_JVMTI_$1, \
|
||||
SRC := $(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC), \
|
||||
LANG := $$(BUILD_DEMO_JVMTI_$1_LANG), \
|
||||
OPTIMIZATION := LOW, \
|
||||
CXXFLAGS := $$($1_CXXFLAGS), \
|
||||
- LDFLAGS := $(filter-out -incremental:no -opt:ref, $(LDFLAGS_JDKLIB)), \
|
||||
LDFLAGS_macosx := $(call SET_EXECUTABLE_ORIGIN), \
|
||||
LDFLAGS_SUFFIX := $$($1_EXTRA_CXX), \
|
||||
LDFLAGS_SUFFIX_posix := $5, \
|
200
pr2462-01.patch
Normal file
200
pr2462-01.patch
Normal file
@ -0,0 +1,200 @@
|
||||
# HG changeset patch
|
||||
# User kizune
|
||||
# Date 1403186822 -14400
|
||||
# Thu Jun 19 18:07:02 2014 +0400
|
||||
# Node ID ad88ac6bac57e540e87fdb5d9ad15528b1beee11
|
||||
# Parent f0137fa5ba5298a73f14ae508463dc7e890a70a5
|
||||
8000650, PR2462: unpack200.exe should check gzip crc
|
||||
Reviewed-by: ksrini
|
||||
|
||||
diff -r f0137fa5ba52 -r ad88ac6bac57 src/share/native/com/sun/java/util/jar/pack/main.cpp
|
||||
--- openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/main.cpp Thu Apr 23 13:48:02 2015 -0400
|
||||
+++ openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/main.cpp Thu Jun 19 18:07:02 2014 +0400
|
||||
@@ -62,6 +62,13 @@
|
||||
return unpacker::run(argc, argv);
|
||||
}
|
||||
|
||||
+// Dealing with big-endian arch
|
||||
+#ifdef _BIG_ENDIAN
|
||||
+#define SWAP_INT(a) (((a>>24)&0xff) | ((a<<8)&0xff0000) | ((a>>8)&0xff00) | ((a<<24)&0xff000000))
|
||||
+#else
|
||||
+#define SWAP_INT(a) (a)
|
||||
+#endif
|
||||
+
|
||||
// Single-threaded, implementation, not reentrant.
|
||||
// Includes a weak error check against MT access.
|
||||
#ifndef THREAD_SELF
|
||||
@@ -385,6 +392,7 @@
|
||||
u.start();
|
||||
}
|
||||
} else {
|
||||
+ u.gzcrc = 0;
|
||||
u.start(peek, sizeof(peek));
|
||||
}
|
||||
|
||||
@@ -425,7 +433,23 @@
|
||||
status = 1;
|
||||
}
|
||||
|
||||
- if (u.infileptr != null) {
|
||||
+ if (!u.aborting() && u.infileptr != null) {
|
||||
+ if (u.gzcrc != 0) {
|
||||
+ // Read the CRC information from the gzip container
|
||||
+ fseek(u.infileptr, -8, SEEK_END);
|
||||
+ uint filecrc;
|
||||
+ fread(&filecrc, sizeof(filecrc), 1, u.infileptr);
|
||||
+ if (u.gzcrc != SWAP_INT(filecrc)) { // CRC error
|
||||
+ if (strcmp(destination_file, "-") != 0) {
|
||||
+ // Output is not stdout, remove it, it's broken
|
||||
+ if (u.jarout != null)
|
||||
+ u.jarout->closeJarFile(false);
|
||||
+ remove(destination_file);
|
||||
+ }
|
||||
+ // Print out the error and exit with return code != 0
|
||||
+ u.abort("CRC error, invalid compressed data.");
|
||||
+ }
|
||||
+ }
|
||||
fclose(u.infileptr);
|
||||
u.infileptr = null;
|
||||
}
|
||||
diff -r f0137fa5ba52 -r ad88ac6bac57 src/share/native/com/sun/java/util/jar/pack/unpack.h
|
||||
--- openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/unpack.h Thu Apr 23 13:48:02 2015 -0400
|
||||
+++ openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/unpack.h Thu Jun 19 18:07:02 2014 +0400
|
||||
@@ -171,6 +171,7 @@
|
||||
bytes inbytes; // direct
|
||||
gunzip* gzin; // gunzip filter, if any
|
||||
jar* jarout; // output JAR file
|
||||
+ uint gzcrc; // CRC gathered from gzip content
|
||||
|
||||
#ifndef PRODUCT
|
||||
int nowrite;
|
||||
diff -r f0137fa5ba52 -r ad88ac6bac57 src/share/native/com/sun/java/util/jar/pack/zip.cpp
|
||||
--- openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp Thu Apr 23 13:48:02 2015 -0400
|
||||
+++ openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp Thu Jun 19 18:07:02 2014 +0400
|
||||
@@ -551,6 +551,7 @@
|
||||
break;
|
||||
}
|
||||
int nr = readlen - zs.avail_out;
|
||||
+ u->gzcrc = crc32(u->gzcrc, (const unsigned char *)bufptr, nr);
|
||||
numread += nr;
|
||||
bufptr += nr;
|
||||
assert(numread <= maxlen);
|
||||
@@ -589,6 +590,7 @@
|
||||
zstream = NEW(z_stream, 1);
|
||||
u->gzin = this;
|
||||
u->read_input_fn = read_input_via_gzip;
|
||||
+ u->gzcrc = crc32(0L, Z_NULL, 0);
|
||||
}
|
||||
|
||||
void gunzip::start(int magic) {
|
||||
diff -r f0137fa5ba52 -r ad88ac6bac57 test/tools/pack200/PackChecksum.java
|
||||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||||
+++ openjdk/jdk/test/tools/pack200/PackChecksum.java Thu Jun 19 18:07:02 2014 +0400
|
||||
@@ -0,0 +1,107 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
+ *
|
||||
+ * This code is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License version 2 only, as
|
||||
+ * published by the Free Software Foundation.
|
||||
+ *
|
||||
+ * This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
+ * version 2 for more details (a copy is included in the LICENSE file that
|
||||
+ * accompanied this code).
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License version
|
||||
+ * 2 along with this work; if not, write to the Free Software Foundation,
|
||||
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
+ *
|
||||
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
+ * or visit www.oracle.com if you need additional information or have any
|
||||
+ * questions.
|
||||
+ */
|
||||
+import java.io.File;
|
||||
+import java.io.FileOutputStream;
|
||||
+import java.io.IOException;
|
||||
+import java.io.RandomAccessFile;
|
||||
+import java.util.ArrayList;
|
||||
+import java.util.List;
|
||||
+import java.util.jar.JarEntry;
|
||||
+import java.util.jar.JarOutputStream;
|
||||
+
|
||||
+/*
|
||||
+ * @test
|
||||
+ * @bug 8000650
|
||||
+ * @summary unpack200.exe should check gzip crc
|
||||
+ * @compile -XDignore.symbol.file Utils.java PackChecksum.java
|
||||
+ * @run main PackChecksum
|
||||
+ * @author kizune
|
||||
+ */
|
||||
+public class PackChecksum {
|
||||
+
|
||||
+ public static void main(String... args) throws Exception {
|
||||
+ testChecksum();
|
||||
+ }
|
||||
+
|
||||
+ static void testChecksum() throws Exception {
|
||||
+
|
||||
+ // Create a fresh .jar file
|
||||
+ File testFile = new File("src_tools.jar");
|
||||
+ File testPack = new File("src_tools.pack.gz");
|
||||
+ generateJar(testFile);
|
||||
+ List<String> cmdsList = new ArrayList<>();
|
||||
+
|
||||
+ // Create .pack file
|
||||
+ cmdsList.add(Utils.getPack200Cmd());
|
||||
+ cmdsList.add(testPack.getName());
|
||||
+ cmdsList.add(testFile.getName());
|
||||
+ Utils.runExec(cmdsList);
|
||||
+
|
||||
+ // Mess up with the checksum of the packed file
|
||||
+ RandomAccessFile raf = new RandomAccessFile(testPack, "rw");
|
||||
+ raf.seek(raf.length() - 8);
|
||||
+ int val = raf.readInt();
|
||||
+ val = Integer.MAX_VALUE - val;
|
||||
+ raf.seek(raf.length() - 8);
|
||||
+ raf.writeInt(val);
|
||||
+ raf.close();
|
||||
+
|
||||
+ File dstFile = new File("dst_tools.jar");
|
||||
+ cmdsList.clear();
|
||||
+ cmdsList.add(Utils.getUnpack200Cmd());
|
||||
+ cmdsList.add(testPack.getName());
|
||||
+ cmdsList.add(dstFile.getName());
|
||||
+
|
||||
+ boolean passed = false;
|
||||
+ try {
|
||||
+ Utils.runExec(cmdsList);
|
||||
+ } catch (RuntimeException re) {
|
||||
+ // unpack200 should exit with non-zero exit code
|
||||
+ passed = true;
|
||||
+ }
|
||||
+
|
||||
+ // tidy up
|
||||
+ if (testFile.exists()) testFile.delete();
|
||||
+ if (testPack.exists()) testPack.delete();
|
||||
+ if (dstFile.exists()) dstFile.delete();
|
||||
+ if (!passed) {
|
||||
+ throw new Exception("File with incorrect CRC unpacked without the error.");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ static void generateJar(File result) throws IOException {
|
||||
+ if (result.exists()) {
|
||||
+ result.delete();
|
||||
+ }
|
||||
+
|
||||
+ try (JarOutputStream output = new JarOutputStream(new FileOutputStream(result)); ) {
|
||||
+ for (int i = 0 ; i < 100 ; i++) {
|
||||
+ JarEntry e = new JarEntry("F-" + i + ".txt");
|
||||
+ output.putNextEntry(e);
|
||||
+ }
|
||||
+ output.flush();
|
||||
+ output.close();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+}
|
311
pr2462-02.patch
Normal file
311
pr2462-02.patch
Normal file
@ -0,0 +1,311 @@
|
||||
# HG changeset patch
|
||||
# User mikael
|
||||
# Date 1435336416 -3600
|
||||
# Fri Jun 26 17:33:36 2015 +0100
|
||||
# Node ID d64c0a9b8b5a43c1b7ba88a871f001fc6b44a3d4
|
||||
# Parent ad88ac6bac57e540e87fdb5d9ad15528b1beee11
|
||||
8074839, PR2462: Resolve disabled warnings for libunpack and the unpack200 binary
|
||||
Reviewed-by: dholmes, ksrini
|
||||
|
||||
diff -r ad88ac6bac57 -r d64c0a9b8b5a src/share/native/com/sun/java/util/jar/pack/bytes.h
|
||||
--- openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/bytes.h Thu Jun 19 18:07:02 2014 +0400
|
||||
+++ openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/bytes.h Fri Jun 26 17:33:36 2015 +0100
|
||||
@@ -63,7 +63,7 @@
|
||||
bytes res;
|
||||
res.ptr = ptr + beg;
|
||||
res.len = end - beg;
|
||||
- assert(res.len == 0 || inBounds(res.ptr) && inBounds(res.limit()-1));
|
||||
+ assert(res.len == 0 || (inBounds(res.ptr) && inBounds(res.limit()-1)));
|
||||
return res;
|
||||
}
|
||||
// building C strings inside byte buffers:
|
||||
diff -r ad88ac6bac57 -r d64c0a9b8b5a src/share/native/com/sun/java/util/jar/pack/jni.cpp
|
||||
--- openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/jni.cpp Thu Jun 19 18:07:02 2014 +0400
|
||||
+++ openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/jni.cpp Fri Jun 26 17:33:36 2015 +0100
|
||||
@@ -292,7 +292,7 @@
|
||||
|
||||
if (uPtr->aborting()) {
|
||||
THROW_IOE(uPtr->get_abort_message());
|
||||
- return false;
|
||||
+ return null;
|
||||
}
|
||||
|
||||
// We have fetched all the files.
|
||||
@@ -310,7 +310,7 @@
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_com_sun_java_util_jar_pack_NativeUnpack_finish(JNIEnv *env, jobject pObj) {
|
||||
unpacker* uPtr = get_unpacker(env, pObj, false);
|
||||
- CHECK_EXCEPTION_RETURN_VALUE(uPtr, NULL);
|
||||
+ CHECK_EXCEPTION_RETURN_VALUE(uPtr, 0);
|
||||
size_t consumed = uPtr->input_consumed();
|
||||
free_unpacker(env, pObj, uPtr);
|
||||
return consumed;
|
||||
@@ -320,6 +320,7 @@
|
||||
Java_com_sun_java_util_jar_pack_NativeUnpack_setOption(JNIEnv *env, jobject pObj,
|
||||
jstring pProp, jstring pValue) {
|
||||
unpacker* uPtr = get_unpacker(env, pObj);
|
||||
+ CHECK_EXCEPTION_RETURN_VALUE(uPtr, false);
|
||||
const char* prop = env->GetStringUTFChars(pProp, JNI_FALSE);
|
||||
CHECK_EXCEPTION_RETURN_VALUE(prop, false);
|
||||
const char* value = env->GetStringUTFChars(pValue, JNI_FALSE);
|
||||
diff -r ad88ac6bac57 -r d64c0a9b8b5a src/share/native/com/sun/java/util/jar/pack/main.cpp
|
||||
--- openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/main.cpp Thu Jun 19 18:07:02 2014 +0400
|
||||
+++ openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/main.cpp Fri Jun 26 17:33:36 2015 +0100
|
||||
@@ -149,31 +149,28 @@
|
||||
return progname;
|
||||
}
|
||||
|
||||
-static const char* usage_lines[] = {
|
||||
- "Usage: %s [-opt... | --option=value]... x.pack[.gz] y.jar\n",
|
||||
- "\n",
|
||||
- "Unpacking Options\n",
|
||||
- " -H{h}, --deflate-hint={h} override transmitted deflate hint: true, false, or keep (default)\n",
|
||||
- " -r, --remove-pack-file remove input file after unpacking\n",
|
||||
- " -v, --verbose increase program verbosity\n",
|
||||
- " -q, --quiet set verbosity to lowest level\n",
|
||||
- " -l{F}, --log-file={F} output to the given log file, or '-' for standard output (default)\n",
|
||||
- " -?, -h, --help print this message\n",
|
||||
- " -V, --version print program version\n",
|
||||
- " -J{X} Java VM argument (ignored)\n",
|
||||
- null
|
||||
-};
|
||||
+#define USAGE_HEADER "Usage: %s [-opt... | --option=value]... x.pack[.gz] y.jar\n"
|
||||
+#define USAGE_OPTIONS \
|
||||
+ "\n" \
|
||||
+ "Unpacking Options\n" \
|
||||
+ " -H{h}, --deflate-hint={h} override transmitted deflate hint: true, false, or keep (default)\n" \
|
||||
+ " -r, --remove-pack-file remove input file after unpacking\n" \
|
||||
+ " -v, --verbose increase program verbosity\n" \
|
||||
+ " -q, --quiet set verbosity to lowest level\n" \
|
||||
+ " -l{F}, --log-file={F} output to the given log file, or '-' for standard output (default)\n" \
|
||||
+ " -?, -h, --help print this message\n" \
|
||||
+ " -V, --version print program version\n" \
|
||||
+ " -J{X} Java VM argument (ignored)\n"
|
||||
|
||||
static void usage(unpacker* u, const char* progname, bool full = false) {
|
||||
// WinMain does not set argv[0] to the progrname
|
||||
progname = (progname != null) ? nbasename(progname) : "unpack200";
|
||||
- for (int i = 0; usage_lines[i] != null; i++) {
|
||||
- fprintf(u->errstrm, usage_lines[i], progname);
|
||||
- if (!full) {
|
||||
- fprintf(u->errstrm,
|
||||
- "(For more information, run %s --help .)\n", progname);
|
||||
- break;
|
||||
- }
|
||||
+
|
||||
+ fprintf(u->errstrm, USAGE_HEADER, progname);
|
||||
+ if (full) {
|
||||
+ fprintf(u->errstrm, USAGE_OPTIONS);
|
||||
+ } else {
|
||||
+ fprintf(u->errstrm, "(For more information, run %s --help .)\n", progname);
|
||||
}
|
||||
}
|
||||
|
||||
diff -r ad88ac6bac57 -r d64c0a9b8b5a src/share/native/com/sun/java/util/jar/pack/unpack.cpp
|
||||
--- openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/unpack.cpp Thu Jun 19 18:07:02 2014 +0400
|
||||
+++ openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/unpack.cpp Fri Jun 26 17:33:36 2015 +0100
|
||||
@@ -222,9 +222,9 @@
|
||||
}
|
||||
|
||||
#ifdef PRODUCT
|
||||
- char* string() { return 0; }
|
||||
+ const char* string() { return NULL; }
|
||||
#else
|
||||
- char* string(); // see far below
|
||||
+ const char* string(); // see far below
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -715,13 +715,13 @@
|
||||
// Now we can size the whole archive.
|
||||
// Read everything else into a mega-buffer.
|
||||
rp = hdr.rp;
|
||||
- int header_size_0 = (int)(rp - input.base()); // used-up header (4byte + 3int)
|
||||
- int header_size_1 = (int)(rplimit - rp); // buffered unused initial fragment
|
||||
- int header_size = header_size_0+header_size_1;
|
||||
+ size_t header_size_0 = (rp - input.base()); // used-up header (4byte + 3int)
|
||||
+ size_t header_size_1 = (rplimit - rp); // buffered unused initial fragment
|
||||
+ size_t header_size = header_size_0 + header_size_1;
|
||||
unsized_bytes_read = header_size_0;
|
||||
CHECK;
|
||||
if (foreign_buf) {
|
||||
- if (archive_size > (size_t)header_size_1) {
|
||||
+ if (archive_size > header_size_1) {
|
||||
abort("EOF reading fixed input buffer");
|
||||
return;
|
||||
}
|
||||
@@ -735,7 +735,7 @@
|
||||
return;
|
||||
}
|
||||
input.set(U_NEW(byte, add_size(header_size_0, archive_size, C_SLOP)),
|
||||
- (size_t) header_size_0 + archive_size);
|
||||
+ header_size_0 + archive_size);
|
||||
CHECK;
|
||||
assert(input.limit()[0] == 0);
|
||||
// Move all the bytes we read initially into the real buffer.
|
||||
@@ -958,13 +958,13 @@
|
||||
nentries = next_entry;
|
||||
|
||||
// place a limit on future CP growth:
|
||||
- int generous = 0;
|
||||
+ size_t generous = 0;
|
||||
generous = add_size(generous, u->ic_count); // implicit name
|
||||
generous = add_size(generous, u->ic_count); // outer
|
||||
generous = add_size(generous, u->ic_count); // outer.utf8
|
||||
generous = add_size(generous, 40); // WKUs, misc
|
||||
generous = add_size(generous, u->class_count); // implicit SourceFile strings
|
||||
- maxentries = add_size(nentries, generous);
|
||||
+ maxentries = (uint)add_size(nentries, generous);
|
||||
|
||||
// Note that this CP does not include "empty" entries
|
||||
// for longs and doubles. Those are introduced when
|
||||
@@ -982,8 +982,9 @@
|
||||
}
|
||||
|
||||
// Initialize *all* our entries once
|
||||
- for (int i = 0 ; i < maxentries ; i++)
|
||||
+ for (uint i = 0 ; i < maxentries ; i++) {
|
||||
entries[i].outputIndex = REQUESTED_NONE;
|
||||
+ }
|
||||
|
||||
initGroupIndexes();
|
||||
// Initialize hashTab to a generous power-of-two size.
|
||||
@@ -3676,21 +3677,22 @@
|
||||
|
||||
unpacker* debug_u;
|
||||
|
||||
-static bytes& getbuf(int len) { // for debugging only!
|
||||
+static bytes& getbuf(size_t len) { // for debugging only!
|
||||
static int bn = 0;
|
||||
static bytes bufs[8];
|
||||
bytes& buf = bufs[bn++ & 7];
|
||||
- while ((int)buf.len < len+10)
|
||||
+ while (buf.len < len + 10) {
|
||||
buf.realloc(buf.len ? buf.len * 2 : 1000);
|
||||
+ }
|
||||
buf.ptr[0] = 0; // for the sake of strcat
|
||||
return buf;
|
||||
}
|
||||
|
||||
-char* entry::string() {
|
||||
+const char* entry::string() {
|
||||
bytes buf;
|
||||
switch (tag) {
|
||||
case CONSTANT_None:
|
||||
- return (char*)"<empty>";
|
||||
+ return "<empty>";
|
||||
case CONSTANT_Signature:
|
||||
if (value.b.ptr == null)
|
||||
return ref(0)->string();
|
||||
@@ -3710,26 +3712,28 @@
|
||||
break;
|
||||
default:
|
||||
if (nrefs == 0) {
|
||||
- buf = getbuf(20);
|
||||
- sprintf((char*)buf.ptr, TAG_NAME[tag]);
|
||||
+ return TAG_NAME[tag];
|
||||
} else if (nrefs == 1) {
|
||||
return refs[0]->string();
|
||||
} else {
|
||||
- char* s1 = refs[0]->string();
|
||||
- char* s2 = refs[1]->string();
|
||||
- buf = getbuf((int)strlen(s1) + 1 + (int)strlen(s2) + 4 + 1);
|
||||
+ const char* s1 = refs[0]->string();
|
||||
+ const char* s2 = refs[1]->string();
|
||||
+ buf = getbuf(strlen(s1) + 1 + strlen(s2) + 4 + 1);
|
||||
buf.strcat(s1).strcat(" ").strcat(s2);
|
||||
if (nrefs > 2) buf.strcat(" ...");
|
||||
}
|
||||
}
|
||||
- return (char*)buf.ptr;
|
||||
+ return (const char*)buf.ptr;
|
||||
}
|
||||
|
||||
void print_cp_entry(int i) {
|
||||
entry& e = debug_u->cp.entries[i];
|
||||
- char buf[30];
|
||||
- sprintf(buf, ((uint)e.tag < CONSTANT_Limit)? TAG_NAME[e.tag]: "%d", e.tag);
|
||||
- printf(" %d\t%s %s\n", i, buf, e.string());
|
||||
+
|
||||
+ if ((uint)e.tag < CONSTANT_Limit) {
|
||||
+ printf(" %d\t%s %s\n", i, TAG_NAME[e.tag], e.string());
|
||||
+ } else {
|
||||
+ printf(" %d\t%d %s\n", i, e.tag, e.string());
|
||||
+ }
|
||||
}
|
||||
|
||||
void print_cp_entries(int beg, int end) {
|
||||
diff -r ad88ac6bac57 -r d64c0a9b8b5a src/share/native/com/sun/java/util/jar/pack/unpack.h
|
||||
--- openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/unpack.h Thu Jun 19 18:07:02 2014 +0400
|
||||
+++ openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/unpack.h Fri Jun 26 17:33:36 2015 +0100
|
||||
@@ -210,7 +210,7 @@
|
||||
byte* rp; // read pointer (< rplimit <= input.limit())
|
||||
byte* rplimit; // how much of the input block has been read?
|
||||
julong bytes_read;
|
||||
- int unsized_bytes_read;
|
||||
+ size_t unsized_bytes_read;
|
||||
|
||||
// callback to read at least one byte, up to available input
|
||||
typedef jlong (*read_input_fn_t)(unpacker* self, void* buf, jlong minlen, jlong maxlen);
|
||||
diff -r ad88ac6bac57 -r d64c0a9b8b5a src/share/native/com/sun/java/util/jar/pack/utils.cpp
|
||||
--- openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/utils.cpp Thu Jun 19 18:07:02 2014 +0400
|
||||
+++ openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/utils.cpp Fri Jun 26 17:33:36 2015 +0100
|
||||
@@ -81,7 +81,7 @@
|
||||
int assert_failed(const char* p) {
|
||||
char message[1<<12];
|
||||
sprintf(message, "@assert failed: %s\n", p);
|
||||
- fprintf(stdout, 1+message);
|
||||
+ fprintf(stdout, "%s", 1+message);
|
||||
breakpoint();
|
||||
unpack_abort(message);
|
||||
return 0;
|
||||
diff -r ad88ac6bac57 -r d64c0a9b8b5a src/share/native/com/sun/java/util/jar/pack/zip.cpp
|
||||
--- openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp Thu Jun 19 18:07:02 2014 +0400
|
||||
+++ openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp Fri Jun 26 17:33:36 2015 +0100
|
||||
@@ -84,7 +84,7 @@
|
||||
}
|
||||
|
||||
// Write data to the ZIP output stream.
|
||||
-void jar::write_data(void* buff, int len) {
|
||||
+void jar::write_data(void* buff, size_t len) {
|
||||
while (len > 0) {
|
||||
int rc = (int)fwrite(buff, 1, len, jarfp);
|
||||
if (rc <= 0) {
|
||||
@@ -323,12 +323,12 @@
|
||||
// Total number of disks (int)
|
||||
header64[36] = (ushort)SWAP_BYTES(1);
|
||||
header64[37] = 0;
|
||||
- write_data(header64, (int)sizeof(header64));
|
||||
+ write_data(header64, sizeof(header64));
|
||||
}
|
||||
|
||||
// Write the End of Central Directory structure.
|
||||
PRINTCR((2, "end-of-directory at %d\n", output_file_offset));
|
||||
- write_data(header, (int)sizeof(header));
|
||||
+ write_data(header, sizeof(header));
|
||||
|
||||
PRINTCR((2, "writing zip comment\n"));
|
||||
// Write the comment.
|
||||
@@ -590,7 +590,7 @@
|
||||
zstream = NEW(z_stream, 1);
|
||||
u->gzin = this;
|
||||
u->read_input_fn = read_input_via_gzip;
|
||||
- u->gzcrc = crc32(0L, Z_NULL, 0);
|
||||
+ u->gzcrc = crc32(0, Z_NULL, 0);
|
||||
}
|
||||
|
||||
void gunzip::start(int magic) {
|
||||
diff -r ad88ac6bac57 -r d64c0a9b8b5a src/share/native/com/sun/java/util/jar/pack/zip.h
|
||||
--- openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h Thu Jun 19 18:07:02 2014 +0400
|
||||
+++ openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h Fri Jun 26 17:33:36 2015 +0100
|
||||
@@ -68,8 +68,8 @@
|
||||
}
|
||||
|
||||
// Private Methods
|
||||
- void write_data(void* ptr, int len);
|
||||
- void write_data(bytes& b) { write_data(b.ptr, (int)b.len); }
|
||||
+ void write_data(void* ptr, size_t len);
|
||||
+ void write_data(bytes& b) { write_data(b.ptr, b.len); }
|
||||
void add_to_jar_directory(const char* fname, bool store, int modtime,
|
||||
int len, int clen, uLong crc);
|
||||
void write_jar_header(const char* fname, bool store, int modtime,
|
Loading…
Reference in New Issue
Block a user