From b3e4a3aa33fea78af4b6b66e4cc9fc1ffd8f2c63 Mon Sep 17 00:00:00 2001 From: pkaczmarek Date: Thu, 17 Apr 2025 09:09:19 +0200 Subject: [PATCH 1/2] Pubmatic: adapter seems to crash occasionally on invalid native ads --- .../java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java b/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java index 3072091d198..09e43473dfa 100644 --- a/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java +++ b/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java @@ -596,7 +596,7 @@ private String resolveNativeAdm(String adm, List bidderErrors) { } final JsonNode nativeNode = admNode.get("native"); - if (!nativeNode.isMissingNode()) { + if (nativeNode != null && !nativeNode.isMissingNode()) { return nativeNode.toString(); } From 7610d7be2e65bc97ada227ddde4a9877e6eef233 Mon Sep 17 00:00:00 2001 From: pkaczmarek Date: Tue, 22 Apr 2025 14:54:07 +0200 Subject: [PATCH 2/2] add test --- .../bidder/pubmatic/PubmaticBidderTest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/test/java/org/prebid/server/bidder/pubmatic/PubmaticBidderTest.java b/src/test/java/org/prebid/server/bidder/pubmatic/PubmaticBidderTest.java index 58f5b4d5a02..b44b7d4768d 100644 --- a/src/test/java/org/prebid/server/bidder/pubmatic/PubmaticBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/pubmatic/PubmaticBidderTest.java @@ -1316,6 +1316,28 @@ public void makeBidderResponseShouldReturnFledgeAuctionConfig() throws JsonProce assertThat(result.getIgi()).containsExactly(igi); } + @Test + public void makeBidderResponseShouldNotModifyAdmWhenNativeNodeIsNull() throws JsonProcessingException { + // given + final ObjectNode admNode = mapper.createObjectNode().put("otherField", "value"); + final BidderCall httpCall = givenHttpCall( + mapper.writeValueAsString( + givenBidResponse(bidBuilder -> bidBuilder.impid("123") + .adm(admNode.toString()) + .ext(mapper.valueToTree( + PubmaticBidExt.of(2, null, 12, null)))))); + + // when + final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getBids()) + .extracting(BidderBid::getBid) + .extracting(Bid::getAdm) + .containsExactly(admNode.toString()); + } + @Test public void makeBidsShouldFail() throws JsonProcessingException { //given