Skip to content

Conversation

@AaronRobinsonMSFT
Copy link
Member

In #112375 a fix was checked in with insufficient validation. An issue was reported offline that uncovered a deficiency in that fix and the validation. This PR revisits that issue, adds the needed comprehensive testing, and adds comments on the utility of the dynamic interface map.

Re fixes #112371

This was originally fixed naively which resulted in an incomplete fix.
The activation path issues remained and this current fix addresses
the underlying issue - adding IDIC to __ComObject.
@dotnet-policy-service
Copy link
Contributor

Tagging subscribers to this area: @dotnet/interop-contrib
See info in area-owners.md if you want to be subscribed.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Revisits the fix for COM interop casting involving System.__ComObject and the dynamic interface map, adding broader validation and updating test infrastructure to cover the previously missed scenario.

Changes:

  • Updates COM test contracts and native/managed test clients to use a revised interface shape for validating COM interface casting behavior.
  • Extends COM interop tests to validate the expected interfaces are present on activated COM classes.
  • Refines MethodTable::HasDynamicInterfaceMap() logic and adds explanatory comments about the dynamic interface map’s intent and usage.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/tests/Interop/COM/ServerContracts/Server.Contracts.h Removes IInterface2 and updates Marshal_Interface to return IInterface1.
src/tests/Interop/COM/ServerContracts/Server.Contracts.cs Adjusts managed contract interfaces to align with updated COM interop validation scenarios.
src/tests/Interop/COM/NativeServer/MiscTypesTesting.h Updates native COM server to implement/return IInterface1 for interface marshalling tests.
src/tests/Interop/COM/NativeClients/MiscTypes/MiscTypes.cpp Updates native COM client test to use IInterface1 in interface marshalling validation.
src/tests/Interop/COM/NETClients/MiscTypes/Program.cs Adds/updates managed COM client validation for interface identity/casting behavior.
src/coreclr/vm/methodtable.h Updates HasDynamicInterfaceMap() logic and documents the rationale/usage in COM interop.

@AaronRobinsonMSFT
Copy link
Member Author

/ba-g Known issue with Windows arm64 machines.

@AaronRobinsonMSFT AaronRobinsonMSFT merged commit 59b270c into dotnet:main Jan 29, 2026
103 of 107 checks passed
@github-project-automation github-project-automation bot moved this to Done in AppModel Jan 29, 2026
@AaronRobinsonMSFT
Copy link
Member Author

/backport to release/10.0

@github-actions
Copy link
Contributor

Started backporting to release/10.0 (link to workflow run)

@AaronRobinsonMSFT AaronRobinsonMSFT deleted the runtime_112375_redux branch January 29, 2026 17:44
steveisok pushed a commit that referenced this pull request Feb 2, 2026
…edux) (#123762)

Backport of #123725 to release/10.0

/cc @AaronRobinsonMSFT

## Customer Impact

- [x] Customer reported
- [ ] Found internally

In #112375 a fix was checked in
with insufficient validation. An issue was reported offline that
uncovered a deficiency in that fix and the validation. This PR revisits
that issue for .NET 10, adds the missing test cases, and adds comments
on the utility of the dynamic interface map.

The regression is the casting of built-in COM interop objects to some
managed (COM and non-COM) interfaces, depending on how the COM object
enters the runtime. Occasionally there are workarounds, but in the most
recent offline issue the workaround is very impactful.

Re fixes #112371

## Regression

- [x] Yes
- [ ] No

The PR that originally started this all off was
#105965.

## Testing

Added and verified tests for the original reported test and the one
described offline - all now pass. Both the original OP reported issue
and most recent issue were verifiied fixed with this change.

## Risk

Low to Medium. The risk here isn't destabilizing issue, but rather
introducing or not fixing a regression on some important niche scenario
from the original change, #105965.
This change is also considered low risk because this change represents a
much more targeted change relative to the change that introduced the
regression (that is, the additional of a new interface on the
`__ComObject` when previously it had none).

---------

Co-authored-by: Aaron R Robinson <arobins@microsoft.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

2 participants