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);
     }
 }