From da1e08945316ddf461a5fb6cff7735bb8039e3db Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 21 Jan 2026 13:27:56 +0000 Subject: [PATCH 1/4] Initial plan From 172bc0bcfd7079751eb149399e46d610361d305b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 21 Jan 2026 13:32:56 +0000 Subject: [PATCH 2/4] fix: handle NumberFormatException in ClassifiedListingEventDeserializer Co-authored-by: tcheeric <6341500+tcheeric@users.noreply.github.com> --- .../ClassifiedListingEventDeserializer.java | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/nostr-java-event/src/main/java/nostr/event/json/deserializer/ClassifiedListingEventDeserializer.java b/nostr-java-event/src/main/java/nostr/event/json/deserializer/ClassifiedListingEventDeserializer.java index 377137e9..522bff06 100644 --- a/nostr-java-event/src/main/java/nostr/event/json/deserializer/ClassifiedListingEventDeserializer.java +++ b/nostr-java-event/src/main/java/nostr/event/json/deserializer/ClassifiedListingEventDeserializer.java @@ -41,16 +41,21 @@ public ClassifiedListingEvent deserialize(JsonParser jsonParser, Deserialization generalMap.put(key, classifiedListingEventNode.get(key).asText()); } - ClassifiedListingEvent classifiedListingEvent = - new ClassifiedListingEvent( - new PublicKey(generalMap.get("pubkey")), - Kind.valueOfStrict(Integer.parseInt(generalMap.get("kind"))), - baseTags, - generalMap.get("content")); - classifiedListingEvent.setId(generalMap.get("id")); - classifiedListingEvent.setCreatedAt(Long.valueOf(generalMap.get("created_at"))); - classifiedListingEvent.setSignature(Signature.fromString(generalMap.get("sig"))); + try { + ClassifiedListingEvent classifiedListingEvent = + new ClassifiedListingEvent( + new PublicKey(generalMap.get("pubkey")), + Kind.valueOfStrict(Integer.parseInt(generalMap.get("kind"))), + baseTags, + generalMap.get("content")); + classifiedListingEvent.setId(generalMap.get("id")); + classifiedListingEvent.setCreatedAt(Long.valueOf(generalMap.get("created_at"))); + classifiedListingEvent.setSignature(Signature.fromString(generalMap.get("sig"))); - return classifiedListingEvent; + return classifiedListingEvent; + } catch (NumberFormatException ex) { + throw new IOException( + "Failed to parse numeric field in ClassifiedListingEvent: " + ex.getMessage(), ex); + } } } From 392bc53cafc8f9676cfdb95fe30129c7ebcd3bc9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 21 Jan 2026 13:37:24 +0000 Subject: [PATCH 3/4] refactor: improve error message specificity in ClassifiedListingEventDeserializer Co-authored-by: tcheeric <6341500+tcheeric@users.noreply.github.com> --- .../ClassifiedListingEventDeserializer.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/nostr-java-event/src/main/java/nostr/event/json/deserializer/ClassifiedListingEventDeserializer.java b/nostr-java-event/src/main/java/nostr/event/json/deserializer/ClassifiedListingEventDeserializer.java index 522bff06..04a4eed9 100644 --- a/nostr-java-event/src/main/java/nostr/event/json/deserializer/ClassifiedListingEventDeserializer.java +++ b/nostr-java-event/src/main/java/nostr/event/json/deserializer/ClassifiedListingEventDeserializer.java @@ -41,21 +41,30 @@ public ClassifiedListingEvent deserialize(JsonParser jsonParser, Deserialization generalMap.put(key, classifiedListingEventNode.get(key).asText()); } + String kindValue = generalMap.get("kind"); + String createdAtValue = generalMap.get("created_at"); + try { + int kindInt = Integer.parseInt(kindValue); + long createdAt = Long.parseLong(createdAtValue); + ClassifiedListingEvent classifiedListingEvent = new ClassifiedListingEvent( new PublicKey(generalMap.get("pubkey")), - Kind.valueOfStrict(Integer.parseInt(generalMap.get("kind"))), + Kind.valueOfStrict(kindInt), baseTags, generalMap.get("content")); classifiedListingEvent.setId(generalMap.get("id")); - classifiedListingEvent.setCreatedAt(Long.valueOf(generalMap.get("created_at"))); + classifiedListingEvent.setCreatedAt(createdAt); classifiedListingEvent.setSignature(Signature.fromString(generalMap.get("sig"))); return classifiedListingEvent; } catch (NumberFormatException ex) { throw new IOException( - "Failed to parse numeric field in ClassifiedListingEvent: " + ex.getMessage(), ex); + String.format( + "Failed to parse numeric field in ClassifiedListingEvent - kind='%s', created_at='%s': %s", + kindValue, createdAtValue, ex.getMessage()), + ex); } } } From 95f0d5131e1cf0c8a5772097b8135adf2b00b61b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 21 Jan 2026 13:38:44 +0000 Subject: [PATCH 4/4] fix: add null checks for required fields in ClassifiedListingEventDeserializer Co-authored-by: tcheeric <6341500+tcheeric@users.noreply.github.com> --- .../deserializer/ClassifiedListingEventDeserializer.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/nostr-java-event/src/main/java/nostr/event/json/deserializer/ClassifiedListingEventDeserializer.java b/nostr-java-event/src/main/java/nostr/event/json/deserializer/ClassifiedListingEventDeserializer.java index 04a4eed9..ee639bfb 100644 --- a/nostr-java-event/src/main/java/nostr/event/json/deserializer/ClassifiedListingEventDeserializer.java +++ b/nostr-java-event/src/main/java/nostr/event/json/deserializer/ClassifiedListingEventDeserializer.java @@ -45,6 +45,13 @@ public ClassifiedListingEvent deserialize(JsonParser jsonParser, Deserialization String createdAtValue = generalMap.get("created_at"); try { + if (kindValue == null) { + throw new IOException("Missing required field 'kind' in ClassifiedListingEvent"); + } + if (createdAtValue == null) { + throw new IOException("Missing required field 'created_at' in ClassifiedListingEvent"); + } + int kindInt = Integer.parseInt(kindValue); long createdAt = Long.parseLong(createdAtValue);