]> source.dussan.org Git - nextcloud-server.git/commitdiff
Refactor AppFrameworkTainter to make it more readable 37504/head
authorjld3103 <jld3103yt@gmail.com>
Fri, 31 Mar 2023 15:19:12 +0000 (17:19 +0200)
committerjld3103 <jld3103yt@gmail.com>
Wed, 5 Apr 2023 05:07:53 +0000 (07:07 +0200)
Signed-off-by: jld3103 <jld3103yt@gmail.com>
build/psalm/AppFrameworkTainter.php

index 15023da8d580b1eed2ea944abd158bbf58cc212e..9a68885b175b87337726368f52f258340249085e 100644 (file)
@@ -22,6 +22,7 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
+
 use Psalm\CodeLocation;
 use Psalm\Plugin\EventHandler\AfterFunctionLikeAnalysisInterface;
 use Psalm\Plugin\EventHandler\Event\AfterFunctionLikeAnalysisEvent;
@@ -29,27 +30,29 @@ use Psalm\Type\TaintKindGroup;
 
 class AppFrameworkTainter implements AfterFunctionLikeAnalysisInterface {
        public static function afterStatementAnalysis(AfterFunctionLikeAnalysisEvent $event): ?bool {
-               if ($event->getStatementsSource()->getFQCLN() !== null) {
-                       if ($event->getCodebase()->classExtendsOrImplements($event->getStatementsSource()->getFQCLN(), \OCP\AppFramework\Controller::class)) {
-                               if ($event->getStmt() instanceof PhpParser\Node\Stmt\ClassMethod) {
-                                       if ($event->getStmt()->isPublic() && !$event->getStmt()->isMagic()) {
-                                               foreach ($event->getStmt()->params as $i => $param) {
-                                                       $expr_type = new Psalm\Type\Union([new Psalm\Type\Atomic\TString()]);
-                                                       $expr_identifier = (strtolower($event->getStatementsSource()->getFQCLN()) . '::' . strtolower($event->getFunctionlikeStorage()->cased_name) . '#' . ($i + 1));
-
-                                                       if ($expr_type) {
-                                                               $event->getCodebase()->addTaintSource(
-                                                                       $expr_type,
-                                                                       $expr_identifier,
-                                                                       TaintKindGroup::ALL_INPUT,
-                                                                       new CodeLocation($event->getStatementsSource(), $param)
-                                                               );
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
+               if ($event->getStatementsSource()->getFQCLN() === null) {
+                       return null;
+               }
+               if (!$event->getCodebase()->classExtendsOrImplements($event->getStatementsSource()->getFQCLN(), \OCP\AppFramework\Controller::class)) {
+                       return null;
+               }
+               if (!($event->getStmt() instanceof PhpParser\Node\Stmt\ClassMethod)) {
+                       return null;
                }
+               if (!$event->getStmt()->isPublic() || $event->getStmt()->isMagic()) {
+                       return null;
+               }
+               foreach ($event->getStmt()->params as $i => $param) {
+                       $expr_type = new Psalm\Type\Union([new Psalm\Type\Atomic\TString()]);
+                       $expr_identifier = (strtolower($event->getStatementsSource()->getFQCLN()) . '::' . strtolower($event->getFunctionlikeStorage()->cased_name) . '#' . ($i + 1));
+                       $event->getCodebase()->addTaintSource(
+                               $expr_type,
+                               $expr_identifier,
+                               TaintKindGroup::ALL_INPUT,
+                               new CodeLocation($event->getStatementsSource(), $param)
+                       );
+               }
+
                return null;
        }
 }