diff --git a/library/events/json_message_event.nim b/library/events/json_message_event.nim index 2fbfb0d927..6f9dafa9f3 100644 --- a/library/events/json_message_event.nim +++ b/library/events/json_message_event.nim @@ -20,6 +20,13 @@ func fromJsonNode*( T: type JsonMessage, jsonContent: JsonNode ): Result[JsonMessage, string] = # Visit https://rfc.vac.dev/spec/14/ for further details + + # Check if required fields exist + if not jsonContent.hasKey("payload"): + return err("Missing required field in WakuMessage: payload") + if not jsonContent.hasKey("contentTopic"): + return err("Missing required field in WakuMessage: contentTopic") + ok( JsonMessage( payload: Base64String(jsonContent["payload"].getStr()), diff --git a/library/libwaku.nim b/library/libwaku.nim index 204b73d0dd..a2290a60cc 100644 --- a/library/libwaku.nim +++ b/library/libwaku.nim @@ -291,18 +291,17 @@ proc waku_relay_publish( checkLibwakuParams(ctx, callback, userData) let jwm = jsonWakuMessage.alloc() + defer: + deallocShared(jwm) var jsonMessage: JsonMessage try: let jsonContent = parseJson($jwm) jsonMessage = JsonMessage.fromJsonNode(jsonContent).valueOr: raise newException(JsonParsingError, $error) except JsonParsingError: - deallocShared(jwm) let msg = fmt"Error parsing json message: {getCurrentExceptionMsg()}" callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData) return RET_ERR - finally: - deallocShared(jwm) let wakuMessage = jsonMessage.toWakuMessage().valueOr: let msg = "Problem building the WakuMessage: " & $error