Skip to content

Commit 47ddf67

Browse files
committed
fix bitfield off-by-one encoding
1 parent b6fdb1e commit 47ddf67

4 files changed

Lines changed: 21 additions & 20 deletions

File tree

‎iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ private FixedBitfieldEncoder() {}
88

99
public static void encode(BitString builder, IntegerSet value, int bitStringLength) {
1010
for (int i = 0; i < bitStringLength; i++) {
11-
builder.writeBoolean(value.containsInt(i));
11+
builder.writeBoolean(value.containsInt(i + 1));
1212
}
1313
}
1414
}

‎iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java‎

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() {
397397

398398
String gppString = gppModel.encode();
399399
Assertions.assertEquals(
400-
"DBACOeA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.IAAA~BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao~1YNN",
400+
"DBACOeA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.IAAA~BPSG_8APSG_8AAyACAENGdCg_fA_AA_A_ABgABABAAABAB4AACACAAA.eOOOBxxxwcQ~1YNN",
401401
gppString);
402402

403403
Assertions.assertEquals(4, gppString.split("~").length);
@@ -824,12 +824,10 @@ public void testDecode9() {
824824
public void testConsistency() {
825825
GppModel fromObjectModel = new GppModel();
826826

827-
fromObjectModel.setFieldValue(
828-
TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS, Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9));
829-
fromObjectModel.setFieldValue(
830-
TcfEuV2.NAME,
831-
TcfEuV2Field.VENDOR_CONSENTS,
832-
Arrays.asList(32, 128, 81, 210, 755, 21, 173, 238));
827+
Set<Integer> purposeConsents = Set.of(1, 2, 4, 5, 6, 8, 9);
828+
fromObjectModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS, purposeConsents);
829+
Set<Integer> vendorConsents = Set.of(32, 128, 81, 210, 755, 21, 173, 238);
830+
fromObjectModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS, vendorConsents);
833831

834832
Assertions.assertEquals(
835833
fromObjectModel.getSection(TcfEuV2.NAME).encode(),
@@ -839,11 +837,9 @@ public void testConsistency() {
839837
GppModel decodedModel = new GppModel(fromObjectModel.encode());
840838

841839
Assertions.assertEquals(
842-
Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
843-
decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS));
840+
purposeConsents, decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS));
844841
Assertions.assertEquals(
845-
Set.of(21, 32, 81, 128, 173, 210, 238, 755),
846-
decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS));
842+
vendorConsents, decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS));
847843
}
848844

849845
@Test

‎iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java‎

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,13 @@ public class FixedBitfieldEncoderTest {
1313
public void testEncode1() {
1414
BitString builder = new BitString();
1515
IntegerSet set = new IntegerSet();
16-
FixedBitfieldEncoder.encode(builder, set, 2);
17-
Assertions.assertEquals("00", builder.toString());
16+
set.add(2);
17+
set.add(4);
18+
set.add(6);
19+
FixedBitfieldEncoder.encode(builder, set, 6);
20+
String encoded = builder.toString();
21+
Assertions.assertEquals("010101", encoded);
22+
Assertions.assertEquals(set, decode(encoded));
1823
}
1924

2025
@Test
@@ -29,7 +34,7 @@ public void testEncode2() {
2934
public void testEncode3() {
3035
BitString builder = new BitString();
3136
IntegerSet set = new IntegerSet();
32-
set.add(0);
37+
set.add(1);
3338
FixedBitfieldEncoder.encode(builder, set, 1);
3439
Assertions.assertEquals("1", builder.toString());
3540
}
@@ -48,24 +53,24 @@ public void testEncode5() {
4853
IntegerSet set = new IntegerSet();
4954
set.addInt(1);
5055
FixedBitfieldEncoder.encode(builder, set, 2);
51-
Assertions.assertEquals("01", builder.toString());
56+
Assertions.assertEquals("10", builder.toString());
5257
}
5358

5459
@Test
5560
public void testEncode6() {
5661
BitString builder = new BitString();
5762
IntegerSet set = new IntegerSet();
58-
set.addInt(0);
63+
set.addInt(2);
5964
FixedBitfieldEncoder.encode(builder, set, 2);
60-
Assertions.assertEquals("10", builder.toString());
65+
Assertions.assertEquals("01", builder.toString());
6166
}
6267

6368
@Test
6469
public void testEncode7() {
6570
BitString builder = new BitString();
6671
IntegerSet set = new IntegerSet();
67-
set.addInt(0);
6872
set.addInt(1);
73+
set.addInt(2);
6974
FixedBitfieldEncoder.encode(builder, set, 2);
7075
Assertions.assertEquals("11", builder.toString());
7176
}

‎iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public void testEncode2() {
6666
ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant());
6767

6868
Assertions.assertEquals(
69-
"BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao", tcfCaV1.encode());
69+
"BPSG_8APSG_8AAyACAENGdCg_fA_AA_A_ABgABABAAABAB4AACACAAA.eOOOBxxxwcQ", tcfCaV1.encode());
7070
}
7171

7272
@Test

0 commit comments

Comments
 (0)