This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | namespace Tests\PHPSA; |
||
4 | |||
5 | use PhpParser\ParserFactory; |
||
6 | use PHPSA\Analyzer; |
||
7 | use PHPSA\Application; |
||
8 | use PHPSA\Configuration; |
||
9 | use PHPSA\Context; |
||
10 | use PHPSA\Definition\FileParser; |
||
11 | use PHPSA\Issue; |
||
12 | use RecursiveDirectoryIterator; |
||
13 | use RecursiveIteratorIterator; |
||
14 | use Webiny\Component\EventManager\EventManager; |
||
15 | use PHPSA\Compiler; |
||
16 | |||
17 | class AnalyzeFixturesTest extends TestCase |
||
18 | { |
||
19 | public function provideTestParseAndDump() |
||
20 | { |
||
21 | $iter = new RecursiveIteratorIterator( |
||
22 | new RecursiveDirectoryIterator( |
||
23 | __DIR__ . '/../analyze-fixtures' |
||
24 | ), |
||
25 | RecursiveIteratorIterator::LEAVES_ONLY |
||
26 | ); |
||
27 | |||
28 | /** @var \SplFileInfo $file */ |
||
29 | foreach ($iter as $file) { |
||
30 | if (!$file->isFile()) { |
||
31 | continue; |
||
32 | } |
||
33 | |||
34 | $contents = file_get_contents($file); |
||
35 | list (, $analyzer, $expected) = explode('----------------------------', $contents); |
||
36 | |||
37 | yield [$file->getPathname(), trim($analyzer), trim($expected)]; |
||
38 | } |
||
39 | } |
||
40 | |||
41 | /** |
||
42 | * @dataProvider provideTestParseAndDump |
||
43 | * |
||
44 | * @param $file |
||
45 | * @param string $analyzer |
||
46 | * @param string $expectedDump |
||
47 | * @throws \PHPSA\Exception\RuntimeException |
||
48 | * @throws \Webiny\Component\EventManager\EventManagerException |
||
49 | */ |
||
50 | public function testParseAndDump($file, $analyzer, $expectedDump) |
||
51 | { |
||
52 | $compiler = new Compiler(); |
||
53 | |||
54 | $fileParser = new FileParser( |
||
55 | (new ParserFactory())->create( |
||
56 | ParserFactory::PREFER_PHP7, |
||
57 | new \PhpParser\Lexer\Emulative( |
||
58 | array( |
||
59 | 'usedAttributes' => array( |
||
60 | 'comments', |
||
61 | 'startLine', |
||
62 | 'endLine', |
||
63 | 'startTokenPos', |
||
64 | 'endTokenPos' |
||
65 | ) |
||
66 | ) |
||
67 | ) |
||
68 | ), |
||
69 | $compiler |
||
70 | ); |
||
71 | |||
72 | $context = new Context( |
||
73 | new \Symfony\Component\Console\Output\NullOutput(), |
||
74 | $application = new Application(), |
||
75 | $this->getEventManager($analyzer) |
||
76 | ); |
||
77 | $application->compiler = $compiler; |
||
78 | |||
79 | $fileParser->parserFile($file, $context); |
||
80 | |||
81 | $compiler->compile($context); |
||
82 | |||
83 | $expectedArray = json_decode($expectedDump, true); |
||
84 | $expectedType = $expectedArray[0]["type"]; |
||
85 | $issues = array_map( |
||
86 | // @todo Remove after moving all notices on Issue(s) |
||
87 | function (Issue $issue) { |
||
88 | $location = $issue->getLocation(); |
||
89 | |||
90 | return [ |
||
91 | 'type' => $issue->getCheckName(), |
||
92 | 'message' => $issue->getDescription(), |
||
93 | 'file' => $location->getFileName(), |
||
94 | 'line' => $location->getLineStart(), |
||
95 | ]; |
||
96 | }, |
||
97 | $application->getIssuesCollector()->getIssues() |
||
98 | ); |
||
99 | |||
100 | foreach ($expectedArray as $check) { |
||
101 | self::assertContains($check, $issues, $file); // every expected Issue is in the collector |
||
102 | } |
||
103 | |||
104 | foreach ($issues as $check) { |
||
105 | if ($check["type"] == $expectedType) { |
||
106 | self::assertContains($check, $expectedArray, $file); // there is no other issue in the collector with the same type |
||
107 | } |
||
108 | } |
||
109 | } |
||
110 | |||
111 | /** |
||
112 | * @param string $analyzerName |
||
113 | * @return EventManager |
||
114 | * @throws \Webiny\Component\EventManager\EventManagerException |
||
115 | */ |
||
116 | protected function getEventManager($analyzerName) |
||
117 | { |
||
118 | if (!class_exists($analyzerName, true)) { |
||
119 | throw new \InvalidArgumentException("Analyzer with name: {$analyzerName} does not exist"); |
||
120 | } |
||
121 | |||
122 | /** @var \PHPSA\Analyzer\Pass\Metadata $metaData */ |
||
123 | $metaData = $analyzerName::getMetadata(); |
||
124 | if (!$metaData->allowsPhpVersion(PHP_VERSION)) { |
||
125 | parent::markTestSkipped( |
||
0 ignored issues
–
show
|
|||
126 | sprintf( |
||
127 | 'We cannot tests %s with %s because PHP required version is %s', |
||
128 | $analyzerName, |
||
129 | PHP_VERSION, |
||
130 | $metaData->getRequiredPhpVersion() |
||
131 | ) |
||
132 | ); |
||
133 | } |
||
134 | |||
135 | /** @var \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $analyzerConfiguration */ |
||
136 | $analyzerConfiguration = $metaData->getConfiguration(); |
||
137 | $analyzerConfiguration->attribute('enabled', true); |
||
138 | |||
139 | $configuration = new Configuration( |
||
140 | [], |
||
141 | [ |
||
142 | $analyzerConfiguration |
||
143 | ] |
||
144 | ); |
||
145 | |||
146 | $analyzersConfig = $configuration->getValue('analyzers'); |
||
147 | $analyzersConfig = array_merge( |
||
148 | $analyzersConfig, |
||
149 | [ |
||
150 | $metaData->getName() => array_map( |
||
151 | function () { |
||
152 | return true; |
||
153 | }, |
||
154 | $analyzersConfig[$metaData->getName()] |
||
155 | ) |
||
156 | ] |
||
157 | ); |
||
158 | |||
159 | $configuration->setValue('analyzers', $analyzersConfig); |
||
160 | |||
161 | $em = EventManager::getInstance(); |
||
162 | \PHPSA\Analyzer\Factory::factory($em, $configuration); |
||
163 | |||
164 | return $em; |
||
165 | } |
||
166 | } |
||
167 |
This check looks for a call to a parent method whose name is different than the method from which it is called.
Consider the following code:
The
getFirstName()
method in theSon
calls the wrong method in the parent class.