Repository navigation
fix(type-utils): preventing isUnsafeAssignment infinite recursive calls - #8237
Conversation
|
Thanks for the PR, @yeonjuan! typescript-eslint is a 100% community driven project, and we are incredibly grateful that you are contributing to that community. The core maintainers work on this in their personal time, so please understand that it may not be possible for them to review your work immediately. Thanks again! 🙏 Please, if you or your company is finding typescript-eslint valuable, help us sustain the project by sponsoring it transparently on https://opencollective.com/typescript-eslint. |
✅ Deploy Preview for typescript-eslint ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
JoshuaKGoldberg
left a comment
There was a problem hiding this comment.
LGTM, thanks for the double-fix! 🚀 🚀
Just suggesting changes for the one refactor. If I missed something on it then no worries we can ship as-is.
| visited = new Map<ts.Type, Set<ts.Type>>(), | ||
| ): false | { sender: ts.Type; receiver: ts.Type } { |
There was a problem hiding this comment.
[Refactor] This code works great as-is, but has a couple of little paper cuts IMO:
- Each call now has to check whether
visitedexists (this is not really a big issue at all, certainly not a blocker) - Callers now can see this
visitedMapeven though there's no reason for them to provide it
What do you think about making a non-exported worker function so the public signature doesn't need to have visited?
senderNode: TSESTree.Node | null,
): false | { sender: ts.Type; receiver: ts.Type } {
return isUnsafeAssignmentWorker(type, receiver, checker, senderNode, new Map());There was a problem hiding this comment.
What do you think about making a non-exported worker function so the public signature doesn't need to have visited?
I think it's much better. let me refactor it! :)


PR Checklist
Overview
This PR prevents infinite recursive calls to
isUnsafeAssignmentfor code with circular references.no-unsafe-argument( #7298, #5014)playground
no-unsafe-assignment(unreported issue)playground