< prev index next >

src/java.base/share/classes/jdk/internal/jimage/ImageLocation.java

Print this page
rev 16767 : 8175561: Memory churn in jimage code affects startup after resource encapsulation changes
Reviewed-by: jlaskey
rev 16768 : imported patch imgstr_oneup

@@ -145,11 +145,31 @@
                     || name.charAt(index++) != '/') {
                 return false;
             }
         }
 
-        int parentOffset = (int)attributes[ATTRIBUTE_PARENT];
+        return verifyName(name, index, length, attributes, strings);
+    }
+
+    static boolean verify(String module, String name,
+                final long[] attributes, final ImageStrings strings) {
+        Objects.requireNonNull(module);
+        Objects.requireNonNull(name);
+        int moduleOffset = (int)attributes[ATTRIBUTE_MODULE];
+        if (moduleOffset != 0) {
+            if (!module.equals(strings.get(moduleOffset))) {
+                return false;
+            }
+        }
+
+        return verifyName(name, 0, name.length(), attributes, strings);
+    }
+
+    private static boolean verifyName(String name, int index, final int length,
+            final long[] attributes, final ImageStrings strings) {
+
+        int parentOffset = (int) attributes[ATTRIBUTE_PARENT];
         if (parentOffset != 0) {
             String parent = strings.get(parentOffset);
             final int parentLen = parent.length();
             if (!name.regionMatches(index, parent, 0, parentLen)) {
                 return false;

@@ -157,19 +177,17 @@
             index += parentLen;
             if (length <= index || name.charAt(index++) != '/') {
                 return false;
             }
         }
-
-        String base = strings.get((int)attributes[ATTRIBUTE_BASE]);
+        String base = strings.get((int) attributes[ATTRIBUTE_BASE]);
         final int baseLen = base.length();
         if (!name.regionMatches(index, base, 0, baseLen)) {
             return false;
         }
         index += baseLen;
-
-        int extOffset = (int)attributes[ATTRIBUTE_EXTENSION];
+        int extOffset = (int) attributes[ATTRIBUTE_EXTENSION];
         if (extOffset != 0) {
             String extension = strings.get(extOffset);
             int extLen = extension.length();
             if (length <= index
                     || name.charAt(index++) != '.'
< prev index next >