Skip to content

Commit 1daf120

Browse files
authored
Fix a NullPointerException in DelegateJsonObject #3417 (#3418)
1 parent 6246edb commit 1daf120

File tree

4 files changed

+15
-2
lines changed

4 files changed

+15
-2
lines changed

src/main/java/io/lettuce/core/json/DefaultJsonParser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
*
2323
* @since 6.5
2424
* @author Tihomir Mateev
25+
* @author Steffen Kreutz
2526
*/
2627
public class DefaultJsonParser implements JsonParser {
2728

src/main/java/io/lettuce/core/json/DelegateJsonObject.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
* Implementation of the {@link DelegateJsonObject} that delegates most of its functionality to the Jackson {@link ObjectNode}.
1616
*
1717
* @author Tihomir Mateev
18+
* @author Steffen Kreutz
1819
*/
1920
class DelegateJsonObject extends DelegateJsonValue implements JsonObject {
2021

@@ -45,7 +46,7 @@ public JsonValue get(String key) {
4546
public JsonValue remove(String key) {
4647
JsonNode value = ((ObjectNode) node).remove(key);
4748

48-
return wrap(value);
49+
return value == null ? null : wrap(value);
4950
}
5051

5152
@Override

src/main/java/io/lettuce/core/json/DelegateJsonValue.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.fasterxml.jackson.core.JsonProcessingException;
1111
import com.fasterxml.jackson.databind.JsonNode;
1212
import com.fasterxml.jackson.databind.ObjectMapper;
13+
import io.lettuce.core.internal.LettuceAssert;
1314

1415
import java.nio.ByteBuffer;
1516

@@ -110,6 +111,8 @@ public <T> T toObject(Class<T> type) {
110111
}
111112

112113
static JsonValue wrap(JsonNode root) {
114+
LettuceAssert.notNull(root, "Root must not be null");
115+
113116
if (root.isObject()) {
114117
return new DelegateJsonObject(root);
115118
} else if (root.isArray()) {

src/test/java/io/lettuce/core/json/DelegateJsonObjectUnitTests.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,21 @@ void remove() {
3737
DefaultJsonParser parser = new DefaultJsonParser();
3838
DelegateJsonObject underTest = new DelegateJsonObject();
3939

40-
underTest.put("test", parser.createJsonValue("\"test\"")).put("test2", parser.createJsonValue("1")).remove("test");
40+
underTest.put("test", parser.createJsonValue("\"test\"")).put("test2", parser.createJsonValue("1"));
4141

42+
assertThat(underTest.remove("test").asString()).isEqualTo("test");
4243
assertThat(underTest.size()).isEqualTo(1);
4344
assertThat(underTest.get("test")).isNull();
4445
assertThat(underTest.get("test2").asNumber()).isEqualTo(1);
4546
}
4647

48+
@Test
49+
void removeNonExistingKey() {
50+
DelegateJsonObject underTest = new DelegateJsonObject();
51+
52+
assertThat(underTest.remove("non existing key")).isNull();
53+
}
54+
4755
@Test
4856
void isAnythingElse() {
4957
DelegateJsonObject underTest = new DelegateJsonObject();

0 commit comments

Comments
 (0)