@@ -137,6 +137,18 @@ private RestrictedSecurity() {
137137 super ();
138138 }
139139
140+ private static boolean isJarVerifierInStackTrace () {
141+ java .util .function .Predicate <Class <?>> isJarVerifier =
142+ clazz -> "java.util.jar.JarVerifier" .equals (clazz .getName ())
143+ && "java.base" .equals (clazz .getModule ().getName ());
144+
145+ java .util .function .Function <Stream <StackWalker .StackFrame >, Boolean > matcher =
146+ stream -> stream .map (StackWalker .StackFrame ::getDeclaringClass )
147+ .anyMatch (isJarVerifier );
148+
149+ return StackWalker .getInstance (StackWalker .Option .RETAIN_CLASS_REFERENCE ).walk (matcher );
150+ }
151+
140152 /**
141153 * Check loaded profiles' hash values.
142154 *
@@ -154,19 +166,19 @@ private static void checkHashValues(boolean fromProviders) {
154166 if (fromProviders ) {
155167 enableCheckHashes = true ;
156168 }
157- if (enableCheckHashes && (hashPauseCount .get () == 0 )) {
169+ if (enableCheckHashes && ! isJarVerifierInStackTrace () && (hashPauseCount .get () == 0 )) {
158170 profileParser = null ;
159171 parser .checkHashValues ();
160172 }
161173 }
162174 }
163175
164176 public static void pauseHashCheck () {
165- hashPauseCount .incrementAndGet ();
177+ hashPauseCount .incrementAndGet ();
166178 }
167179
168180 public static void resumeHashCheck () {
169- hashPauseCount .decrementAndGet ();
181+ hashPauseCount .decrementAndGet ();
170182 }
171183
172184 /**
@@ -252,6 +264,7 @@ public static boolean isServiceAllowed(Service service) {
252264 */
253265 public static boolean canServiceBeRegistered (Service service ) {
254266 if (securityEnabled ) {
267+ checkHashValues (false );
255268 return restricts .isRestrictedServiceAllowed (service , false );
256269 }
257270 return true ;
0 commit comments