You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ti...@apache.org on 2022/01/23 21:51:33 UTC
[maven-surefire] 09/13: [SUREFIRE-1851] Prevent NPE in SmartStackTraceParser
This is an automated email from the ASF dual-hosted git repository.
tibordigana pushed a commit to branch release/2.22.3
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
commit ea671d2846b1421b9e96aa9f993c8dfb17eec651
Author: Adam Jones <jo...@rocketmail.com>
AuthorDate: Mon Oct 5 02:32:14 2020 +0200
[SUREFIRE-1851] Prevent NPE in SmartStackTraceParser
(cherry picked from commit 08163fa6d0d161070a6add1c05a1058781160415)
---
.../surefire/report/SmartStackTraceParser.java | 6 ++-
.../apache/maven/surefire/report/ATestClass.java | 5 +++
.../surefire/report/SmartStackTraceParserTest.java | 15 ++++++++
.../{ATestClass.java => SomeMockedException.java} | 43 ++++++++++------------
4 files changed, 45 insertions(+), 24 deletions(-)
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 7c68f95..cccb939 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
@@ -196,11 +196,15 @@ public class SmartStackTraceParser
private boolean rootIsInclass()
{
- return stackTrace.length > 0 && stackTrace[0].getClassName().equals( testClassName );
+ return stackTrace != null && stackTrace.length > 0 && stackTrace[0].getClassName().equals( testClassName );
}
static List<StackTraceElement> focusOnClass( StackTraceElement[] stackTrace, Class clazz )
{
+ if ( stackTrace == null )
+ {
+ return Collections.emptyList();
+ }
List<StackTraceElement> result = new ArrayList<StackTraceElement>();
for ( StackTraceElement element : stackTrace )
{
diff --git a/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/ATestClass.java b/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/ATestClass.java
index baff162..d75e741 100644
--- a/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/ATestClass.java
+++ b/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/ATestClass.java
@@ -60,4 +60,9 @@ public class ATestClass
throw new RuntimeException( "This message will be truncated, somewhere over the rainbow. "
+ "Gangnam style, Gangnam style, Gangnam style, , Gangnam style, Gangnam style" );
}
+
+ public void aMockedException()
+ {
+ throw new SomeMockedException();
+ }
}
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 e600718..a598f5b 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
@@ -303,6 +303,21 @@ public class SmartStackTraceParserTest
}
}
+ public void testNullStackTrace()
+ {
+ try
+ {
+ new ATestClass().aMockedException();
+ }
+ catch ( Exception e )
+ {
+ SmartStackTraceParser smartStackTraceParser =
+ new SmartStackTraceParser( ATestClass.class.getName(), e, null );
+ String res = smartStackTraceParser.getString();
+ assertEquals( "ATestClass ยป SomeMocked", res );
+ }
+ }
+
public ExecutionException getSingleNested()
{
FutureTask<Object> futureTask = new FutureTask<Object>( new RunnableTestClass2() );
diff --git a/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/ATestClass.java b/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/SomeMockedException.java
similarity index 54%
copy from surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/ATestClass.java
copy to surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/SomeMockedException.java
index baff162..5852db2 100644
--- a/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/ATestClass.java
+++ b/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/SomeMockedException.java
@@ -19,45 +19,42 @@ package org.apache.maven.surefire.report;
* under the License.
*/
-import java.io.File;
-
-@SuppressWarnings( "UnusedDeclaration" )
-public class ATestClass
+/**
+ * @author Adam Jones
+ */
+public class SomeMockedException extends RuntimeException
{
-
- public void failInAssert()
- {
- throw new AssertionError( "X is not Z" );
- }
-
- public void nestedFailInAssert()
+ public SomeMockedException()
{
- failInAssert();
}
- public void npe()
+ @Override
+ public String getMessage()
{
- throw new NullPointerException( "It was null" );
+ return null;
}
- public void nestedNpe()
+ @Override
+ public String getLocalizedMessage()
{
- npe();
+ return null;
}
- public void npeOutsideTest()
+ @Override
+ public Throwable getCause()
{
- File file = new File( (String) null );
+ return null;
}
- public void nestedNpeOutsideTest()
+ @Override
+ public String toString()
{
- npeOutsideTest();
+ return null;
}
- public void aLongTestErrorMessage()
+ @Override
+ public StackTraceElement[] getStackTrace()
{
- throw new RuntimeException( "This message will be truncated, somewhere over the rainbow. "
- + "Gangnam style, Gangnam style, Gangnam style, , Gangnam style, Gangnam style" );
+ return null;
}
}