X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fexecwrapper.cpp;h=510a4444d36564a63afd59c46aeaa9bd62e6326b;hp=ee4a6db1b6004f4dda44ae9bdcb3ddf54e5296b2;hb=faffcce49db14f404dc6446a76ecaf056f9eb481;hpb=1d94f920822184449fe1a6e76051e3c936d3163a diff --git a/src/client/execwrapper.cpp b/src/client/execwrapper.cpp index ee4a6db1..510a4444 100644 --- a/src/client/execwrapper.cpp +++ b/src/client/execwrapper.cpp @@ -49,15 +49,16 @@ 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("../")) - emit error(tr("Name \"%1\" is invalid: / or ../ are not allowed!").arg(_scriptName)); + if(_scriptName.contains("../") || _scriptName.contains("..\\")) + emit error(tr("Name \"%1\" is invalid: ../ or ..\\ are not allowed!").arg(_scriptName)); else { foreach(QString scriptDir, Quassel::scriptDirPaths()) { QString fileName = scriptDir + _scriptName; if(!QFile::exists(fileName)) continue; - _process.start(fileName + ' ' + params); + _process.setWorkingDirectory(scriptDir); + _process.start('"' + fileName + "\" " + params); return; } emit error(tr("Could not find script \"%1\"").arg(_scriptName)); @@ -103,7 +104,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 +115,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));