From 5f31abc373d0e9a15ea32aeb43e70d7c77871999 Mon Sep 17 00:00:00 2001 From: Elliotte Rusty Harold Date: Wed, 19 Aug 2026 19:41:05 +0000 Subject: [PATCH] Add null check for artifact parameter in evaluateFileNameMapping evaluateFileNameMapping threw an opaque NullPointerException when artifact was null. Add an explicit null check that throws IllegalArgumentException with a clear message. Also added a test that verifies the expected exception is thrown. Closes #62 --- .../org/apache/maven/shared/mapping/MappingUtils.java | 3 +++ .../org/apache/maven/shared/mapping/MappingUtilsTest.java | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/src/main/java/org/apache/maven/shared/mapping/MappingUtils.java b/src/main/java/org/apache/maven/shared/mapping/MappingUtils.java index 742ea93..10146a0 100644 --- a/src/main/java/org/apache/maven/shared/mapping/MappingUtils.java +++ b/src/main/java/org/apache/maven/shared/mapping/MappingUtils.java @@ -86,6 +86,9 @@ private MappingUtils() { * @return expression the expression to be evaluated */ public static String evaluateFileNameMapping(String expression, Artifact artifact) throws InterpolationException { + if (artifact == null) { + throw new IllegalArgumentException("artifact cannot be null"); + } RegexBasedInterpolator interpolator = new RegexBasedInterpolator("\\@\\{(", ")?([^}]+)\\}@"); interpolator.addValueSource(new ObjectBasedValueSource(artifact)); diff --git a/src/test/java/org/apache/maven/shared/mapping/MappingUtilsTest.java b/src/test/java/org/apache/maven/shared/mapping/MappingUtilsTest.java index 3b080cf..7dfdb95 100644 --- a/src/test/java/org/apache/maven/shared/mapping/MappingUtilsTest.java +++ b/src/test/java/org/apache/maven/shared/mapping/MappingUtilsTest.java @@ -24,6 +24,7 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * Tests the mapping of file names. @@ -117,4 +118,11 @@ void mappingWithOptionalClassifier() throws Exception { "maven-test-lib-1.0-classifier.jar", MappingUtils.evaluateFileNameMapping(mappingWithOptionalClassifier2, jar)); } + + @Test + void mappingWithNullArtifact() { + assertThrows( + IllegalArgumentException.class, + () -> MappingUtils.evaluateFileNameMapping("@{artifactId}@.@{extension}@", null)); + } }