From 4115350f36dbc123ddea7bfe9e1e198910ea5f3f Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Sat, 14 Mar 2009 02:13:06 +0100 Subject: [PATCH] Properly handle \r and \n We now treat \r, \n and \r\n as linebreak, fixing a problem with windows-based scripts. Also we don't accept ..\ in the script name anymore. --- src/client/execwrapper.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/client/execwrapper.cpp b/src/client/execwrapper.cpp index ee4a6db1..cf5ac964 100644 --- a/src/client/execwrapper.cpp +++ b/src/client/execwrapper.cpp @@ -49,7 +49,7 @@ void ExecWrapper::start(const BufferInfo &info, const QString &command) { } // Make sure we don't execute something outside a script dir - if(_scriptName.startsWith('/') || _scriptName.contains("../")) + if(_scriptName.contains("../") || _scriptName.contains("..\\")) emit error(tr("Name \"%1\" is invalid: / or ../ are not allowed!").arg(_scriptName)); else { @@ -103,7 +103,9 @@ void ExecWrapper::processError(QProcess::ProcessError err) { } void ExecWrapper::processReadStdout() { - _stdoutBuffer.append(QTextCodec::codecForLocale()->toUnicode(_process.readAllStandardOutput())); + QString str = QTextCodec::codecForLocale()->toUnicode(_process.readAllStandardOutput()); + str.replace(QRegExp("\r\n?"), "\n"); + _stdoutBuffer.append(str); int idx; while((idx = _stdoutBuffer.indexOf('\n')) >= 0) { emit output(_stdoutBuffer.left(idx)); @@ -112,7 +114,9 @@ void ExecWrapper::processReadStdout() { } void ExecWrapper::processReadStderr() { - _stderrBuffer.append(QTextCodec::codecForLocale()->toUnicode(_process.readAllStandardError())); + QString str = QTextCodec::codecForLocale()->toUnicode(_process.readAllStandardError()); + str.replace(QRegExp("\r\n?"), "\n"); + _stderrBuffer.append(str); int idx; while((idx = _stderrBuffer.indexOf('\n')) >= 0) { emit error(_stderrBuffer.left(idx)); -- 2.20.1