Fix resolving IWeakReference from different context #1301
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Taking the findings from #1300 and putting in a slightly different fix. Reusing the test case from it.
For weak references, when they are accessed from a different context, we use the agile reference to resolve a pointer in the current context. This ptr doesn't necessarily point to the same interface / vtbl from when we initially created it. Instead, it can point to IUnknown and can cause unexpected issues when we call it with the assumption it is the IWeakReference vftbl. This fix ensures we retrieve the pointer on the right context by making sure IObjectReference is aware of the IID it was initially created for which means it can use it when resolving the agile reference.