From 0d6d9361ac5abed30b1c026c7cb49eb0b74394da Mon Sep 17 00:00:00 2001 From: Viktor Kryshtal <33136089+Lightwood13@users.noreply.github.com> Date: Wed, 15 Jul 2026 14:44:13 +0300 Subject: [PATCH] Cookie sync: Make SetuidHandler bidder lookup case insensitive (#4557) --- .../prebid/server/handler/SetuidHandler.java | 6 ++++- .../server/handler/SetuidHandlerTest.java | 23 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/prebid/server/handler/SetuidHandler.java b/src/main/java/org/prebid/server/handler/SetuidHandler.java index 2a9d5f72836..fee674c7a7d 100644 --- a/src/main/java/org/prebid/server/handler/SetuidHandler.java +++ b/src/main/java/org/prebid/server/handler/SetuidHandler.java @@ -9,6 +9,7 @@ import io.vertx.core.http.HttpServerRequest; import io.vertx.core.http.HttpServerResponse; import io.vertx.ext.web.RoutingContext; +import org.apache.commons.collections4.map.CaseInsensitiveMap; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -117,7 +118,10 @@ private static Map collectUsersyncers(BidderCatalog bidderCa validateUsersyncersDuplicates(bidderCatalog); return bidderCatalog.usersyncReadyBidders().stream() .collect(Collectors.toMap( - Function.identity(), bidder -> bidderCatalog.usersyncerByName(bidder).orElseThrow())); + Function.identity(), + bidder -> bidderCatalog.usersyncerByName(bidder).orElseThrow(), + (_, b) -> b, + CaseInsensitiveMap::new)); } private static void validateUsersyncersDuplicates(BidderCatalog bidderCatalog) { diff --git a/src/test/java/org/prebid/server/handler/SetuidHandlerTest.java b/src/test/java/org/prebid/server/handler/SetuidHandlerTest.java index c31326f2109..08e983f67c8 100644 --- a/src/test/java/org/prebid/server/handler/SetuidHandlerTest.java +++ b/src/test/java/org/prebid/server/handler/SetuidHandlerTest.java @@ -494,6 +494,29 @@ public void shouldRespondWithCookieFromRequestParamWhenBidderAndCookieFamilyAreD verify(httpResponse).addCookie(equalToUidsCookie(updatedUidsCookie)); } + @Test + public void shouldRespondWithCookieFromRequestParamWhenBidderCaseInRequestIsDifferent() + throws IOException { + + // given + final UidsCookie uidsCookie = emptyUidsCookie(); + final UidsCookie updatedUidsCookie = uidsCookie.updateUid(ADNXS, "J5VLCWQP-26-CWFT"); + + given(uidsCookieService.parseFromRequest(any(RoutingContext.class))) + .willReturn(uidsCookie); + given(uidsCookieService.updateUidsCookie(uidsCookie, ADNXS, "J5VLCWQP-26-CWFT")) + .willReturn(updated(updatedUidsCookie)); + + given(httpRequest.getParam("bidder")).willReturn("ApPnExUs"); + given(httpRequest.getParam("uid")).willReturn("J5VLCWQP-26-CWFT"); + + // when + setuidHandler.handle(routingContext); + + // then + verify(httpResponse).addCookie(equalToUidsCookie(updatedUidsCookie)); + } + @Test public void shouldSendPixelWhenFParamIsEqualToIWhenTypeIsIframe() throws JsonProcessingException { // given