Skip to content

Commit 704f023

Browse files
authored
Fix incorrect CCW decoding in GetObjectForCCW (#61193)
* Fix incorrect CCW decoding in GetObjectForCCW * Fix linux/mac build
1 parent 97ce13d commit 704f023

File tree

3 files changed

+48
-10
lines changed

3 files changed

+48
-10
lines changed

src/coreclr/debug/daccess/dacdbiimpl.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4898,13 +4898,20 @@ VMPTR_OBJECTHANDLE DacDbiInterfaceImpl::GetObjectForCCW(CORDB_ADDRESS ccwPtr)
48984898

48994899
OBJECTHANDLE ohCCW = NULL;
49004900

4901+
#ifdef FEATURE_COMWRAPPERS
4902+
if (DACTryGetComWrappersHandleFromCCW(ccwPtr, &ohCCW) != S_OK)
4903+
{
4904+
#endif
49014905
#ifdef FEATURE_COMINTEROP
49024906
ComCallWrapper *pCCW = DACGetCCWFromAddress(ccwPtr);
49034907
if (pCCW)
49044908
{
49054909
ohCCW = pCCW->GetObjectHandle();
49064910
}
49074911
#endif
4912+
#ifdef FEATURE_COMWRAPPERS
4913+
}
4914+
#endif
49084915

49094916
VMPTR_OBJECTHANDLE vmObjHandle;
49104917
vmObjHandle.SetDacTargetPtr(ohCCW);

src/coreclr/debug/daccess/dacimpl.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1498,6 +1498,11 @@ class ClrDataAccess
14981498

14991499
static LONG s_procInit;
15001500

1501+
protected:
1502+
#ifdef FEATURE_COMWRAPPERS
1503+
HRESULT DACTryGetComWrappersHandleFromCCW(CLRDATA_ADDRESS ccwPtr, OBJECTHANDLE* objHandle);
1504+
#endif
1505+
15011506
public:
15021507
// APIs for picking up the info needed for a debugger to look up an ngen image or IL image
15031508
// from it's search path.

src/coreclr/debug/daccess/request.cpp

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4156,41 +4156,67 @@ TADDR ClrDataAccess::DACGetManagedObjectWrapperFromCCW(CLRDATA_ADDRESS ccwPtr)
41564156
return managedObjectWrapperPtr;
41574157
}
41584158

4159-
HRESULT ClrDataAccess::DACTryGetComWrappersObjectFromCCW(CLRDATA_ADDRESS ccwPtr, OBJECTREF* objRef)
4159+
HRESULT ClrDataAccess::DACTryGetComWrappersHandleFromCCW(CLRDATA_ADDRESS ccwPtr, OBJECTHANDLE* objHandle)
41604160
{
4161-
if (ccwPtr == 0 || objRef == NULL)
4162-
return E_INVALIDARG;
4161+
HRESULT hr = E_FAIL;
4162+
TADDR ccw, managedObjectWrapperPtr;
4163+
ULONG32 bytesRead = 0;
4164+
OBJECTHANDLE handle;
41634165

4164-
SOSDacEnter();
4166+
if (ccwPtr == 0 || objHandle == NULL)
4167+
{
4168+
hr = E_INVALIDARG;
4169+
goto ErrExit;
4170+
}
41654171

41664172
if (!DACIsComWrappersCCW(ccwPtr))
41674173
{
41684174
hr = E_FAIL;
41694175
goto ErrExit;
41704176
}
41714177

4172-
TADDR ccw = CLRDATA_ADDRESS_TO_TADDR(ccwPtr);
4178+
ccw = CLRDATA_ADDRESS_TO_TADDR(ccwPtr);
41734179

41744180
// Return ManagedObjectWrapper as an OBJECTHANDLE. (The OBJECTHANDLE is guaranteed to live at offset 0).
4175-
TADDR managedObjectWrapperPtr = DACGetManagedObjectWrapperFromCCW(ccwPtr);
4181+
managedObjectWrapperPtr = DACGetManagedObjectWrapperFromCCW(ccwPtr);
41764182
if (managedObjectWrapperPtr == NULL)
41774183
{
41784184
hr = E_FAIL;
41794185
goto ErrExit;
41804186
}
41814187

4182-
ULONG32 bytesRead = 0;
4183-
OBJECTHANDLE handle;
41844188
IfFailGo(m_pTarget->ReadVirtual(managedObjectWrapperPtr, (PBYTE)&handle, sizeof(OBJECTHANDLE), &bytesRead));
41854189
if (bytesRead != sizeof(OBJECTHANDLE))
41864190
{
41874191
hr = E_FAIL;
41884192
goto ErrExit;
41894193
}
41904194

4191-
*objRef = ObjectFromHandle(handle);
4195+
*objHandle = handle;
41924196

4193-
SOSDacLeave();
4197+
return S_OK;
4198+
4199+
ErrExit: return hr;
4200+
}
4201+
4202+
HRESULT ClrDataAccess::DACTryGetComWrappersObjectFromCCW(CLRDATA_ADDRESS ccwPtr, OBJECTREF* objRef)
4203+
{
4204+
HRESULT hr = E_FAIL;
4205+
4206+
if (ccwPtr == 0 || objRef == NULL)
4207+
{
4208+
hr = E_INVALIDARG;
4209+
goto ErrExit;
4210+
}
4211+
4212+
OBJECTHANDLE handle;
4213+
if (DACTryGetComWrappersHandleFromCCW(ccwPtr, &handle) != S_OK)
4214+
{
4215+
hr = E_FAIL;
4216+
goto ErrExit;
4217+
}
4218+
4219+
*objRef = ObjectFromHandle(handle);
41944220

41954221
return S_OK;
41964222

0 commit comments

Comments
 (0)