< prev index next >

src/share/vm/classfile/classFileParser.cpp

Print this page

        

@@ -5400,10 +5400,20 @@
   set_klass(ik);
 
   debug_only(ik->verify();)
 }
 
+static bool relax_format_check_for(oop loader, bool boot_loader) {
+  bool trusted = boot_loader || SystemDictionary::is_platform_class_loader(loader);
+  bool need_verify =
+    // verifyAll
+    (BytecodeVerificationLocal && BytecodeVerificationRemote) ||
+    // verifyRemote
+    (!BytecodeVerificationLocal && BytecodeVerificationRemote && !trusted);
+  return !need_verify;
+}
+
 ClassFileParser::ClassFileParser(ClassFileStream* stream,
                                  Symbol* name,
                                  ClassLoaderData* loader_data,
                                  Handle protection_domain,
                                  const Klass* host_klass,

@@ -5488,11 +5498,12 @@
   // synch back verification state to stream
   stream->set_verify(_need_verify);
 
   // Check if verification needs to be relaxed for this class file
   // Do not restrict it to jdk1.0 or jdk1.1 to maintain backward compatibility (4982376)
-  _relax_verify = Verifier::relax_verify_for(_loader_data->class_loader());
+  _relax_verify = relax_format_check_for(_loader_data->class_loader(),
+                                         _loader_data->is_the_null_class_loader_data());
 
   parse_stream(stream, CHECK);
 
   post_process_parsed_stream(stream, _cp, CHECK);
 }
< prev index next >