From 31f92915ef254bbdb702e1de0de72bdeff831ab6 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Fri, 20 Aug 2010 12:59:07 +0000 Subject: implement and test quoted character handling --- src/QXmppUtils.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/QXmppUtils.cpp') diff --git a/src/QXmppUtils.cpp b/src/QXmppUtils.cpp index ec84e8c5..a6e6de74 100644 --- a/src/QXmppUtils.cpp +++ b/src/QXmppUtils.cpp @@ -303,12 +303,19 @@ QMap parseDigestMd5(const QByteArray &ba) // skip opening quote pos++; int endPos = ba.indexOf('"', pos); + // skip quoted quotes + while (endPos >= 0 && ba.at(endPos - 1) == '\\') + endPos = ba.indexOf('"', endPos + 1); if (endPos < 0) { qWarning("Unfinished quoted string"); return map; } - map[key] = ba.mid(pos, endPos - pos); + // unquote + QByteArray value = ba.mid(pos, endPos - pos); + value.replace("\\\"", "\""); + value.replace("\\\\", "\\"); + map[key] = value; // skip closing quote and comma startIndex = endPos + 2; } else { @@ -332,7 +339,7 @@ QByteArray serializeDigestMd5(const QMap &map) if (!ba.isEmpty()) ba.append(','); ba.append(key + "="); - const QByteArray value = map[key]; + QByteArray value = map[key]; const char *separators = "()<>@,;:\\\"/[]?={} \t"; bool quote = false; for (const char *c = separators; *c; c++) @@ -344,7 +351,11 @@ QByteArray serializeDigestMd5(const QMap &map) } } if (quote) + { + value.replace("\\", "\\\\"); + value.replace("\"", "\\\""); ba.append("\"" + value + "\""); + } else ba.append(value); } -- cgit v1.2.3