diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-08-20 12:59:07 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-08-20 12:59:07 +0000 |
| commit | 31f92915ef254bbdb702e1de0de72bdeff831ab6 (patch) | |
| tree | c4385d1ec96815ba06927626ce8407f523675b0d /src/QXmppUtils.cpp | |
| parent | d5b9ca273924e220a6b5a9c78e7fddfe9400ac53 (diff) | |
| download | qxmpp-31f92915ef254bbdb702e1de0de72bdeff831ab6.tar.gz | |
implement and test quoted character handling
Diffstat (limited to 'src/QXmppUtils.cpp')
| -rw-r--r-- | src/QXmppUtils.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
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<QByteArray, QByteArray> 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<QByteArray, QByteArray> &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<QByteArray, QByteArray> &map) } } if (quote) + { + value.replace("\\", "\\\\"); + value.replace("\"", "\\\""); ba.append("\"" + value + "\""); + } else ba.append(value); } |
