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/21 13:32:36 UTC

svn commit: r1696944 - in /commons/proper/bcel/trunk/src: changes/changes.xml main/java/org/apache/commons/bcel6/Constants.java main/java/org/apache/commons/bcel6/verifier/statics/Pass3aVerifier.java

Author: sebb
Date: Fri Aug 21 11:32:35 2015
New Revision: 1696944

URL: http://svn.apache.org/r1696944
Log:
BCEL-251 Pass3aVerifier visitANEWARRAY() does not allow 255 array dimensions

Modified:
    commons/proper/bcel/trunk/src/changes/changes.xml
    commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/Constants.java
    commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/statics/Pass3aVerifier.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=1696944&r1=1696943&r2=1696944&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/changes/changes.xml (original)
+++ commons/proper/bcel/trunk/src/changes/changes.xml Fri Aug 21 11:32:35 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-251" type="fix">Pass3aVerifier visitANEWARRAY() does not allow 255 array dimensions</action>
       <action issue="BCEL-211" type="update">Some additional clone methods should be public.</action>
       <action issue="BCEL-249" type="fix">Check for max Short seems wrong</action>
       <action issue="BCEL-127" type="update">Document that Instruction Factory returns singleton instances</action>

Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/Constants.java
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/Constants.java?rev=1696944&r1=1696943&r2=1696944&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/Constants.java (original)
+++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/Constants.java Fri Aug 21 11:32:35 2015
@@ -362,6 +362,15 @@ public final class Constants {
    */
   public static final int MAX_CODE_SIZE      = 65536; //bytes
 
+  /**
+   * The maximum number of dimensions in an array ({@value}).
+   * One of the limitations of the Java Virtual Machine.
+   *
+   * @see <a href="http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.3.2-150">
+   * Field Descriptors in The Java Virtual Machine Specification</a>
+   */
+  public static final int MAX_ARRAY_DIMENSIONS = 255;
+
   /** Java VM opcode.
    * @see <a href="http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.nop">
    * Opcode definitions in The Java Virtual Machine Specification</a> */

Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/statics/Pass3aVerifier.java
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/statics/Pass3aVerifier.java?rev=1696944&r1=1696943&r2=1696944&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/statics/Pass3aVerifier.java (original)
+++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/statics/Pass3aVerifier.java Fri Aug 21 11:32:35 2015
@@ -812,8 +812,10 @@ public final class Pass3aVerifier extend
             Type t = o.getType(cpg);
             if (t instanceof ArrayType){
                 int dimensions = ((ArrayType) t).getDimensions();
-                if (dimensions >= 255){
-                    constraintViolated(o, "Not allowed to create an array with more than 255 dimensions.");
+                if (dimensions > Constants.MAX_ARRAY_DIMENSIONS){
+                    constraintViolated(o,
+                        "Not allowed to create an array with more than "+ Constants.MAX_ARRAY_DIMENSIONS + " dimensions;"+
+                        " actual: " + dimensions);
                 }
             }
         }