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 <krosenv...@apache.org>
Authored: Wed Mar 6 19:17:38 2013 +0100
Committer: Kristian Rosenvold <krosenv...@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 );
+        }
+
+    }
+
 }

Reply via email to