--- old/src/java.base/share/classes/jdk/internal/jimage/ImageLocation.java 2017-02-27 13:57:11.510469061 +0100 +++ new/src/java.base/share/classes/jdk/internal/jimage/ImageLocation.java 2017-02-27 13:57:11.318468109 +0100 @@ -147,7 +147,27 @@ } } - 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(); @@ -159,15 +179,13 @@ 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();