You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kr...@apache.org on 2013/03/06 19:18:08 UTC

git commit: [SUREFIRE-967] ArrayIndexOutOfBounds in SmartStackTraceParser

Updated Branches:
  refs/heads/master 348e203d6 -> c513cbc5b


[SUREFIRE-967] ArrayIndexOutOfBounds in SmartStackTraceParser


Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/c513cbc5
Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/c513cbc5
Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/c513cbc5

Branch: refs/heads/master
Commit: c513cbc5b76619a6164e2ef3a79511d81dea878b
Parents: 348e203
Author: Kristian Rosenvold <kr...@apache.org>
Authored: Wed Mar 6 19:17:38 2013 +0100
Committer: Kristian Rosenvold <kr...@apache.org>
Committed: Wed Mar 6 19:17:38 2013 +0100

----------------------------------------------------------------------
 pom.xml                                            |    2 +-
 .../surefire/report/SmartStackTraceParser.java     |    9 +++++-
 .../surefire/report/SmartStackTraceParserTest.java |   22 +++++++++++++++
 3 files changed, 30 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/c513cbc5/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 1465f17..bb5ae5f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -241,7 +241,7 @@
       <dependency>
         <groupId>org.apache.maven.shared</groupId>
         <artifactId>maven-shared-utils</artifactId>
-        <version>0.3</version>
+        <version>0.3-SNAPSHOT</version>
       </dependency>
       <dependency>
         <groupId>org.apache.maven.shared</groupId>

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/c513cbc5/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/SmartStackTraceParser.java
----------------------------------------------------------------------
diff --git a/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/SmartStackTraceParser.java b/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/SmartStackTraceParser.java
index 4923eb9..13bc6c9 100644
--- a/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/SmartStackTraceParser.java
+++ b/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/SmartStackTraceParser.java
@@ -85,6 +85,11 @@ public class SmartStackTraceParser
         List<StackTraceElement> stackTraceElements = focusOnClass( stackTrace, testClass );
         Collections.reverse( stackTraceElements );
         StackTraceElement stackTraceElement;
+        if (stackTrace.length == 0)
+        {
+            result.append( simpleName );
+            result.append("XX");
+        }
         for ( int i = 0; i < stackTraceElements.size(); i++ )
         {
             stackTraceElement = stackTraceElements.get( i );
@@ -175,7 +180,7 @@ public class SmartStackTraceParser
 
     private boolean rootIsInclass()
     {
-        return stackTrace[0].getClassName().equals( testClassName );
+        return  stackTrace.length > 0 && stackTrace[0].getClassName().equals( testClassName );
     }
 
     static List<StackTraceElement> focusOnClass( StackTraceElement[] stackTrace, Class clazz )
@@ -183,7 +188,7 @@ public class SmartStackTraceParser
         List<StackTraceElement> result = new ArrayList<StackTraceElement>();
         for ( StackTraceElement element : stackTrace )
         {
-            if ( isInSupers( clazz, element.getClassName() ) )
+            if ( element != null && isInSupers( clazz, element.getClassName() ) )
             {
                 result.add( element );
             }

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/c513cbc5/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/SmartStackTraceParserTest.java
----------------------------------------------------------------------
diff --git a/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/SmartStackTraceParserTest.java b/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/SmartStackTraceParserTest.java
index c97e5b8..8880ed0 100644
--- a/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/SmartStackTraceParserTest.java
+++ b/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/SmartStackTraceParserTest.java
@@ -19,6 +19,7 @@ package org.apache.maven.surefire.report;
  * under the License.
  */
 
+import java.lang.reflect.Field;
 import java.util.List;
 
 import junit.framework.Assert;
@@ -228,4 +229,25 @@ public class SmartStackTraceParserTest
             new SmartStackTraceParser( "Not a class name", new Throwable( "my message" ) );
         assertEquals( "my message", smartStackTraceParser.getString() );
     }
+
+    public void testNullElementInStackTrace()
+            throws Exception
+    {
+        ATestClass aTestClass = new ATestClass();
+        try
+        {
+            aTestClass.failInAssert();
+        }
+        catch ( AssertionError e )
+        {
+            SmartStackTraceParser smartStackTraceParser = new SmartStackTraceParser( ATestClass.class, e );
+            Field stackTrace = SmartStackTraceParser.class.getDeclaredField("stackTrace");
+            stackTrace.setAccessible(true);
+            stackTrace.set(smartStackTraceParser, new StackTraceElement[0]);
+            String res = smartStackTraceParser.getString();
+            assertEquals( "ATestClass X is not Z", res );
+        }
+
+    }
+
 }