This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-cli.git
The following commit(s) were added to refs/heads/master by this push:
new 4e0cdd0f [CLI-344] Option.processValue() throws NullPointerException
when passed null value with value separator configured
4e0cdd0f is described below
commit 4e0cdd0f96762df26e6335be8a1ab1afd55234f1
Author: Gary D. Gregory <[email protected]>
AuthorDate: Tue Jul 29 10:34:56 2025 -0400
[CLI-344] Option.processValue() throws NullPointerException when passed
null value with value separator configured
Fail faster with a more precise NullPointerException
---
src/changes/changes.xml | 3 ++-
src/main/java/org/apache/commons/cli/Option.java | 2 +-
src/test/java/org/apache/commons/cli/OptionTest.java | 8 ++++++++
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 90e540bb..86c04543 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -35,7 +35,8 @@
<action type="fix" dev="ggregory" due-to="Gary Gregory">Remove -nouses
directive from maven-bundle-plugin. OSGi package imports now state 'uses'
definitions for package imports, this doesn't affect JPMS (from
org.apache.commons:commons-parent:80).</action>
<action type="fix" dev="ggregory" due-to="Arnout Engelen">Deprecate
PatternOptionBuilder.PatternOptionBuilder().</action>
<action type="fix" issue="CLI-341" dev="ggregory" due-to="Ruiqi Dong,
Gary Gregory">HelpFormatter infinite loop with 0 width input.</action>
- <action type="fix" issue="CLI-349" dev="ggregory" due-to="Leo Fernandes,
Gary Gregory">DefaultParser.parse() throws NullPointerException when options
parameter is null.</action>
+ <action type="fix" issue="CLI-349" dev="ggregory" due-to="Leo Fernandes,
Gary Gregory">Fail faster with a more precise NullPointerException:
Option.processValue() throws NullPointerException when passed null value with
value separator configured.</action>
+ <action type="fix" issue="CLI-344" dev="ggregory" due-to="Ruiqi Dong,
Gary Gregory">Fail faster with a more precise NullPointerException:
DefaultParser.parse() throws NullPointerException when options parameter is
null.</action>
<!-- ADD -->
<action type="add" issue="CLI-339" dev="ggregory" due-to="Claude Warren,
Gary Gregory">Help formatter extension in the new package #314.</action>
<action type="add" dev="ggregory" due-to="Gary
Gregory">CommandLine.Builder implements Supplier<CommandLine>.</action>
diff --git a/src/main/java/org/apache/commons/cli/Option.java
b/src/main/java/org/apache/commons/cli/Option.java
index 253c186b..e725fa3c 100644
--- a/src/main/java/org/apache/commons/cli/Option.java
+++ b/src/main/java/org/apache/commons/cli/Option.java
@@ -830,7 +830,7 @@ public class Option implements Cloneable, Serializable {
if (argCount == UNINITIALIZED) {
throw new IllegalArgumentException("NO_ARGS_ALLOWED");
}
- String add = value;
+ String add = Objects.requireNonNull(value, "value");
// this Option has a separator character
if (hasValueSeparator()) {
// get the separator character
diff --git a/src/test/java/org/apache/commons/cli/OptionTest.java
b/src/test/java/org/apache/commons/cli/OptionTest.java
index ec0cb100..01a24ff7 100644
--- a/src/test/java/org/apache/commons/cli/OptionTest.java
+++ b/src/test/java/org/apache/commons/cli/OptionTest.java
@@ -300,6 +300,14 @@ class OptionTest {
assertNotEquals(Option.builder("test").build().hashCode(),
Option.builder("test").longOpt("long test").build().hashCode());
}
+ @Test
+ public void testProcessValue() {
+ final Option option = new Option("D", true, "Define property");
+ option.setValueSeparator('=');
+ final NullPointerException exception =
assertThrows(NullPointerException.class, () -> option.processValue(null));
+ assertTrue(exception.getMessage().contains("value"));
+ }
+
@Test
void testSerialization() throws IOException, ClassNotFoundException {
final Option option =
Option.builder("o").type(TypeHandlerTest.Instantiable.class).build();