From 1f6b9d308650b702cdfe49b7540bef4b3a4fc9f9 Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Tue, 13 Oct 2015 15:33:22 +0200 Subject: Correctly escape ClientInfo and ScenarioSettings --- src/Util.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'src/Util.cpp') diff --git a/src/Util.cpp b/src/Util.cpp index 8b5bc67..014f1f8 100644 --- a/src/Util.cpp +++ b/src/Util.cpp @@ -82,5 +82,54 @@ namespace Util { return ret; } + QString joinEscape(const QStringList &list, const QChar joinChar, const QChar escapeChar) + { + QString ret; + bool first = true; + foreach(const QString& part, list) + { + if(!first) + { + ret.append(joinChar); + } + else + { + first = false; + } + ret.append(escape(part, escapeChar, joinChar)); + } + return ret; + } + + QStringList splitEscaped(const QString &joined, const QChar splitChar, const QChar escapeChar) + { + QStringList ret; + + int partPos = 0; + bool escaped = false; + for(int i = 0; i < joined.length(); ++i) + { + QChar c = joined.at(i); + if(!escaped) + { + if(c == escapeChar) + { + escaped = true; + } + else if(c == splitChar) + { + ret.append(Util::unescape(joined.mid(partPos, i - partPos), escapeChar)); + partPos = i + 1; + } + } + else + { + escaped = false; + } + } + ret.append(Util::unescape(joined.mid(partPos), escapeChar)); + + return ret; + } } -- cgit v1.2.3-54-g00ecf