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