src/jdk.zipfs/share/classes/jdk/nio/zipfs/JarFileSystem.java
Print this page
@@ -133,11 +133,11 @@
*/
private TreeMap<Integer, IndexNode> getVersionMap(int version, IndexNode metaInfVersions) {
TreeMap<Integer,IndexNode> map = new TreeMap<>();
IndexNode child = metaInfVersions.child;
while (child != null) {
- Integer key = getVersion(child.name, metaInfVersions.name.length);
+ Integer key = getVersion(child.name, metaInfVersions.name.length + 1);
if (key != null && key <= version) {
map.put(key, child);
}
child = child.sibling;
}
@@ -147,11 +147,11 @@
/**
* extract the integer version number -- META-INF/versions/9 returns 9
*/
private Integer getVersion(byte[] name, int offset) {
try {
- return Integer.parseInt(getString(Arrays.copyOfRange(name, offset, name.length-1)));
+ return Integer.parseInt(getString(Arrays.copyOfRange(name, offset, name.length)));
} catch (NumberFormatException x) {
// ignore this even though it might indicate issues with the JAR structure
return null;
}
}
@@ -174,10 +174,10 @@
* given inode for META-INF/versions/9/foo/bar.class
* and prefix META-INF/versions/9/
* returns foo/bar.class
*/
private byte[] getRootName(IndexNode prefix, IndexNode inode) {
- int offset = prefix.name.length - 1;
+ int offset = prefix.name.length;
byte[] fullName = inode.name;
return Arrays.copyOfRange(fullName, offset, fullName.length);
}
}