diff --git a/src/Analyser/MutatingScope.php b/src/Analyser/MutatingScope.php index 5af1a88189..0a48658184 100644 --- a/src/Analyser/MutatingScope.php +++ b/src/Analyser/MutatingScope.php @@ -514,6 +514,8 @@ public function afterExtractCall(): self public function afterClearstatcacheCall(): self { + $changed = false; + $expressionTypes = $this->expressionTypes; $nativeExpressionTypes = $this->nativeExpressionTypes; foreach (array_keys($expressionTypes) as $exprString) { @@ -547,10 +549,15 @@ public function afterClearstatcacheCall(): self unset($expressionTypes[$exprString]); unset($nativeExpressionTypes[$exprString]); + $changed = true; continue 2; } } + if (!$changed) { + return $this; + } + return $this->scopeFactory->create( $this->context, $this->isDeclareStrictTypes(), @@ -576,6 +583,15 @@ public function afterOpenSslCall(string $openSslFunctionName): self $expressionTypes = $this->expressionTypes; $nativeExpressionTypes = $this->nativeExpressionTypes; + $errorStringFunction = '\openssl_error_string()'; + if ( + !array_key_exists($errorStringFunction, $expressionTypes) + && !array_key_exists($errorStringFunction, $nativeExpressionTypes) + ) { + return $this; + } + + $changed = false; if (in_array($openSslFunctionName, [ 'openssl_cipher_iv_length', 'openssl_cms_decrypt', @@ -631,8 +647,13 @@ public function afterOpenSslCall(string $openSslFunctionName): self 'openssl_x509_read', 'openssl_x509_verify', ], true)) { - unset($expressionTypes['\openssl_error_string()']); - unset($nativeExpressionTypes['\openssl_error_string()']); + unset($expressionTypes[$errorStringFunction]); + unset($nativeExpressionTypes[$errorStringFunction]); + $changed = true; + } + + if (!$changed) { + return $this; } return $this->scopeFactory->create(