Enable wildcard '*' support in DNS name validation
The DNS name validation process has been updated to correctly handle
wildcard '*' within domain names.
Test: TH
Change-Id: Ic8b46ac55dbf754d52e342472fd79c945a929ce8
diff --git a/src/android/net/apf/ApfV6Generator.java b/src/android/net/apf/ApfV6Generator.java
index c8618d3..bf9eab7 100644
--- a/src/android/net/apf/ApfV6Generator.java
+++ b/src/android/net/apf/ApfV6Generator.java
@@ -315,6 +315,8 @@
int i = 0;
while (i < len - 1) {
int label_len = names[i++];
+ // byte == 0xff means it is a '*' wildcard
+ if (label_len == -1) continue;
if (label_len < 1 || label_len > 63) {
throw new IllegalArgumentException(
"label len: " + label_len + " must be between 1 and 63");
diff --git a/tests/unit/src/android/net/apf/ApfV5Test.kt b/tests/unit/src/android/net/apf/ApfV5Test.kt
index 8e7e263..9536ce6 100644
--- a/tests/unit/src/android/net/apf/ApfV5Test.kt
+++ b/tests/unit/src/android/net/apf/ApfV5Test.kt
@@ -139,10 +139,15 @@
@Test
fun testValidateDnsNames() {
// '%' is a valid label character in mDNS subtype
+ // byte == 0xff means it is a '*' wildcard, which is a valid encoding.
val program = ApfV6Generator().addJumpIfPktAtR0ContainDnsQ(
byteArrayOf(1, '%'.code.toByte(), 0, 0),
1,
DROP_LABEL)
+ .addJumpIfPktAtR0ContainDnsA(
+ byteArrayOf(0xff.toByte(), 1, 'B'.code.toByte(), 0, 0),
+ DROP_LABEL
+ )
.generate()
}