class GetRequestDataSniff
Same name in this branch
- 11.1.x vendor/drupal/coder/coder_sniffer/DrupalPractice/Sniffs/Variables/GetRequestDataSniff.php \DrupalPractice\Sniffs\Variables\GetRequestDataSniff
Hierarchy
- class \PHP_CodeSniffer\Standards\MySource\Sniffs\PHP\GetRequestDataSniff implements \PHP_CodeSniffer\Sniffs\Sniff
Expanded class hierarchy of GetRequestDataSniff
File
-
vendor/
squizlabs/ php_codesniffer/ src/ Standards/ MySource/ Sniffs/ PHP/ GetRequestDataSniff.php, line 17
Namespace
PHP_CodeSniffer\Standards\MySource\Sniffs\PHPView source
class GetRequestDataSniff implements Sniff {
/**
* Returns an array of tokens this test wants to listen for.
*
* @return array<int|string>
*/
public function register() {
return [
T_VARIABLE,
];
}
//end register()
/**
* Processes this sniff, when one of its tokens is encountered.
*
* @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.
* @param int $stackPtr The position of the current token in
* the stack passed in $tokens.
*
* @return void
*/
public function process(File $phpcsFile, $stackPtr) {
$tokens = $phpcsFile->getTokens();
$varName = $tokens[$stackPtr]['content'];
if ($varName !== '$_REQUEST' && $varName !== '$_GET' && $varName !== '$_POST' && $varName !== '$_FILES') {
return;
}
// The only place these super globals can be accessed directly is
// in the getRequestData() method of the Security class.
$inClass = false;
foreach ($tokens[$stackPtr]['conditions'] as $i => $type) {
if ($tokens[$i]['code'] === T_CLASS) {
$className = $phpcsFile->findNext(T_STRING, $i);
$className = $tokens[$className]['content'];
if (strtolower($className) === 'security') {
$inClass = true;
}
else {
// We don't have nested classes.
break;
}
}
else {
if ($inClass === true && $tokens[$i]['code'] === T_FUNCTION) {
$funcName = $phpcsFile->findNext(T_STRING, $i);
$funcName = $tokens[$funcName]['content'];
if (strtolower($funcName) === 'getrequestdata') {
// This is valid.
return;
}
else {
// We don't have nested functions.
break;
}
}
}
//end if
}
//end foreach
// If we get to here, the super global was used incorrectly.
// First find out how it is being used.
$globalName = strtolower(substr($varName, 2));
$usedVar = '';
$openBracket = $phpcsFile->findNext(T_WHITESPACE, $stackPtr + 1, null, true);
if ($tokens[$openBracket]['code'] === T_OPEN_SQUARE_BRACKET) {
$closeBracket = $tokens[$openBracket]['bracket_closer'];
$usedVar = $phpcsFile->getTokensAsString($openBracket + 1, $closeBracket - $openBracket - 1);
}
$type = 'SuperglobalAccessed';
$error = 'The %s super global must not be accessed directly; use Security::getRequestData(';
$data = [
$varName,
];
if ($usedVar !== '') {
$type .= 'WithVar';
$error .= '%s, \'%s\'';
$data[] = $usedVar;
$data[] = $globalName;
}
$error .= ') instead';
$phpcsFile->addError($error, $stackPtr, $type, $data);
}
//end process()
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title |
---|---|---|---|---|
GetRequestDataSniff::process | public | function | Processes this sniff, when one of its tokens is encountered. | Overrides Sniff::process |
GetRequestDataSniff::register | public | function | Returns an array of tokens this test wants to listen for. | Overrides Sniff::register |