From 33eb0a833ec1867fc368f116230ea7bc42733e71 Mon Sep 17 00:00:00 2001 From: osulzhenko Date: Mon, 6 Apr 2026 18:29:32 +0300 Subject: [PATCH 1/2] IX adapter: Handle missing interstitial formats in IX adapter --- .../org/prebid/server/bidder/ix/IxBidder.java | 11 +++++--- .../prebid/server/bidder/ix/IxBidderTest.java | 26 +++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/ix/IxBidder.java b/src/main/java/org/prebid/server/bidder/ix/IxBidder.java index 5770772c1bd..6f8261aa554 100644 --- a/src/main/java/org/prebid/server/bidder/ix/IxBidder.java +++ b/src/main/java/org/prebid/server/bidder/ix/IxBidder.java @@ -19,6 +19,7 @@ import com.iab.openrtb.response.Response; import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.ix.model.response.IxBidResponse; @@ -142,16 +143,18 @@ private UpdateResult modifyImpBanner(Banner banner) { if (banner == null) { return UpdateResult.unaltered(null); } - - final List formats = banner.getFormat(); + final List formats = ListUtils.emptyIfNull(banner.getFormat()).stream() + .filter(Objects::nonNull) + .toList(); final Integer w = banner.getW(); final Integer h = banner.getH(); + final boolean hasNoFormats = CollectionUtils.isEmpty(formats); - if (CollectionUtils.isEmpty(formats) && h != null && w != null) { + if (hasNoFormats && h != null && w != null) { final List newFormats = Collections.singletonList(Format.builder().w(w).h(h).build()); final Banner modifiedBanner = banner.toBuilder().format(newFormats).build(); return UpdateResult.updated(modifiedBanner); - } else if (formats.size() == 1) { + } else if (!hasNoFormats && formats.size() == 1) { final Format format = formats.getFirst(); final Banner modifiedBanner = banner.toBuilder().w(format.getW()).h(format.getH()).build(); return UpdateResult.updated(modifiedBanner); diff --git a/src/test/java/org/prebid/server/bidder/ix/IxBidderTest.java b/src/test/java/org/prebid/server/bidder/ix/IxBidderTest.java index 051077ab03e..f1138e83133 100644 --- a/src/test/java/org/prebid/server/bidder/ix/IxBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/ix/IxBidderTest.java @@ -148,6 +148,32 @@ public void makeHttpRequestsShouldSetImpBannerFormatsToFormatWithWidthAndHeightI .containsExactly(expectedBanner); } + @Test + public void makeHttpRequestsShouldSetImpBannerFormatsToFormatWithWidthAndHeightIfFormatsAreNullList() { + // given + final BidRequest bidRequest = givenBidRequest( + impBuilder -> impBuilder + .banner(Banner.builder().w(1).h(2).format(null).build()) + .ext(givenImpExt(null, null))); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getErrors()).isEmpty(); + final Banner expectedBanner = Banner.builder() + .w(1) + .h(2) + .format(singletonList(Format.builder().w(1).h(2).build())) + .build(); + + assertThat(result.getValue()) + .extracting(HttpRequest::getPayload) + .flatExtracting(BidRequest::getImp) + .extracting(Imp::getBanner) + .containsExactly(expectedBanner); + } + @Test public void makeHttpRequestsShouldSetImpBannerWidthAndHeightIfTheyAreAbsentAndBannerHasOnlyOneFormat() { // given From 979ae601da28fdee6cadd872c3c3d7c268bf8f29 Mon Sep 17 00:00:00 2001 From: osulzhenko Date: Wed, 8 Apr 2026 20:37:45 +0300 Subject: [PATCH 2/2] Update after review --- src/main/java/org/prebid/server/bidder/ix/IxBidder.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/ix/IxBidder.java b/src/main/java/org/prebid/server/bidder/ix/IxBidder.java index 6f8261aa554..fcfc8a729a3 100644 --- a/src/main/java/org/prebid/server/bidder/ix/IxBidder.java +++ b/src/main/java/org/prebid/server/bidder/ix/IxBidder.java @@ -19,7 +19,6 @@ import com.iab.openrtb.response.Response; import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.ix.model.response.IxBidResponse; @@ -143,9 +142,8 @@ private UpdateResult modifyImpBanner(Banner banner) { if (banner == null) { return UpdateResult.unaltered(null); } - final List formats = ListUtils.emptyIfNull(banner.getFormat()).stream() - .filter(Objects::nonNull) - .toList(); + + final List formats = banner.getFormat(); final Integer w = banner.getW(); final Integer h = banner.getH(); final boolean hasNoFormats = CollectionUtils.isEmpty(formats);