Android 14 fails to parse NSEC records for custom service type in version 0.128.0
Version: 0.128.0
I register a custom service in python like so:
info = zeroconf.ServiceInfo(
"_green._tcp.local.",
f"{service_name}._green._tcp.local.",
port=port,
properties=desc,
server=f"{hostname}.local.",
)
ZC.register_service(info)
android 14 throws this error whenever I try to discover it:
2023-12-06 15:28:47.651 1674-2241 serviceDiscovery pid-1674 E [MdnsMultinetworkSocketClient] ERROR Failed to read NSEC record from mDNS response.: Failed to read NSEC record from mDNS response.
android.net.connectivity.com.android.server.connectivity.mdns.MdnsPacket$ParseException: Failed to read NSEC record from mDNS response.
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsPacket.parseRecord(MdnsPacket.java:193)
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsPacket.parseRecords(MdnsPacket.java:115)
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsPacket.parseRecordsSection(MdnsPacket.java:101)
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsResponseDecoder.parseResponse(MdnsResponseDecoder.java:100)
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsMultinetworkSocketClient.processResponsePacket(MdnsMultinetworkSocketClient.java:239)
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsMultinetworkSocketClient.-$$Nest$mprocessResponsePacket(MdnsMultinetworkSocketClient.java:0)
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsMultinetworkSocketClient$ReadPacketHandler.handlePacket(MdnsMultinetworkSocketClient.java:151)
at android.net.connectivity.com.android.server.connectivity.mdns.MulticastPacketReader.handlePacket(MulticastPacketReader.java:101)
at android.net.connectivity.com.android.server.connectivity.mdns.MulticastPacketReader.handlePacket(MulticastPacketReader.java:34)
at android.net.connectivity.com.android.net.module.util.FdEventsReader.handleInput(FdEventsReader.java:272)
at android.net.connectivity.com.android.net.module.util.FdEventsReader.lambda$createAndRegisterFd$0(FdEventsReader.java:228)
at android.net.connectivity.com.android.net.module.util.FdEventsReader.$r8$lambda$xh0yZpbdLvlMgmz3uMcpPMcWNvc(FdEventsReader.java:0)
at android.net.connectivity.com.android.net.module.util.FdEventsReader$$ExternalSyntheticLambda0.onFileDescriptorEvents(R8$$SyntheticClass:0)
at android.os.MessageQueue.dispatchEvents(MessageQueue.java:293)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:335)
at android.os.Looper.loopOnce(Looper.java:162)
at android.os.Looper.loop(Looper.java:294)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: java.io.IOException: Invalid bitmap length: 0
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsNsecRecord.readTypes(MdnsNsecRecord.java:82)
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsNsecRecord.readData(MdnsNsecRecord.java:66)
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsRecord.<init>(MdnsRecord.java:89)
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsNsecRecord.<init>(MdnsNsecRecord.java:43)
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsPacket.parseRecord(MdnsPacket.java:191)
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsPacket.parseRecords(MdnsPacket.java:115)
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsPacket.parseRecordsSection(MdnsPacket.java:101)
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsResponseDecoder.parseResponse(MdnsResponseDecoder.java:100)
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsMultinetworkSocketClient.processResponsePacket(MdnsMultinetworkSocketClient.java:239)
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsMultinetworkSocketClient.-$$Nest$mprocessResponsePacket(MdnsMultinetworkSocketClient.java:0)
at android.net.connectivity.com.android.server.connectivity.mdns.MdnsMultinetworkSocketClient$ReadPacketHandler.handlePacket(MdnsMultinetworkSocketClient.java:151)
at android.net.connectivity.com.android.server.connectivity.mdns.MulticastPacketReader.handlePacket(MulticastPacketReader.java:101)
at android.net.connectivity.com.android.server.connectivity.mdns.MulticastPacketReader.handlePacket(MulticastPacketReader.java:34)
at android.net.connectivity.com.android.net.module.util.FdEventsReader.handleInput(FdEventsReader.java:272)
at android.net.connectivity.com.android.net.module.util.FdEventsReader.lambda$createAndRegisterFd$0(FdEventsReader.java:228)
at android.net.connectivity.com.android.net.module.util.FdEventsReader.$r8$lambda$xh0yZpbdLvlMgmz3uMcpPMcWNvc(FdEventsReader.java:0)
at android.net.connectivity.com.android.net.module.util.FdEventsReader$$ExternalSyntheticLambda0.onFileDescriptorEvents(R8$$SyntheticClass:0)
at android.os.MessageQueue.dispatchEvents(MessageQueue.java:293)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:335)
at android.os.Looper.loopOnce(Looper.java:162)
at android.os.Looper.loop(Looper.java:294)
at android.os.HandlerThread.run(HandlerThread.java:67)
I searched back in the releases to find a version prior to NSEC support (v0.36.1) and when I use that version, the error goes away and my service is discoverable.