Skip to content

Fix parameter having object type in PHPDoc and only & in the method's definition, used with code having an object calling it's method with itself as an argument for mentioned parameter#10104

Merged
weirdan merged 2 commits intovimeo:5.xfrom
6b7562617765726c6f73:fix_MethodCallAnalyzer
Aug 12, 2023

Conversation

@kubawerlos
Copy link
Copy Markdown
Contributor

Sorry for the title, see the explanation below:

Having such code:

<?php
class Foo {
    /**
    * @param object $o
    */
    public function bar(&$o): void {}
}
$x = new Foo();
$x->bar($x);

will result in internal Psalm error.

  1. Removing object from PHPDoc, or
  2. removing & from the function's definition, or
  3. not passing $x to method of $x

will result in Psalm not crashing, so this is quite an edge case.

@psalm-github-bot
Copy link
Copy Markdown

I found these snippets:

https://psalm.dev/r/3374fc1feb
<?php
class Foo {
    /**
    * @param object $o
    */
    public function bar(&$o): void {}
}
$x = new Foo();
$x->bar($x);
Psalm encountered an internal error:

/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/MethodCallAnalyzer.php: We must have some types here!

@kubawerlos kubawerlos marked this pull request as ready for review August 12, 2023 10:50
@weirdan weirdan added causes crash release:fix The PR will be included in 'Fixes' section of the release notes labels Aug 12, 2023
@weirdan weirdan merged commit a69eddd into vimeo:5.x Aug 12, 2023
@weirdan
Copy link
Copy Markdown
Collaborator

weirdan commented Aug 12, 2023

Thanks!

@kubawerlos kubawerlos deleted the fix_MethodCallAnalyzer branch August 12, 2023 16:57
oguzhand95 referenced this pull request in cerbos/cerbos-sdk-php Aug 21, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [google/protobuf](https://developers.google.com/protocol-buffers/)
([source](https://togithub.com/protocolbuffers/protobuf-php)) | require
| minor | `3.23.4` -> `3.24.1` |
| [grpc/grpc](https://grpc.io)
([source](https://togithub.com/grpc/grpc-php)) | require | minor |
`1.52.0` -> `1.57.0` |
| [phpstan/phpstan](https://togithub.com/phpstan/phpstan) | require-dev
| patch | `1.10.27` -> `1.10.29` |
| [phpunit/phpunit](https://phpunit.de/)
([source](https://togithub.com/sebastianbergmann/phpunit)) | require-dev
| patch | `10.3.1` -> `10.3.2` |
| [vimeo/psalm](https://togithub.com/vimeo/psalm) | require-dev | minor
| `5.14.1` -> `5.15.0` |

---

### Release Notes

<details>
<summary>protocolbuffers/protobuf-php (google/protobuf)</summary>

###
[`v3.24.1`](https://togithub.com/protocolbuffers/protobuf-php/compare/v3.24.0...v3.24.1)

[Compare
Source](https://togithub.com/protocolbuffers/protobuf-php/compare/v3.24.0...v3.24.1)

###
[`v3.24.0`](https://togithub.com/protocolbuffers/protobuf-php/compare/v3.23.4...v3.24.0)

[Compare
Source](https://togithub.com/protocolbuffers/protobuf-php/compare/v3.23.4...v3.24.0)

</details>

<details>
<summary>grpc/grpc-php (grpc/grpc)</summary>

###
[`v1.57.0`](https://togithub.com/grpc/grpc-php/compare/v1.52.0...v1.57.0)

[Compare
Source](https://togithub.com/grpc/grpc-php/compare/v1.52.0...v1.57.0)

</details>

<details>
<summary>phpstan/phpstan (phpstan/phpstan)</summary>

###
[`v1.10.29`](https://togithub.com/phpstan/phpstan/releases/tag/1.10.29)

[Compare
Source](https://togithub.com/phpstan/phpstan/compare/1.10.28...1.10.29)

# Improvements 🔧

-   Update nikic/php-parser to v4.17.1
- PHP 8.3 features are no longer parse errors. Full-fledged PHP 8.3
support is coming later this year.
-   Update BetterReflection to 6.12.0

# Bugfixes 🐛

- PHPStan Pro - when launching, `PHP_BINARY` needs to be escaped
(phpstan/phpstan-src@2c7cfd8)

# Function signature fixes 🤖

- Fix FTP-related function signatures
([#&#8203;2551](https://togithub.com/phpstan/phpstan-src/pull/2551)),
thanks [@&#8203;thg2k](https://togithub.com/thg2k)!

###
[`v1.10.28`](https://togithub.com/phpstan/phpstan/releases/tag/1.10.28)

[Compare
Source](https://togithub.com/phpstan/phpstan/compare/1.10.27...1.10.28)

# Improvements 🔧

- Update BetterReflection to 6.12.0
(phpstan/phpstan-src@7c49c94)

# Bugfixes 🐛

- Nullsafe operator on `null` results in `null`
(phpstan/phpstan-src@5c40c85),
[#&#8203;9721](https://togithub.com/phpstan/phpstan/issues/9721)
- Properties set in the native constructor are initialized in additional
constructors
(phpstan/phpstan-src@1b0c6a0),
[#&#8203;9619](https://togithub.com/phpstan/phpstan/issues/9619)
- Fix performance problem with nested BooleanOr and BooleanAnd
(phpstan/phpstan-src@9adae6c),
[#&#8203;9690](https://togithub.com/phpstan/phpstan/issues/9690),
[#&#8203;9676](https://togithub.com/phpstan/phpstan/issues/9676)
- CallableTypeHelper - copy variadic parameters if the accepting closure
has more parameters
(phpstan/phpstan-src@31ed326),
[#&#8203;9699](https://togithub.com/phpstan/phpstan/issues/9699)

# Internals 🔍

- Simplify access to ClassReflection in ClassPropertyNode
([#&#8203;2565](https://togithub.com/phpstan/phpstan-src/pull/2565)),
thanks [@&#8203;mad-briller](https://togithub.com/mad-briller)!

</details>

<details>
<summary>sebastianbergmann/phpunit (phpunit/phpunit)</summary>

###
[`v10.3.2`](https://togithub.com/sebastianbergmann/phpunit/compare/10.3.1...10.3.2)

[Compare
Source](https://togithub.com/sebastianbergmann/phpunit/compare/10.3.1...10.3.2)

</details>

<details>
<summary>vimeo/psalm (vimeo/psalm)</summary>

### [`v5.15.0`](https://togithub.com/vimeo/psalm/releases/tag/5.15.0)

[Compare
Source](https://togithub.com/vimeo/psalm/compare/5.14.1...5.15.0)

<!-- Release notes generated using configuration in .github/release.yml
at 5.x -->

#### What's Changed

##### Features

- Check if argument passed to isset() is not a variable by
[@&#8203;Nitamet](https://togithub.com/Nitamet) in
[https://github.com/vimeo/psalm/pull/10068](https://togithub.com/vimeo/psalm/pull/10068)
- Fix [#&#8203;9997](https://togithub.com/vimeo/psalm/issues/9997)
dynamic properties on SimpleXmlElement by
[@&#8203;ygottschalk](https://togithub.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/10049](https://togithub.com/vimeo/psalm/pull/10049)
- Nicer PHP version checking by
[@&#8203;Nitamet](https://togithub.com/Nitamet) in
[https://github.com/vimeo/psalm/pull/10129](https://togithub.com/vimeo/psalm/pull/10129)

##### Fixes

- Fixed `DOMDocument::load*` signatures by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10073](https://togithub.com/vimeo/psalm/pull/10073)
- make (s)printf error reporting more correct/literal by
[@&#8203;kkmuffme](https://togithub.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10088](https://togithub.com/vimeo/psalm/pull/10088)
- Fix parameter having `object` type in PHPDoc and only `&` in the
method's definition, used with code having an object calling it's method
with itself as an argument for mentioned parameter by
[@&#8203;kubawerlos](https://togithub.com/kubawerlos) in
[https://github.com/vimeo/psalm/pull/10104](https://togithub.com/vimeo/psalm/pull/10104)
- mysqli_field_seek returns true by
[@&#8203;kamil-tekiela](https://togithub.com/kamil-tekiela) in
[https://github.com/vimeo/psalm/pull/10107](https://togithub.com/vimeo/psalm/pull/10107)
- Fix bcdiv nullable scale stub by
[@&#8203;TheDevick](https://togithub.com/TheDevick) in
[https://github.com/vimeo/psalm/pull/10106](https://togithub.com/vimeo/psalm/pull/10106)
- Cleanup `test` command and `fixAll` action by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10108](https://togithub.com/vimeo/psalm/pull/10108)
- Correct type for `$enum->name` by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10109](https://togithub.com/vimeo/psalm/pull/10109)
- argv and argc were inconsistent in Context with VariableFetchAnalyzer
by [@&#8203;kkmuffme](https://togithub.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10093](https://togithub.com/vimeo/psalm/pull/10093)
- Fix `hash_pbkdf2` `$options` parameter by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10110](https://togithub.com/vimeo/psalm/pull/10110)
- Forbid faulty `nikic/php-parser` version by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10112](https://togithub.com/vimeo/psalm/pull/10112)
- `strip_tags()/$allowed_tags` can accept arrays since 7.4 by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10122](https://togithub.com/vimeo/psalm/pull/10122)
- Fix crash when assertion array is not a list by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10123](https://togithub.com/vimeo/psalm/pull/10123)
- Fix crash on array access to undefined class by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10134](https://togithub.com/vimeo/psalm/pull/10134)
- Correct exit code for invalid version format by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10135](https://togithub.com/vimeo/psalm/pull/10135)

#### New Contributors

- [@&#8203;Nitamet](https://togithub.com/Nitamet) made their first
contribution in
[https://github.com/vimeo/psalm/pull/10068](https://togithub.com/vimeo/psalm/pull/10068)
- [@&#8203;TheDevick](https://togithub.com/TheDevick) made their first
contribution in
[https://github.com/vimeo/psalm/pull/10106](https://togithub.com/vimeo/psalm/pull/10106)

**Full Changelog**:
vimeo/psalm@5.14.1...5.15.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/cerbos/cerbos-sdk-php).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi40MC4zIiwidXBkYXRlZEluVmVyIjoiMzYuNDMuMiIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oğuzhan Durgun <oguzhandurgun95@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
tcarrio referenced this pull request in open-feature/php-sdk Sep 21, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [vimeo/psalm](https://togithub.com/vimeo/psalm) | require-dev | minor
| `~5.14.0` -> `~5.15.0` |

---

### Release Notes

<details>
<summary>vimeo/psalm (vimeo/psalm)</summary>

### [`v5.15.0`](https://togithub.com/vimeo/psalm/releases/tag/5.15.0)

[Compare
Source](https://togithub.com/vimeo/psalm/compare/5.14.1...5.15.0)

<!-- Release notes generated using configuration in .github/release.yml
at 5.x -->

#### What's Changed

##### Features

- Check if argument passed to isset() is not a variable by
[@&#8203;Nitamet](https://togithub.com/Nitamet) in
[https://github.com/vimeo/psalm/pull/10068](https://togithub.com/vimeo/psalm/pull/10068)
- Fix [#&#8203;9997](https://togithub.com/vimeo/psalm/issues/9997)
dynamic properties on SimpleXmlElement by
[@&#8203;ygottschalk](https://togithub.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/10049](https://togithub.com/vimeo/psalm/pull/10049)
- Nicer PHP version checking by
[@&#8203;Nitamet](https://togithub.com/Nitamet) in
[https://github.com/vimeo/psalm/pull/10129](https://togithub.com/vimeo/psalm/pull/10129)

##### Fixes

- Fixed `DOMDocument::load*` signatures by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10073](https://togithub.com/vimeo/psalm/pull/10073)
- make (s)printf error reporting more correct/literal by
[@&#8203;kkmuffme](https://togithub.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10088](https://togithub.com/vimeo/psalm/pull/10088)
- Fix parameter having `object` type in PHPDoc and only `&` in the
method's definition, used with code having an object calling it's method
with itself as an argument for mentioned parameter by
[@&#8203;kubawerlos](https://togithub.com/kubawerlos) in
[https://github.com/vimeo/psalm/pull/10104](https://togithub.com/vimeo/psalm/pull/10104)
- mysqli_field_seek returns true by
[@&#8203;kamil-tekiela](https://togithub.com/kamil-tekiela) in
[https://github.com/vimeo/psalm/pull/10107](https://togithub.com/vimeo/psalm/pull/10107)
- Fix bcdiv nullable scale stub by
[@&#8203;TheDevick](https://togithub.com/TheDevick) in
[https://github.com/vimeo/psalm/pull/10106](https://togithub.com/vimeo/psalm/pull/10106)
- Cleanup `test` command and `fixAll` action by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10108](https://togithub.com/vimeo/psalm/pull/10108)
- Correct type for `$enum->name` by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10109](https://togithub.com/vimeo/psalm/pull/10109)
- argv and argc were inconsistent in Context with VariableFetchAnalyzer
by [@&#8203;kkmuffme](https://togithub.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10093](https://togithub.com/vimeo/psalm/pull/10093)
- Fix `hash_pbkdf2` `$options` parameter by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10110](https://togithub.com/vimeo/psalm/pull/10110)
- Forbid faulty `nikic/php-parser` version by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10112](https://togithub.com/vimeo/psalm/pull/10112)
- `strip_tags()/$allowed_tags` can accept arrays since 7.4 by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10122](https://togithub.com/vimeo/psalm/pull/10122)
- Fix crash when assertion array is not a list by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10123](https://togithub.com/vimeo/psalm/pull/10123)
- Fix crash on array access to undefined class by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10134](https://togithub.com/vimeo/psalm/pull/10134)
- Correct exit code for invalid version format by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10135](https://togithub.com/vimeo/psalm/pull/10135)

#### New Contributors

- [@&#8203;Nitamet](https://togithub.com/Nitamet) made their first
contribution in
[https://github.com/vimeo/psalm/pull/10068](https://togithub.com/vimeo/psalm/pull/10068)
- [@&#8203;TheDevick](https://togithub.com/TheDevick) made their first
contribution in
[https://github.com/vimeo/psalm/pull/10106](https://togithub.com/vimeo/psalm/pull/10106)

**Full Changelog**:
vimeo/psalm@5.14.1...5.15.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-feature/php-sdk).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi40My4yIiwidXBkYXRlZEluVmVyIjoiMzYuNDMuMiIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

causes crash release:fix The PR will be included in 'Fixes' section of the release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants