-
Bug
-
Resolution: Fixed
-
P3
-
6u17, 9
-
b88
-
x86
-
windows_xp
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8142185 | emb-9 | Sean Coffey | P3 | Resolved | Fixed | team |
JDK-8140926 | 8u91 | Sean Coffey | P3 | Resolved | Fixed | b01 |
JDK-8139643 | 8u72 | Sean Coffey | P3 | Resolved | Fixed | b05 |
JDK-8147259 | emb-8u91 | Sean Coffey | P3 | Resolved | Fixed | b01 |
JDK-8139644 | 7u101 | Sean Coffey | P3 | Resolved | Fixed | b01 |
JDK-8140418 | 7u95 | Sean Coffey | P3 | Resolved | Fixed | b06 |
JDK-8139645 | 6u115 | Sean Coffey | P3 | Resolved | Fixed | b01 |
JDK-8140416 | 6u111 | Sean Coffey | P3 | Resolved | Fixed | b06 |
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows
Version 5.1 (Build 2600.xpsp_sp3_gdr.090804-1435 : Service Pack 3)
A DESCRIPTION OF THE PROBLEM :
Using an InputStream of a ZIP file entry seems not thread safe, and may even crash the VM.
Below you'll find two crash reports. The first one is from my test run, the second one from the real issue we've encountered. It happens when reading an animating an animated GIF as a resource from a JAR file. Notice that the affected code is the AWT ImageFetcher.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
See test program. It's timing issue, so you may have to play with it for a while.
I think the access violation happens at the following line, while accessing csize of a (already closed?) NULL entry, in function ZIP_Read:
zip_util.c:1081
jlong entry_size = (entry->csize != 0) ? entry->csize : entry->size;
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The exception that happens most of the time is quite good.
java.io.EOFException: Unexpected end of ZLIB input stream
at java.util.zip.ZipFile$1.fill(ZipFile.java:227)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:141)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:105)
at CrashTest.main(CrashTest.java:31)
ACTUAL -
From time to time, there's a ZipException instead of the EOFException, with varying, less helpful, messages.
java.util.zip.ZipException: invalid literal/length code
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:147)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:105)
at CrashTest.main(CrashTest.java:31)
Other messages are:
oversubscribed dynamic bit lengths tree
invalid stored block lengths
invalid block type
The real problem is that the issue makes the VM crash some times - refer stack trace.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Attached seperatly
REPRODUCIBILITY :
This bug can be reproduced rarely.
---------- BEGIN SOURCE ----------
Any JAR with any file should do. Just make the entry big enough for the timer to hit the reading loop.
import java.io.EOFException;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Timer;
import java.util.TimerTask;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public class CrashTest {
public static void main(final String[] args) throws Exception {
final Timer timer = new Timer();
while (true) {
final ZipFile zip = new ZipFile(new File("test.jar"));
try {
final ZipEntry entry = zip.getEntry("test.gif");
final InputStream in = zip.getInputStream(entry);
try {
timer.schedule(new TimerTask() {
@Override
public void run() {
try {
in.close();
} catch (final IOException ex) {
ex.printStackTrace(System.err);
}
}
}, 10);
int c;
do {
c = in.read();
} while (c != -1);
}
finally {
in.close();
}
}
catch (final EOFException ex) {
// "Unexpected end of ZLIB input stream"
}
catch (final Exception ex) {
ex.printStackTrace(System.err);
}
finally {
zip.close();
}
}
}
}
---------- END SOURCE ----------
- backported by
-
JDK-8139643 ZipFileInputStream Not Thread-Safe
- Resolved
-
JDK-8139644 ZipFileInputStream Not Thread-Safe
- Resolved
-
JDK-8139645 ZipFileInputStream Not Thread-Safe
- Resolved
-
JDK-8140416 ZipFileInputStream Not Thread-Safe
- Resolved
-
JDK-8140418 ZipFileInputStream Not Thread-Safe
- Resolved
-
JDK-8140926 ZipFileInputStream Not Thread-Safe
- Resolved
-
JDK-8142185 ZipFileInputStream Not Thread-Safe
- Resolved
-
JDK-8147259 ZipFileInputStream Not Thread-Safe
- Resolved
- duplicates
-
JDK-8041721 Bad reference at Java_java_util_zip_ZipFile_getEntry
- Closed