changeset 2597:f51056fa74b0

S7175845: "jar uf" changes file permissions unexpectedly S7177216: native2ascii changes file permissions of input file
author Andrew John Hughes <ahughes@redhat.com>
date Mon, 15 Oct 2012 19:45:41 +0100
parents 1277ee79b37c
children fdde7e12b1e5
files ChangeLog Makefile.am NEWS patches/openjdk/7175845-jar_uf_changes_file_permissions.patch patches/openjdk/7177216-native2ascii_changes_file_permissions.patch
diffstat 5 files changed, 239 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Oct 12 19:33:48 2012 +0100
+++ b/ChangeLog	Mon Oct 15 19:45:41 2012 +0100
@@ -1,3 +1,14 @@
+2012-10-15  Andrew John Hughes  <gnu.andrew@redhat.com>
+
+	* Makefile.am:
+	(ICEDTEA_PATCHES): Add new patches.
+	* NEWS:
+	Mention S7175845 and S7177216.
+	* patches/openjdk/7175845-jar_uf_changes_file_permissions.patch,
+	* patches/openjdk/7177216-native2ascii_changes_file_permissions.patch:
+	New backports to fix regressions caused by
+	S7143606.
+
 2012-10-12  Andrew John Hughes  <gnu.andrew@redhat.com>
 
 	* NEWS: Set release date for 1.10.10.
--- a/Makefile.am	Fri Oct 12 19:33:48 2012 +0100
+++ b/Makefile.am	Mon Oct 15 19:45:41 2012 +0100
@@ -424,7 +424,9 @@
 	patches/openjdk/7185678-xmenuitem_peer_npe.patch \
 	patches/openjdk/6815182-gssapi_spnego_does_not_work_with_server.patch \
 	patches/openjdk/6979329-ccacheinput_stream_fails_to_read_ticket_cache.patch \
-	patches/openjdk/7110373-krb5_test_infrastructure.patch
+	patches/openjdk/7110373-krb5_test_infrastructure.patch \
+	patches/openjdk/7175845-jar_uf_changes_file_permissions.patch \
+	patches/openjdk/7177216-native2ascii_changes_file_permissions.patch
 
 if WITH_ALT_HSBUILD
 ICEDTEA_PATCHES += \
--- a/NEWS	Fri Oct 12 19:33:48 2012 +0100
+++ b/NEWS	Mon Oct 15 19:45:41 2012 +0100
@@ -37,6 +37,8 @@
   - S7092186: adjust package access in rmiregistry
 * Bug fixes
   - PR1194: IcedTea tries to build with /usr/lib/jvm/java-openjdk (now a 1.7 VM) by default
+  - S7175845: "jar uf" changes file permissions unexpectedly
+  - S7177216: native2ascii changes file permissions of input file
 
 New in release 1.10.9 (2012-08-31):
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/7175845-jar_uf_changes_file_permissions.patch	Mon Oct 15 19:45:41 2012 +0100
@@ -0,0 +1,113 @@
+# HG changeset patch
+# User mbankal
+# Date 1342460916 25200
+# Node ID 2366192c7fcb928a2adec2bdf08138688dac0423
+# Parent  0e34d43263864db83322f337262fbb2be3be5d17
+7175845: "jar uf" changes file permissions unexpectedly
+Reviewed-by: ohair
+Contributed-by: mala.bankal@oracle.com
+
+diff --git a/src/share/classes/sun/tools/jar/Main.java b/src/share/classes/sun/tools/jar/Main.java
+--- openjdk/jdk/src/share/classes/sun/tools/jar/Main.java
++++ openjdk/jdk/src/share/classes/sun/tools/jar/Main.java
+@@ -134,7 +134,7 @@
+         File dir = file.getParentFile();
+         if (dir == null)
+             dir = new File(".");
+-        return sun.misc.IOUtils.createTempFile("jartmp", null, dir);
++        return File.createTempFile("jartmp", null, dir);
+     }
+ 
+     private boolean ok;
+diff --git a/test/tools/jar/UpdateJar.java b/test/tools/jar/UpdateJar.java
+new file mode 100644
+--- /dev/null
++++ openjdk/jdk/test/tools/jar/UpdateJar.java
+@@ -0,0 +1,87 @@
++/*
++ * Copyright (c) 2012, 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.
++ */
++
++/**
++ * @test
++ * @bug 7175845
++ * @summary jar -uf should not change file permission
++ */
++
++import java.io.*;
++import java.nio.file.*;
++import java.nio.file.attribute.*;
++import java.util.Set;
++import sun.tools.jar.Main;
++
++public class UpdateJar {
++
++    private static void cleanup(String... fnames) throws Throwable {
++        for (String fname : fnames) {
++            Files.deleteIfExists(Paths.get(fname)); 
++        }
++    }
++
++    public static void realMain(String[] args) throws Throwable {
++        if (!System.getProperty("os.name").startsWith("Windows")) {
++            String jar = "testUpdateJar.jar";
++            String e0  = "testUpdateJar_entry0.txt";
++            String e1  = "testUpdateJar_entry1.txt";
++            cleanup(jar, e0, e1);
++            try {
++                try (FileOutputStream fos0 = new FileOutputStream(e0);
++                     FileOutputStream fos1 = new FileOutputStream(e1)) {
++                    fos0.write(0);
++                    fos1.write(0);
++                }
++                String[] jarArgs = new String[] {"cfM0", jar, e0};
++                if (!new Main(System.out, System.err, "jar").run(jarArgs)) {
++                    fail("Could not create jar file.");
++                }
++                Set<PosixFilePermission> pm = Files.getPosixFilePermissions(Paths.get(jar));
++                jarArgs = new String[] {"uf", jar, e1};
++                if (!new Main(System.out, System.err, "jar").run(jarArgs)) {
++                    fail("Could not create jar file.");
++                }
++                equal(pm, Files.getPosixFilePermissions(Paths.get(jar)));
++            } finally {
++                cleanup(jar, e0, e1);
++            }
++        }
++    }
++
++    //--------------------- Infrastructure ---------------------------
++    static volatile int passed = 0, failed = 0;
++    static void pass() {passed++;}
++    static void fail() {failed++; Thread.dumpStack();}
++    static void fail(String msg) {System.out.println(msg); fail();}
++    static void unexpected(Throwable t) {failed++; t.printStackTrace();}
++    static void check(boolean cond) {if (cond) pass(); else fail();}
++    static void equal(Object x, Object y) {
++        if (x == null ? y == null : x.equals(y)) pass();
++        else fail(x + " not equal to " + y);}
++    public static void main(String[] args) throws Throwable {
++        try {realMain(args);} catch (Throwable t) {unexpected(t);}
++        System.out.println("\nPassed = " + passed + " failed = " + failed);
++        if (failed > 0) throw new AssertionError("Some tests failed");}
++}
++
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/7177216-native2ascii_changes_file_permissions.patch	Mon Oct 15 19:45:41 2012 +0100
@@ -0,0 +1,110 @@
+# HG changeset patch
+# User mbankal
+# Date 1342030130 25200
+# Node ID 0e34d43263864db83322f337262fbb2be3be5d17
+# Parent  99b43838c5d0a55a92bccbb62e6df5ee685978b6
+7177216: native2ascii changes file permissions of input file
+Reviewed-by: ohair
+
+diff --git a/src/share/classes/sun/tools/native2ascii/Main.java b/src/share/classes/sun/tools/native2ascii/Main.java
+--- openjdk/jdk/src/share/classes/sun/tools/native2ascii/Main.java
++++ openjdk/jdk/src/share/classes/sun/tools/native2ascii/Main.java
+@@ -237,7 +237,7 @@
+             if (tempDir == null)
+                 tempDir = new File(System.getProperty("user.dir"));
+ 
+-            tempFile = sun.misc.IOUtils.createTempFile("_N2A", ".TMP", tempDir);
++            tempFile = File.createTempFile("_N2A", ".TMP", tempDir);
+             tempFile.deleteOnExit();
+ 
+             try {
+diff --git a/test/sun/tools/native2ascii/Permission.java b/test/sun/tools/native2ascii/Permission.java
+new file mode 100644
+--- /dev/null
++++ openjdk/jdk/test/sun/tools/native2ascii/Permission.java
+@@ -0,0 +1,85 @@
++/*
++ * Copyright (c) 2012, 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.
++ */
++
++/**
++ * @test
++ * @bug 7177216
++ * @summary resulting file of native2ascii should have normal permission
++ */
++
++import java.io.*;
++import java.nio.file.*;
++import java.nio.file.attribute.*;
++import sun.tools.native2ascii.Main;
++
++public class Permission {
++
++    private static void cleanup(String... fnames) throws Throwable {
++        for (String fname : fnames) {
++            Files.deleteIfExists(Paths.get(fname)); 
++        }
++    }
++
++    public static void realMain(String[] args) throws Throwable {
++        if (!System.getProperty("os.name").startsWith("Windows")) {
++            String src = "native2ascii_permtest_src";
++            String dst = "native2ascii_permtest_dst";
++
++            cleanup(src, dst);
++            try {
++                try (FileOutputStream fos = new FileOutputStream(src)) {
++                    fos.write('a'); fos.write('b'); fos.write('c');
++                }
++                String[] n2aArgs = new String[] {"-encoding", "utf8", src, dst};
++                if (!new Main().convert(n2aArgs)) {
++                    fail("n2a failed.");
++                }
++                equal(Files.getPosixFilePermissions(Paths.get(src)),
++                      Files.getPosixFilePermissions(Paths.get(dst)));
++                String[] a2nArgs = new String[] {"-reverse", "-encoding", "utf8", dst, src};
++                if (!new Main().convert(a2nArgs)) {
++                    fail("a2n failed.");
++                }
++                equal(Files.getPosixFilePermissions(Paths.get(src)),
++                      Files.getPosixFilePermissions(Paths.get(dst)));
++            } finally {
++                cleanup(src, dst);
++            }
++        }
++    }
++
++    //--------------------- Infrastructure ---------------------------
++    static volatile int passed = 0, failed = 0;
++    static void pass() {passed++;}
++    static void fail() {failed++; Thread.dumpStack();}
++    static void fail(String msg) {System.out.println(msg); fail();}
++    static void unexpected(Throwable t) {failed++; t.printStackTrace();}
++    static void check(boolean cond) {if (cond) pass(); else fail();}
++    static void equal(Object x, Object y) {
++        if (x == null ? y == null : x.equals(y)) pass();
++        else fail(x + " not equal to " + y);}
++    public static void main(String[] args) throws Throwable {
++        try {realMain(args);} catch (Throwable t) {unexpected(t);}
++        System.out.println("\nPassed = " + passed + " failed = " + failed);
++        if (failed > 0) throw new AssertionError("Some tests failed");}
++}