diff -r 9dbe335dad72 -r 355457152ea8 jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java --- a/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java Thu Jan 19 15:45:36 2017 -0800 +++ b/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java Thu Jan 19 16:38:24 2017 -0800 @@ -2294,16 +2294,17 @@ locPos += locSZ; continue; } + int end = locPos + locSZ - 4; int flag = CH(buf, locPos++); - if ((flag & 0x1) != 0) { + if ((flag & 0x1) != 0 && locPos <= end) { mtime = unixToJavaTime(LG(buf, locPos)); locPos += 4; } - if ((flag & 0x2) != 0) { + if ((flag & 0x2) != 0 && locPos <= end) { atime = unixToJavaTime(LG(buf, locPos)); locPos += 4; } - if ((flag & 0x4) != 0) { + if ((flag & 0x4) != 0 && locPos <= end) { ctime = unixToJavaTime(LG(buf, locPos)); locPos += 4; }