88
99namespace WordPressVIPMinimum \Sniffs \Security ;
1010
11+ use PHP_CodeSniffer \Util \Tokens ;
12+ use PHPCSUtils \Utils \TextStrings ;
1113use WordPressVIPMinimum \Sniffs \Sniff ;
1214
1315/**
@@ -28,11 +30,7 @@ class TwigSniff extends Sniff {
2830 * @return array<int|string>
2931 */
3032 public function register () {
31- return [
32- T_CONSTANT_ENCAPSED_STRING ,
33- T_INLINE_HTML ,
34- T_HEREDOC ,
35- ];
33+ return Tokens::$ textStringTokens ;
3634 }
3735
3836 /**
@@ -43,14 +41,21 @@ public function register() {
4341 * @return void
4442 */
4543 public function process_token ( $ stackPtr ) {
44+ // Strip any potentially interpolated expressions.
45+ $ only_text = $ this ->tokens [ $ stackPtr ]['content ' ];
46+ if ( $ this ->tokens [ $ stackPtr ]['code ' ] === T_DOUBLE_QUOTED_STRING
47+ || $ this ->tokens [ $ stackPtr ]['code ' ] === T_HEREDOC
48+ ) {
49+ $ only_text = TextStrings::stripEmbeds ( $ only_text );
50+ }
4651
47- if ( preg_match ( '/autoescape\s+false/ ' , $ this -> tokens [ $ stackPtr ][ ' content ' ] ) === 1 ) {
52+ if ( preg_match ( '/autoescape\s+false/ ' , $ only_text ) === 1 ) {
4853 // Twig autoescape disabled.
4954 $ message = 'Found Twig autoescape disabling notation. ' ;
5055 $ this ->phpcsFile ->addWarning ( $ message , $ stackPtr , 'AutoescapeFalse ' );
5156 }
5257
53- if ( preg_match ( '/\|\s*raw/ ' , $ this -> tokens [ $ stackPtr ][ ' content ' ] ) === 1 ) {
58+ if ( preg_match ( '/\|\s*raw/ ' , $ only_text ) === 1 ) {
5459 // Twig default unescape filter.
5560 $ message = 'Found Twig default unescape filter: "|raw". ' ;
5661 $ this ->phpcsFile ->addWarning ( $ message , $ stackPtr , 'RawFound ' );
0 commit comments