Mercurial > hg > forks > UniversalIndentGUI
changeset 473:4b1ae20f1e06
Prevent php file from being tried to be executed directly. That could happen if the file has the execution flag set. However that should never be the case, so this is a workaround.
git-svn-id: svn://svn.code.sf.net/p/universalindent/code/trunk@712 59b1889a-e5ac-428c-b0c7-476e01d41282
author | thomas_-_s <thomas_-_s@59b1889a-e5ac-428c-b0c7-476e01d41282> |
---|---|
date | Tue, 27 May 2008 07:59:43 +0000 |
parents | a4798a9a0cb2 |
children | dd1e1db4723d |
files | src/indenthandler.cpp |
diffstat | 1 files changed, 50 insertions(+), 45 deletions(-) [+] |
line wrap: on
line diff
--- a/src/indenthandler.cpp Mon May 26 19:00:56 2008 +0000 +++ b/src/indenthandler.cpp Tue May 27 07:59:43 2008 +0000 @@ -1067,54 +1067,59 @@ // Only try to call the indenter, if the file exists. if ( QFile::exists(indenterExecutableCallString) ) { - indentProcess.start( "\"" + indenterExecutableCallString + + "\" " + indenterShowHelpParameter ); - if ( indentProcess.waitForFinished(2000) ) { - indenterExecutableCallString = "\"" + indenterExecutableCallString + "\""; - return true; - } - else if ( indentProcess.error() == QProcess::Timedout ) { - indenterExecutableCallString = "\"" + indenterExecutableCallString + "\""; - return true; - } - // If the file could not be executed, try to find a shebang at its start or test if its a php file. - else { - QString interpreterName = ""; - QFile indenterExecutable( indenterExecutableCallString ); - - // If indenter executable file has .php as suffix, use php as default interpreter - if ( QFileInfo(indenterExecutableCallString).suffix().toLower() == "php" ) { - interpreterName = "php -f"; + + // Only try to call the indenter directly if it is no php file + if ( QFileInfo(indenterExecutableCallString).suffix().toLower() != "php" ) { + indentProcess.start( "\"" + indenterExecutableCallString + + "\" " + indenterShowHelpParameter ); + if ( indentProcess.waitForFinished(2000) ) { + indenterExecutableCallString = "\"" + indenterExecutableCallString + "\""; + return true; + } + else if ( indentProcess.error() == QProcess::Timedout ) { + indenterExecutableCallString = "\"" + indenterExecutableCallString + "\""; + return true; } - // Else try to open the file and read the shebang. - else if ( indenterExecutable.open(QFile::ReadOnly) ) { - // Read the first line of the file. - QTextStream indenterExecutableContent(&indenterExecutable); - QString firstLineOfIndenterExe = indenterExecutableContent.readLine(75); - indenterExecutable.close(); + } + + // Test for needed interpreters + // ---------------------------- + // If the file could not be executed, try to find a shebang at its start or test if its a php file. + QString interpreterName = ""; + QFile indenterExecutable( indenterExecutableCallString ); - // If the initial shebang is found, read the named intepreter. e.g. perl - if ( firstLineOfIndenterExe.startsWith("#!") ) { - // Get the rightmost word. by splitting the string into only full words. - interpreterName = firstLineOfIndenterExe.split( "/" ).last(); - } - } + // If indenter executable file has .php as suffix, use php as default interpreter + if ( QFileInfo(indenterExecutableCallString).suffix().toLower() == "php" ) { + interpreterName = "php -f"; + } + // Else try to open the file and read the shebang. + else if ( indenterExecutable.open(QFile::ReadOnly) ) { + // Read the first line of the file. + QTextStream indenterExecutableContent(&indenterExecutable); + QString firstLineOfIndenterExe = indenterExecutableContent.readLine(75); + indenterExecutable.close(); - // Try to call the interpreter, if it exists. - if ( !interpreterName.isEmpty() ) { - indenterExecutableCallString = interpreterName + " \"" + indenterExecutableCallString + "\""; - indentProcess.start( interpreterName + " -h"); - if ( indentProcess.waitForFinished(2000) ) { - return true; - } - else if ( indentProcess.error() == QProcess::Timedout ) { - return true; - } - // now we know an interpreter is needed but it could not be called, so inform the user. - else { - errorMessageDialog->showMessage( tr("Interpreter needed"), - tr("To use the selected indenter the program \"%1\" needs to be available in the global environment. You should add an entry to your path settings.").arg(interpreterName) ); - return true; - } + // If the initial shebang is found, read the named intepreter. e.g. perl + if ( firstLineOfIndenterExe.startsWith("#!") ) { + // Get the rightmost word. by splitting the string into only full words. + interpreterName = firstLineOfIndenterExe.split( "/" ).last(); + } + } + + // Try to call the interpreter, if it exists. + if ( !interpreterName.isEmpty() ) { + indenterExecutableCallString = interpreterName + " \"" + indenterExecutableCallString + "\""; + indentProcess.start( interpreterName + " -h"); + if ( indentProcess.waitForFinished(2000) ) { + return true; + } + else if ( indentProcess.error() == QProcess::Timedout ) { + return true; + } + // now we know an interpreter is needed but it could not be called, so inform the user. + else { + errorMessageDialog->showMessage( tr("Interpreter needed"), + tr("To use the selected indenter the program \"%1\" needs to be available in the global environment. You should add an entry to your path settings.").arg(interpreterName) ); + return true; } } }