--- old/src/share/vm/classfile/verifier.cpp 2015-03-17 10:57:50.053722000 -0400 +++ new/src/share/vm/classfile/verifier.cpp 2015-03-17 10:57:49.154682000 -0400 @@ -2236,14 +2236,19 @@ } // Look at the method's handlers. If the bci is in the handler's try block -// then check if the handler_pc is already on the stack. If not, push it. +// then check if the handler_pc is already on the stack. If not, push it +// unless the handler_pc is within the covered code range. void ClassVerifier::push_handlers(ExceptionTable* exhandlers, GrowableArray* handler_stack, u4 bci) { int exlength = exhandlers->length(); for(int x = 0; x < exlength; x++) { if (bci >= exhandlers->start_pc(x) && bci < exhandlers->end_pc(x)) { - handler_stack->append_if_missing(exhandlers->handler_pc(x)); + u4 exhandler_pc = exhandlers->handler_pc(x); + if (exhandler_pc < exhandlers->start_pc(x) || + exhandler_pc >= exhandlers->end_pc(x)) { + handler_stack->append_if_missing(exhandler_pc); + } } } }