Use compression for mDNS NSEC record data
Although RFC3845 2.1.1 specifies that NSEC records should not use
compression for the Next DomainName field, RFC6762 18.14 specifies that
compression should also be used for NSEC RDATA. The legacy mDNS
implementation does use compression for that field.
Bug: 241738458
Test: atest
Change-Id: I9cd2b8618b01bb569a7f1d13dc3bfd09a0433300
diff --git a/service/mdns/com/android/server/connectivity/mdns/MdnsNsecRecord.java b/service/mdns/com/android/server/connectivity/mdns/MdnsNsecRecord.java
index 57c3c03..06fdd5e 100644
--- a/service/mdns/com/android/server/connectivity/mdns/MdnsNsecRecord.java
+++ b/service/mdns/com/android/server/connectivity/mdns/MdnsNsecRecord.java
@@ -96,8 +96,9 @@
@Override
protected void writeData(MdnsPacketWriter writer) throws IOException {
- // No compression as per RFC3845 2.1.1
- writer.writeLabelsNoCompression(mNextDomain);
+ // Standard NSEC records should use no compression for the Next Domain Name field as per
+ // RFC3845 2.1.1, but for mDNS RFC6762 18.14 specifies that compression should be used.
+ writer.writeLabels(mNextDomain);
// type bitmaps: RFC3845 2.1.2
int typesBlockStart = 0;
diff --git a/tests/unit/java/com/android/server/connectivity/mdns/MdnsRecordTests.java b/tests/unit/java/com/android/server/connectivity/mdns/MdnsRecordTests.java
index 7d800d8..55c2846 100644
--- a/tests/unit/java/com/android/server/connectivity/mdns/MdnsRecordTests.java
+++ b/tests/unit/java/com/android/server/connectivity/mdns/MdnsRecordTests.java
@@ -281,9 +281,9 @@
// TTL 0x0000003c (60 secs)
+ "0000003C"
// Data length
- + "003C"
- // nextdomain.android.com
- + "0A6E657874646F6D61696E07616E64726F696403636F6D00"
+ + "0031"
+ // nextdomain.android.com, with compression for android.com
+ + "0A6E657874646F6D61696EC007"
// Type bitmaps: window block 0x00, bitmap length 0x05,
// bits 16 (TXT) and 33 (SRV) set: 0x0000800040
+ "00050000800040"