From 72ea71aacfab308f074afe891a5333ec88d17efc Mon Sep 17 00:00:00 2001
From: Erik Verbruggen <erik.verbruggen@nokia.com>
Date: Fri, 5 Mar 2010 15:24:38 +0100
Subject: [PATCH] Fixed string escaping when writing QML properties.

---
 .../qmldesigner/core/model/qmltextgenerator.cpp   | 15 ++++++++++++++-
 .../qmldesigner/core/model/qmltextgenerator.h     |  2 ++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/plugins/qmldesigner/core/model/qmltextgenerator.cpp b/src/plugins/qmldesigner/core/model/qmltextgenerator.cpp
index 023debed9f1..8602078e3f0 100644
--- a/src/plugins/qmldesigner/core/model/qmltextgenerator.cpp
+++ b/src/plugins/qmldesigner/core/model/qmltextgenerator.cpp
@@ -97,7 +97,7 @@ QString QmlTextGenerator::toQml(const AbstractProperty &property, int indentDept
             return stringValue;
 
         default:
-            return QString(QLatin1String("\"%1\"")).arg(stringValue);
+            return QString(QLatin1String("\"%1\"")).arg(escape(stringValue));
         }
     } else {
         Q_ASSERT("Unknown property type");
@@ -176,3 +176,16 @@ QString QmlTextGenerator::propertyToQml(const AbstractProperty &property, int in
 
     return result;
 }
+
+QString QmlTextGenerator::escape(const QString &value)
+{
+    QString result = value;
+
+    result.replace(QLatin1String("\\"), QLatin1String("\\\\"));
+    result.replace(QLatin1String("\""), QLatin1String("\\\""));
+    result.replace(QLatin1String("\t"), QLatin1String("\\\t"));
+    result.replace(QLatin1String("\r"), QLatin1String("\\\r"));
+    result.replace(QLatin1String("\n"), QLatin1String("\\\n"));
+
+    return result;
+}
diff --git a/src/plugins/qmldesigner/core/model/qmltextgenerator.h b/src/plugins/qmldesigner/core/model/qmltextgenerator.h
index 3103581af22..84b03bc1961 100644
--- a/src/plugins/qmldesigner/core/model/qmltextgenerator.h
+++ b/src/plugins/qmldesigner/core/model/qmltextgenerator.h
@@ -56,6 +56,8 @@ private:
     QString propertiesToQml(const ModelNode &node, int indentDepth) const;
     QString propertyToQml(const AbstractProperty &property, int indentDepth) const;
 
+    static QString escape(const QString &value);
+
 private:
     QStringList m_propertyOrder;
     int m_indentDepth;
-- 
GitLab