Skip to content

Commit b849cbb

Browse files
authored
fix: handle Null Dereference in UnitsConverter (#5460)
1 parent 3fe1de0 commit b849cbb

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

.inferconfig

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
"report-block-list-path-regex": [
33
"src/main/java/com/thealgorithms/ciphers/a5/CompositeLFSR.java",
44
"src/main/java/com/thealgorithms/conversions/RomanToInteger.java",
5-
"src/main/java/com/thealgorithms/conversions/UnitsConverter.java",
65
"src/main/java/com/thealgorithms/datastructures/crdt/GCounter.java",
76
"src/main/java/com/thealgorithms/datastructures/crdt/PNCounter.java",
87
"src/main/java/com/thealgorithms/datastructures/graphs/KahnsAlgorithm.java",

src/main/java/com/thealgorithms/conversions/UnitsConverter.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.HashMap;
44
import java.util.HashSet;
55
import java.util.Map;
6+
import java.util.NoSuchElementException;
67
import java.util.Set;
78
import org.apache.commons.lang3.tuple.Pair;
89

@@ -77,7 +78,7 @@ public double convert(final String inputUnit, final String outputUnit, final dou
7778
throw new IllegalArgumentException("inputUnit must be different from outputUnit.");
7879
}
7980
final var conversionKey = Pair.of(inputUnit, outputUnit);
80-
return conversions.get(conversionKey).convert(value);
81+
return conversions.computeIfAbsent(conversionKey, k -> { throw new NoSuchElementException("No converter for: " + k); }).convert(value);
8182
}
8283

8384
public Set<String> availableUnits() {

src/test/java/com/thealgorithms/conversions/UnitsConverterTest.java

+9
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static org.junit.jupiter.api.Assertions.assertThrows;
55

66
import java.util.Map;
7+
import java.util.NoSuchElementException;
78
import org.apache.commons.lang3.tuple.Pair;
89
import org.junit.jupiter.api.Test;
910

@@ -15,4 +16,12 @@ void testConvertThrowsForSameUnits() {
1516
assertThrows(IllegalArgumentException.class, () -> someConverter.convert("A", "A", 20.0));
1617
assertThrows(IllegalArgumentException.class, () -> someConverter.convert("B", "B", 20.0));
1718
}
19+
20+
@Test
21+
void testConvertThrowsForUnknownUnits() {
22+
final UnitsConverter someConverter = new UnitsConverter(Map.ofEntries(entry(Pair.of("A", "B"), new AffineConverter(10.0, -20.0))));
23+
assertThrows(NoSuchElementException.class, () -> someConverter.convert("A", "X", 20.0));
24+
assertThrows(NoSuchElementException.class, () -> someConverter.convert("X", "A", 20.0));
25+
assertThrows(NoSuchElementException.class, () -> someConverter.convert("X", "Y", 20.0));
26+
}
1827
}

0 commit comments

Comments
 (0)