[PATCH] JDK-8211765 - JarFile constructor throws undocumented exception
Jaikiran Pai
jai.forums2013 at gmail.com
Fri Oct 5 15:31:07 UTC 2018
Thank you Chris.
I've attached a patch here which catches the InvalidPathException within
the implementation of ZipFile and wraps and throws a IOException. It's
the same patch which I mentioned earlier in this thread, but now also
includes jtreg testcase to reproduce the issue and verify the fix. I
have run the jtreg test with and without this patch on my *nix system
and it behaves as expected (fails without the fix and passes with it). I
don't have a Windows OS at hand to test this patch and the testcase on it.
I also did a very basic check and went through the JarFile/ZipFile
constructor code path to see if there are other places in that flow
which might need similar treatment. My not-so-thorough check didn't show
up any other such instance.
Could I please get help from someone who can sponsor this patch and help
with the review too?
-Jaikiran
On 05/10/18 6:21 PM, Chris Hegarty wrote:
>> On 5 Oct 2018, at 12:08, Jaikiran Pai <jai.forums2013 at gmail.com> wrote:
>>
>>> I don't have access to create an issue for this in OpenJDK JIRA, so I'll
>>> go ahead and create one at bugs.java.com.
>>>
>> I just submitted the report. Internal review id 9057522 has been
>> assigned to the issue.
> And now in the JDK project:
>
> https://bugs.openjdk.java.net/browse/JDK-8211765
>
> -Chris.
-------------- next part --------------
# HG changeset patch
# User Jaikiran Pai <jaikiran.pai at gmail.com>
# Date 1538645309 -19800
# Thu Oct 04 14:58:29 2018 +0530
# Node ID 957376a6e53c751fa144d0e41e063ef9179a9275
# Parent e75f6076d391a6081e621d64641526c99bf8c5b2
JDK-8211765 Wrap and throw an IOException when a InvalidPathException is thrown from within ZipFile constructor
diff --git a/src/java.base/share/classes/java/util/zip/ZipFile.java b/src/java.base/share/classes/java/util/zip/ZipFile.java
--- a/src/java.base/share/classes/java/util/zip/ZipFile.java
+++ b/src/java.base/share/classes/java/util/zip/ZipFile.java
@@ -35,6 +35,7 @@
import java.lang.ref.Cleaner.Cleanable;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
+import java.nio.file.InvalidPathException;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.Files;
import java.util.ArrayDeque;
@@ -1218,8 +1219,13 @@
static Source get(File file, boolean toDelete) throws IOException {
- Key key = new Key(file,
- Files.readAttributes(file.toPath(), BasicFileAttributes.class));
+ final Key key;
+ try {
+ key = new Key(file,
+ Files.readAttributes(file.toPath(), BasicFileAttributes.class));
+ } catch (InvalidPathException ipe) {
+ throw new IOException(ipe);
+ }
Source src;
synchronized (files) {
src = files.get(key);
diff --git a/test/jdk/java/util/jar/JarFile/Constructor.java b/test/jdk/java/util/jar/JarFile/Constructor.java
--- a/test/jdk/java/util/jar/JarFile/Constructor.java
+++ b/test/jdk/java/util/jar/JarFile/Constructor.java
@@ -23,7 +23,7 @@
/**
* @test
- * @bug 4842702
+ * @bug 4842702 8211765
* @summary Check that constructors throw specified exceptions
* @author Martin Buchholz
*/
@@ -63,5 +63,23 @@
try { Unreached (new JarFile (new File ("NoSuchJar.jar"))); }
catch (IOException e) {}
+
+ // operating system specific
+ final String osname = System.getProperty("os.name");
+ if (osname.startsWith("Windows")) {
+ doWindowsTests();
+ } else {
+ doUnixTests();
+ }
+ }
+
+ private static void doWindowsTests() throws Exception {
+ try { Unreached (new JarFile ("C:\\*")); } // invalid character
+ catch (IOException e) {}
+ }
+
+ private static void doUnixTests() throws Exception {
+ try { Unreached (new JarFile ("foo\u0000bar")); } // invalid character
+ catch (IOException e) {}
}
}
More information about the core-libs-dev
mailing list