OSDN Git Service

fix quoting of strings with spaces and backslashes at the end
authorOswald Buddenhagen <oswald.buddenhagen@nokia.com>
Tue, 26 Apr 2011 08:31:28 +0000 (10:31 +0200)
committerOswald Buddenhagen <oswald.buddenhagen@nokia.com>
Tue, 26 Apr 2011 08:45:04 +0000 (10:45 +0200)
the regexp would match twice at the end, and thus insert a stray quote.
so use a discrete loop instead.
fixed the same thing in proparser/ioutils before ...

Task-number: QTCREATORBUG-4291

src/libs/utils/abstractprocess_win.cpp

index 194c67e..4bc7c08 100644 (file)
@@ -81,7 +81,10 @@ static QString quoteWinArgument(const QString &arg)
         // The argument must not end with a \ since this would be interpreted
         // as escaping the quote -- rather put the \ behind the quote: e.g.
         // rather use "foo"\ than "foo\"
-        ret.replace(QRegExp(QLatin1String("(\\\\*)$")), QLatin1String("\"\\1"));
+        int i = ret.length();
+        while (i > 0 && ret.at(i - 1) == QLatin1Char('\\'))
+            --i;
+        ret.insert(i, QLatin1Char('"'));
         ret.prepend(QLatin1Char('"'));
     }
     return ret;