diff --git a/src/plugins/vcsbase/vcsbaseoutputwindow.cpp b/src/plugins/vcsbase/vcsbaseoutputwindow.cpp index 3ec044e271dcd5f8edd2f3981de9651ead832c3a..94b5d645f0a0f214a7a65085ef94e6e41c84ad8d 100644 --- a/src/plugins/vcsbase/vcsbaseoutputwindow.cpp +++ b/src/plugins/vcsbase/vcsbaseoutputwindow.cpp @@ -272,6 +272,7 @@ public: QPointer<Internal::OutputWindowPlainTextEdit> m_plainTextEdit; QString repository; + QRegExp passwordRegExp; }; // Create log editor on demand. Some errors might be logged @@ -289,9 +290,25 @@ VcsBaseOutputWindow *VcsBaseOutputWindowPrivate::instance = 0; VcsBaseOutputWindow::VcsBaseOutputWindow() : d(new VcsBaseOutputWindowPrivate) { + d->passwordRegExp = QRegExp(QLatin1String("://([^@:]+):([^@]+)@")); + Q_ASSERT(d->passwordRegExp.isValid()); VcsBaseOutputWindowPrivate::instance = this; } +QString VcsBaseOutputWindow::filterPasswordFromUrls(const QString &input) +{ + int pos = 0; + QString result = input; + while ((pos = d->passwordRegExp.indexIn(result, pos)) >= 0) { + QString tmp = result.left(pos + 3) + d->passwordRegExp.cap(1) + QLatin1String(":***@"); + int newStart = tmp.count(); + tmp += result.mid(pos + d->passwordRegExp.matchedLength()); + result = tmp; + pos = newStart; + } + return result; +} + VcsBaseOutputWindow::~VcsBaseOutputWindow() { VcsBaseOutputWindowPrivate::instance = 0; @@ -443,7 +460,7 @@ QString VcsBaseOutputWindow::msgExecutionLogEntry(const QString &workingDir, void VcsBaseOutputWindow::appendCommand(const QString &text) { - append(text, Command, true); + append(filterPasswordFromUrls(text), Command, true); } void VcsBaseOutputWindow::appendCommand(const QString &workingDirectory, diff --git a/src/plugins/vcsbase/vcsbaseoutputwindow.h b/src/plugins/vcsbase/vcsbaseoutputwindow.h index 6e52b7aebd8ab3383628e80ec47c36f632e4386b..84fa6999bb79c6bec38892e55f3215189823dd43 100644 --- a/src/plugins/vcsbase/vcsbaseoutputwindow.h +++ b/src/plugins/vcsbase/vcsbaseoutputwindow.h @@ -121,6 +121,8 @@ public slots: private: VcsBaseOutputWindow(); + QString filterPasswordFromUrls(const QString &input); + VcsBaseOutputWindowPrivate *d; };