Skip to content

crash when access not existing property in finally block of try/catch. (version >= 3.17) #4315

@infinitisno

Description

@infinitisno

The symfony/cache package has something like this:

<?php

try {
} finally {
    $event->end = null;
}

Psalm crashed on this code with following error message:

psalm-error-report|master ⇒ nix-shell -p php74 --run vendor/bin/psalm
Scanning files...
Analyzing files...

Notice: Undefined index: $event->end in /home/el/projects/tmp/psalm-error-report/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Block/TryAnalyzer.php on line 541
Uncaught Error: __clone method called on non-object in /home/el/projects/tmp/psalm-error-report/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Block/TryAnalyzer.php:541
Stack trace:
#0 /home/el/projects/tmp/psalm-error-report/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/StatementsAnalyzer.php(452): Psalm\Internal\Analyzer\Statements\Block\TryAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Stmt\TryCatch), Object(Psalm\Context))
#1 /home/el/projects/tmp/psalm-error-report/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/StatementsAnalyzer.php(173): Psalm\Internal\Analyzer\StatementsAnalyzer::analyzeStatement(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Stmt\TryCatch), Object(Psalm\Context), NULL)
#2 /home/el/projects/tmp/psalm-error-report/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/FileAnalyzer.php(191): Psalm\Internal\Analyzer\StatementsAnalyzer->analyze(Array, Object(Psalm\Context), NULL, true)
#3 /home/el/projects/tmp/psalm-error-report/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(338): Psalm\Internal\Analyzer\FileAnalyzer->analyze(NULL)
#4 /home/el/projects/tmp/psalm-error-report/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(578): Psalm\Internal\Codebase\Analyzer->Psalm\Internal\Codebase\{closure}(0, '/home/el/projec...')
#5 /home/el/projects/tmp/psalm-error-report/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(270): Psalm\Internal\Codebase\Analyzer->doAnalysis(Object(Psalm\Internal\Analyzer\ProjectAnalyzer), 3)
#6 /home/el/projects/tmp/psalm-error-report/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(639): Psalm\Internal\Codebase\Analyzer->analyzeFiles(Object(Psalm\Internal\Analyzer\ProjectAnalyzer), 3, false, true)
#7 /home/el/projects/tmp/psalm-error-report/vendor/vimeo/psalm/src/psalm.php(675): Psalm\Internal\Analyzer\ProjectAnalyzer->check('/home/el/projec...', false)
#8 /home/el/projects/tmp/psalm-error-report/vendor/vimeo/psalm/psalm(2): require_once('/home/el/projec...')
#9 {main}
(Psalm 3.17.1@8f211792d813e4dc89f04ed372785ce93b902fd1 crashed due to an uncaught Throwable)

This happens only in >=3.17 version.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions