From de7207840a56a00feeb3e3c9d5942a49a7adb1c4 Mon Sep 17 00:00:00 2001 From: KirillPamPam Date: Mon, 5 Feb 2024 18:48:47 +0400 Subject: [PATCH] Fix NPE during json parsing (#414) --- .../dshackle/upstream/rpcclient/ResponseParser.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/ResponseParser.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/ResponseParser.kt index 489d47a3..15ee04e7 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/ResponseParser.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/ResponseParser.kt @@ -52,12 +52,15 @@ abstract class ResponseParser { ) } while (parser.nextToken() != JsonToken.END_OBJECT) { - val field = parser.currentName + val field = parser.currentName ?: break state = process(parser, json, field, state) } } catch (e: JsonParseException) { log.warn("Failed to parse JSON from upstream: ${e.message}") } + if (state.error != null && state.id == null) { + state = state.copy(id = JsonRpcResponse.NumberId(0)) + } if (state.isReady) { return state } @@ -161,7 +164,7 @@ abstract class ResponseParser { val field = parser.currentName() if (field == "code" && parser.currentToken == JsonToken.VALUE_NUMBER_INT) { code = parser.intValue - } else if (field == "message" && parser.currentToken == JsonToken.VALUE_STRING) { + } else if ((field == "message" || field == "error") && parser.currentToken == JsonToken.VALUE_STRING) { message = parser.valueAsString } else if (field == "data") { when (val value = parser.nextToken()) {