}
// 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));
}
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));
}
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));