You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2015/08/23 18:52:06 UTC
svn commit: r1697224 - in /commons/proper/bcel/trunk/src: changes/changes.xml
main/java/org/apache/commons/bcel6/verifier/structurals/ControlFlowGraph.java
main/java/org/apache/commons/bcel6/verifier/structurals/Subroutines.java
Author: sebb
Date: Sun Aug 23 16:52:06 2015
New Revision: 1697224
URL: http://svn.apache.org/r1697224
Log:
BCEL-253 Pass 3b verifier is too strict.
Modified:
commons/proper/bcel/trunk/src/changes/changes.xml
commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/structurals/ControlFlowGraph.java
commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/structurals/Subroutines.java
Modified: commons/proper/bcel/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/changes/changes.xml?rev=1697224&r1=1697223&r2=1697224&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/changes/changes.xml (original)
+++ commons/proper/bcel/trunk/src/changes/changes.xml Sun Aug 23 16:52:06 2015
@@ -63,6 +63,7 @@ The <action> type attribute can be add,u
<body>
<release version="6.0" date="TBA" description="Major release with Java 7 and 8 support">
+ <action issue="BCEL-253" type="fix">Pass 3b verifier is too strict.</action>
<action issue="BCEL-248" type="fix">StackMapTable[Entry] should be removed and improvements merged into StackMap[Entry]</action>
<action issue="BCEL-202" type="fix">StackMap[Table]Entry.copy() needs to be deep; Improved support for StackMaps</action>
<action issue="BCEL-251" type="fix">Pass3aVerifier visitANEWARRAY() does not allow 255 array dimensions</action>
Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/structurals/ControlFlowGraph.java
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/structurals/ControlFlowGraph.java?rev=1697224&r1=1697223&r2=1697224&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/structurals/ControlFlowGraph.java (original)
+++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/structurals/ControlFlowGraph.java Sun Aug 23 16:52:06 2015
@@ -409,10 +409,21 @@ public class ControlFlowGraph{
private final Map<InstructionHandle, InstructionContext> instructionContexts = new HashMap<>();
/**
- * A Control Flow Graph.
+ * A Control Flow Graph; with additional JustIce checks
+ * @param method_gen the method generator instance
*/
public ControlFlowGraph(MethodGen method_gen){
- subroutines = new Subroutines(method_gen);
+ this(method_gen, true);
+ }
+
+ /**
+ * A Control Flow Graph.
+ * @param method_gen the method generator instance
+ * @param enableJustIceCheck if true, additional JustIce checks are performed
+ * @since 6.0
+ */
+ public ControlFlowGraph(MethodGen method_gen, boolean enableJustIceCheck){
+ subroutines = new Subroutines(method_gen, enableJustIceCheck);
exceptionhandlers = new ExceptionHandlers(method_gen);
InstructionHandle[] instructionhandles = method_gen.getInstructionList().getInstructionHandles();
Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/structurals/Subroutines.java
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/structurals/Subroutines.java?rev=1697224&r1=1697223&r2=1697224&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/structurals/Subroutines.java (original)
+++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/structurals/Subroutines.java Sun Aug 23 16:52:06 2015
@@ -377,9 +377,20 @@ public class Subroutines{
* Constructor.
* @param mg A MethodGen object representing method to
* create the Subroutine objects of.
+ * Assumes that JustIce strict checks are needed.
*/
public Subroutines(MethodGen mg){
+ this(mg, true);
+ }
+ /**
+ * Constructor.
+ * @param mg A MethodGen object representing method to
+ * create the Subroutine objects of.
+ * @param enableJustIceCheck whether to enable additional JustIce checks
+ * @since 6.0
+ */
+ public Subroutines(MethodGen mg, boolean enableJustIceCheck){
InstructionHandle[] all = mg.getInstructionList().getInstructionHandles();
CodeExceptionGen[] handlers = mg.getExceptionHandlers();
@@ -482,22 +493,24 @@ public class Subroutines{
}
}
- // Now make sure no instruction of a Subroutine is protected by exception handling code
- // as is mandated by JustIces notion of subroutines.
- for (CodeExceptionGen handler : handlers) {
- InstructionHandle _protected = handler.getStartPC();
- while (_protected != handler.getEndPC().getNext()){
- // Note the inclusive/inclusive notation of "generic API" exception handlers!
- for (Subroutine sub : subroutines.values()) {
- if (sub != subroutines.get(all[0])){ // We don't want to forbid top-level exception handlers.
- if (sub.contains(_protected)){
- throw new StructuralCodeConstraintException("Subroutine instruction '"+_protected+
- "' is protected by an exception handler, '"+handler+
- "'. This is forbidden by the JustIce verifier due to its clear definition of subroutines.");
+ if (enableJustIceCheck) {
+ // Now make sure no instruction of a Subroutine is protected by exception handling code
+ // as is mandated by JustIces notion of subroutines.
+ for (CodeExceptionGen handler : handlers) {
+ InstructionHandle _protected = handler.getStartPC();
+ while (_protected != handler.getEndPC().getNext()){
+ // Note the inclusive/inclusive notation of "generic API" exception handlers!
+ for (Subroutine sub : subroutines.values()) {
+ if (sub != subroutines.get(all[0])){ // We don't want to forbid top-level exception handlers.
+ if (sub.contains(_protected)){
+ throw new StructuralCodeConstraintException("Subroutine instruction '"+_protected+
+ "' is protected by an exception handler, '"+handler+
+ "'. This is forbidden by the JustIce verifier due to its clear definition of subroutines.");
+ }
}
}
+ _protected = _protected.getNext();
}
- _protected = _protected.getNext();
}
}