Skip to content

Commit 94c22bb

Browse files
authored
Fix: Assert failure: Thread::IsObjRefValid (#118307)
Fixes #117961
1 parent 9f3074c commit 94c22bb

File tree

7 files changed

+8
-13
lines changed

7 files changed

+8
-13
lines changed

src/coreclr/vm/callsiteinspect.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ namespace
200200

201201
// return the object so it can be stored in the frame and
202202
// propagated to the root set
203-
*(OBJECTREF*)&ret = (*src);
203+
*(Object**)&ret = OBJECTREFToObject(*src);
204204
}
205205
}
206206
else if (CorTypeInfo::IsObjRef(typ))
@@ -211,7 +211,7 @@ namespace
211211
if (pvDest)
212212
SetObjectReference((OBJECTREF *)pvDest, *src);
213213

214-
*(OBJECTREF*)&ret = (*src);
214+
*(Object**)&ret = OBJECTREFToObject(*src);
215215
}
216216
else
217217
{

src/coreclr/vm/clrtocomcall.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ UINT32 CLRToCOMEventCallWorker(CLRToCOMMethodFrame* pFrame, CLRToCOMCallMethodDe
347347
MethodDescCallSite eventProvider(pEvProvMD, &gc.EventProviderObj);
348348

349349
// Retrieve the event handler passed in.
350-
OBJECTREF EventHandlerObj = *(OBJECTREF*)(pFrame->GetTransitionBlock() + ArgItr.GetNextOffset());
350+
OBJECTREF EventHandlerObj = ObjectToOBJECTREF(*(Object**)(pFrame->GetTransitionBlock() + ArgItr.GetNextOffset()));
351351

352352
ARG_SLOT EventMethArgs[] =
353353
{

src/coreclr/vm/comtoclrcall.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,7 @@ inline static void InvokeStub(ComCallMethodDesc *pCMD, PCODE pManagedTarget, OBJ
174174
ARG_SLOT retVal = 0;
175175
PCODE pStubEntryPoint = pCMD->GetILStub();
176176

177-
INT_PTR dangerousThis;
178-
*(OBJECTREF *)&dangerousThis = orThis;
177+
INT_PTR dangerousThis = (INT_PTR)OBJECTREFToObject(orThis);
179178

180179
DWORD dwStackSlots = pCMD->GetNumStackBytes() / TARGET_POINTER_SIZE;
181180

src/coreclr/vm/eedbginterfaceimpl.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,7 @@ void* EEDbgInterfaceImpl::GetObjectFromHandle(OBJECTHANDLE handle)
173173
}
174174
CONTRACTL_END;
175175

176-
void *v;
177-
178-
*((OBJECTREF *)&v) = *(OBJECTREF *)handle;
179-
180-
return v;
176+
return OBJECTREFToObject(ObjectFromHandle(handle));
181177
}
182178

183179
OBJECTHANDLE EEDbgInterfaceImpl::GetHandleFromObject(void *obj,

src/coreclr/vm/field.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ class FieldDesc
450450
OBJECTREF GetStaticOBJECTREF()
451451
{
452452
WRAPPER_NO_CONTRACT;
453-
return *(OBJECTREF *)GetCurrentStaticAddress();
453+
return ObjectToOBJECTREF(*(Object**)GetCurrentStaticAddress());
454454
}
455455

456456
VOID SetStaticOBJECTREF(OBJECTREF objRef);

src/coreclr/vm/interpexec.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2202,7 +2202,7 @@ do { \
22022202
COMPlusThrow(kIndexOutOfRangeException);
22032203

22042204
uint8_t* pData = arr->GetDataPtr();
2205-
OBJECTREF elemRef = *(OBJECTREF*)(pData + idx * sizeof(OBJECTREF));
2205+
OBJECTREF elemRef = ObjectToOBJECTREF(*(Object**)(pData + idx * sizeof(OBJECTREF)));
22062206
LOCAL_VAR(ip[1], OBJECTREF) = elemRef;
22072207
ip += 4;
22082208
break;

src/coreclr/vm/reflectioninvocation.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -617,7 +617,7 @@ extern "C" void QCALLTYPE RuntimeMethodHandle_InvokeMethod(
617617
// We have a special case for Strings...The object is returned...
618618
if (fCtorOfVariableSizedObject) {
619619
PVOID pReturnValue = &callDescrData.returnValue;
620-
gc.retVal = *(OBJECTREF *)pReturnValue;
620+
gc.retVal = ObjectToOBJECTREF(*(Object**)pReturnValue);
621621
}
622622

623623
// If it is a Nullable<T>, box it using Nullable<T> conventions.

0 commit comments

Comments
 (0)