Skip to content

Commit cb2fa2c

Browse files
author
MananRPatel
committed
Yahoo Ads: treat a non-integer gpp_sid element as malformed
resolveGppSid now promotes regs.ext.gpp_sid only when every element is an integer. If any element is non-integral the whole array is left in regs.ext untouched rather than promoting a filtered subset, matching the gpp and coppa handling so no value is silently dropped. Adds a test for the mixed-array case.
1 parent 1e55870 commit cb2fa2c

2 files changed

Lines changed: 35 additions & 4 deletions

File tree

src/main/java/org/prebid/server/bidder/yahooads/YahooAdsBidder.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -208,11 +208,12 @@ private static List<Integer> resolveGppSid(Regs regs, ExtRegs ext) {
208208
return regs.getGppSid();
209209
}
210210
final List<Integer> sids = new ArrayList<>(node.size());
211-
node.forEach(elem -> {
212-
if (elem.isIntegralNumber()) {
213-
sids.add(elem.asInt());
211+
for (final JsonNode elem : node) {
212+
if (!elem.isIntegralNumber()) {
213+
return regs.getGppSid();
214214
}
215-
});
215+
sids.add(elem.asInt());
216+
}
216217
return sids.isEmpty() ? regs.getGppSid() : sids;
217218
}
218219

src/test/java/org/prebid/server/bidder/yahooads/YahooAdsBidderTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.prebid.server.bidder.yahooads;
22

33
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.JsonNode;
45
import com.fasterxml.jackson.databind.node.ArrayNode;
56
import com.fasterxml.jackson.databind.node.IntNode;
67
import com.fasterxml.jackson.databind.node.TextNode;
@@ -554,6 +555,35 @@ public void makeHttpRequestsShouldLeaveMalformedExtValueInExtWhenSiblingFieldIsP
554555
assertThat(regs.getExt().getProperty("gpp").asInt()).isEqualTo(99);
555556
}
556557

558+
@Test
559+
public void makeHttpRequestsShouldNotPromoteGppSidWhenArrayHasNonIntegerElement() {
560+
final BidRequest bidRequest = givenBidRequest(identity(),
561+
requestBuilder -> requestBuilder.regs(Regs.builder()
562+
.ext(ExtRegs.of(null, null, null, null))
563+
.build()).device(Device.builder().ua("UA").build()));
564+
final ArrayNode mixed = mapper.createArrayNode();
565+
mixed.add(7);
566+
mixed.add("foo");
567+
mixed.add(8);
568+
bidRequest.getRegs().getExt().addProperty("gpp_sid", mixed);
569+
570+
// when
571+
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
572+
573+
// then
574+
assertThat(result.getErrors()).isEmpty();
575+
final Regs regs = result.getValue().getFirst().getPayload().getRegs();
576+
// whole array treated as malformed: not promoted, left in ext untouched (nothing dropped)
577+
assertThat(regs.getGppSid()).isNull();
578+
assertThat(regs.getExt()).isNotNull();
579+
final JsonNode keptSid = regs.getExt().getProperty("gpp_sid");
580+
assertThat(keptSid.isArray()).isTrue();
581+
assertThat(keptSid).hasSize(3);
582+
assertThat(keptSid.get(0).asInt()).isEqualTo(7);
583+
assertThat(keptSid.get(1).asText()).isEqualTo("foo");
584+
assertThat(keptSid.get(2).asInt()).isEqualTo(8);
585+
}
586+
557587
@Test
558588
public void makeHttpRequestsShouldShortCircuitWhenRegsHasNoExt() {
559589
final BidRequest bidRequest = givenBidRequest(identity(),

0 commit comments

Comments
 (0)