From 01f35f27a377d4bd615193fe46764705405baf44 Mon Sep 17 00:00:00 2001 From: Florian Meinicke Date: Fri, 11 Feb 2022 16:13:49 +0100 Subject: [PATCH] Fix parsing of TXT records if value contains '=' TXT record values can also contain equals signs. The current implementation would consider any record where the value contains an equals sign as an empty record. --- avahicore.cpp | 8 ++++---- bonjour.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/avahicore.cpp b/avahicore.cpp index 3f47013..3c2f8c0 100644 --- a/avahicore.cpp +++ b/avahicore.cpp @@ -183,11 +183,11 @@ public: while (txt) // get txt records { QByteArray avahiText((const char *)txt->text, txt->size); - QList pair = avahiText.split('='); - if (pair.size() == 2) - zcs->m_txt[pair.at(0)] = pair.at(1); + const size_t pos = avahiText.indexOf('='); + if (pos < 0) + zcs->m_txt[avahiText] = ""; else - zcs->m_txt[pair.at(0)] = ""; + zcs->m_txt[avahiText.left(pos)] = avahiText.mid(pos + 1, -1); txt = txt->next; } ref->pub->services.insert(key, zcs); diff --git a/bonjour.cpp b/bonjour.cpp index a05b0a7..5201e38 100644 --- a/bonjour.cpp +++ b/bonjour.cpp @@ -167,11 +167,11 @@ void DNSSD_API QZeroConfPrivate::resolverCallback(DNSServiceRef, DNSServiceFlags recLen = txtRecord[0]; txtRecord++; QByteArray avahiText(reinterpret_cast(txtRecord), recLen); - QList pair = avahiText.split('='); - if (pair.size() == 2) - resolver->zcs->m_txt[pair.at(0)] = pair.at(1); + const size_t pos = avahiText.indexOf('='); + if (pos < 0) + resolver->zcs->m_txt[avahiText] = ""; else - resolver->zcs->m_txt[pair.at(0)] = ""; + resolver->zcs->m_txt[avahiText.left(pos)] = avahiText.mid(pos + 1, -1); txtLen-= recLen + 1; txtRecord+= recLen;