diff --git a/source/administrator/components/com_jedchecker/libraries/rules/jexec.php b/source/administrator/components/com_jedchecker/libraries/rules/jexec.php new file mode 100644 index 0000000..9a8ebba --- /dev/null +++ b/source/administrator/components/com_jedchecker/libraries/rules/jexec.php @@ -0,0 +1,94 @@ +missing = array(); + $files = JFolder::files($basedir, '.php', true, true); + + // Iterate through all files in the package + foreach($files as $file) + { + // Try to find the _JEXEC check in the file + if(!$this->findJExec($file)) { + $this->missing[] = $file; + } + } + + + echo 'The following files dont have the _JEXEC check:
'; + // Echo all files which don't have the _JEXEC check + foreach($this->missing AS $file) + { + echo $file.'
'; + } + } + + + /** + * Reads a file and searches for the _JEXEC statement + * + * @param string $file The path to the file + * @return boolean True if the statement was found, otherwise False. + */ + protected function findJexec($file) + { + $content = (array) file($file); + + foreach($content AS $line) + { + $pos_2 = strpos($line, '_JEXEC'); + + // Skip the line if _JEXEC is not found + if($pos_2 === false) continue; + + // Search for "defined" and "die". "or" may not be present + // depending on syntax + $pos_1 = stripos($line, 'defined'); + $pos_3 = stripos($line, 'die'); + + // Both words must be present + if($pos_1 === false || $pos_3 === false) { + continue; + } + + // Check the position of the words + if($pos_2 > $pos_1 && $pos_3 > $pos_2) { + unset($content); + return true; + } + } + + unset($content); + + return false; + } +}