From 5f7a48a35ef2b3951fcc6317802a2cdd63c47b76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 29 Mar 2014 21:16:54 +0100 Subject: Fix issues with badly encoded escape sequences in config files. --- depends/settings/inifile.cpp | 48 ++++++++++++++++++++++++++++++++++++-------- depends/settings/inifile.h | 4 ++-- 2 files changed, 42 insertions(+), 10 deletions(-) (limited to 'depends') diff --git a/depends/settings/inifile.cpp b/depends/settings/inifile.cpp index 1170f0b1..b2098913 100644 --- a/depends/settings/inifile.cpp +++ b/depends/settings/inifile.cpp @@ -25,17 +25,49 @@ INIFile::INIFile() QString INIFile::unescape(QString orig) { - orig.replace("\\n", "\n"); - orig.replace("\\t", "\t"); - orig.replace("\\\\", "\\"); - return orig; + QString out; + QChar prev = 0; + for(auto c: orig) + { + if(prev == '\\') + { + if(c == 'n') + out += '\n'; + else if (c == 't') + out += '\t'; + else + out += c; + prev = 0; + } + else + { + if(c == '\\') + { + prev = c; + continue; + } + out += c; + prev = 0; + } + } + return out; } + QString INIFile::escape(QString orig) { - orig.replace("\\", "\\\\"); - orig.replace("\n", "\\n"); - orig.replace("\t", "\\t"); - return orig; + QString out; + for(auto c: orig) + { + if(c == '\n') + out += "\\n"; + else if (c == '\t') + out += "\\t"; + else if(c == '\\') + out += "\\\\"; + else + out += c; + } + return out; } bool INIFile::saveFile(QString fileName) diff --git a/depends/settings/inifile.h b/depends/settings/inifile.h index 27da7bf0..4fb0054d 100644 --- a/depends/settings/inifile.h +++ b/depends/settings/inifile.h @@ -33,6 +33,6 @@ public: QVariant get(QString key, QVariant def) const; void set(QString key, QVariant val); - QString unescape(QString orig); - QString escape(QString orig); + static QString unescape(QString orig); + static QString escape(QString orig); }; -- cgit v1.2.3