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()
     }