Skip to content

Commit ff678b0

Browse files
committed
[CLI-349] DefaultParser.parse() throws NullPointerException when options
parameter is null - Fail faster using Objects.requireNonNull()
1 parent b2e1457 commit ff678b0

3 files changed

Lines changed: 9 additions & 1 deletion

File tree

src/changes/changes.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
<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>
3636
<action type="fix" dev="ggregory" due-to="Arnout Engelen">Deprecate PatternOptionBuilder.PatternOptionBuilder().</action>
3737
<action type="fix" issue="CLI-341" dev="ggregory" due-to="Ruiqi Dong, Gary Gregory">HelpFormatter infinite loop with 0 width input.</action>
38+
<action type="fix" issue="CLI-349" dev="ggregory" due-to="Leo Fernandes, Gary Gregory">DefaultParser.parse() throws NullPointerException when options parameter is null.</action>
3839
<!-- ADD -->
3940
<action type="add" issue="CLI-339" dev="ggregory" due-to="Claude Warren, Gary Gregory">Help formatter extension in the new package #314.</action>
4041
<action type="add" dev="ggregory" due-to="Gary Gregory">CommandLine.Builder implements Supplier&lt;CommandLine&gt;.</action>

src/main/java/org/apache/commons/cli/DefaultParser.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ Licensed to the Apache Software Foundation (ASF) under one or more
2020
import java.util.ArrayList;
2121
import java.util.Enumeration;
2222
import java.util.List;
23+
import java.util.Objects;
2324
import java.util.Properties;
2425
import java.util.function.Consumer;
2526
import java.util.function.Supplier;
@@ -740,7 +741,7 @@ private boolean isShortOption(final String token) {
740741
*/
741742
public CommandLine parse(final Options options, final Properties properties, final NonOptionAction nonOptionAction, final String... arguments)
742743
throws ParseException {
743-
this.options = options;
744+
this.options = Objects.requireNonNull(options, "options");
744745
this.nonOptionAction = nonOptionAction;
745746
skipParsing = false;
746747
currentOption = null;

src/test/java/org/apache/commons/cli/DefaultParserTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,12 @@ void testParameterized(final String testName, final CommandLineParser parser, fi
394394
assertEquals(expected, cl.getOptionValue(option), message);
395395
}
396396

397+
@Test
398+
void testParseNullOption() throws ParseException {
399+
// Edge case
400+
assertThrows(NullPointerException.class, () -> new DefaultParser().parse(null, null, DefaultParser.NonOptionAction.IGNORE, "-a"));
401+
}
402+
397403
@Override
398404
@Test
399405
@Disabled("Test case handled in the parameterized tests as \"DEFAULT behavior\"")

0 commit comments

Comments
 (0)