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 ); + } + + } + }