Skip to content

Commit e2b1f6c

Browse files
authored
Improve initialization of Heap blocks and type related vars (#2883)
1 parent 84955b5 commit e2b1f6c

File tree

47 files changed

+288
-112
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+288
-112
lines changed

src/CLR/CorLib/corlib_native_System_Array.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ HRESULT Library_corlib_native_System_Array::System_Collections_IList_get_Item___
1414
int index = stack.Arg1().NumericByRef().s4;
1515

1616
CLR_RT_HeapBlock ref;
17+
18+
memset(&ref, 0, sizeof(struct CLR_RT_HeapBlock));
19+
1720
NANOCLR_CHECK_HRESULT(ref.InitializeArrayReference(thisRef, index));
1821

1922
{
@@ -36,6 +39,9 @@ HRESULT Library_corlib_native_System_Array::System_Collections_IList_set_Item___
3639
int index = stack.Arg1().NumericByRef().s4;
3740

3841
CLR_RT_HeapBlock ref;
42+
43+
memset(&ref, 0, sizeof(struct CLR_RT_HeapBlock));
44+
3945
NANOCLR_CHECK_HRESULT(ref.InitializeArrayReference(thisRef, index));
4046

4147
NANOCLR_SET_AND_LEAVE(stack.Arg2().StoreToReference(ref, 0));

src/CLR/CorLib/corlib_native_System_Exception.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,22 @@ HRESULT Library_corlib_native_System_Exception::get_StackTrace___STRING(CLR_RT_S
4242
NATIVE_PROFILE_CLR_CORE();
4343
NANOCLR_HEADER();
4444

45-
CLR_RT_HeapBlock_Array *pArray;
46-
StackTrace *pStackTrace;
47-
CLR_RT_HeapBlock *pBlkString;
4845
char buf[512];
4946
char *strName;
5047
size_t iName;
48+
int depth = 0;
49+
50+
CLR_RT_HeapBlock_Array *pArray;
51+
StackTrace *pStackTrace;
52+
CLR_RT_HeapBlock *pBlkString;
5153
CLR_RT_HeapBlock tmpArray;
54+
CLR_RT_HeapBlock *pThis;
55+
56+
memset(&tmpArray, 0, sizeof(struct CLR_RT_HeapBlock));
5257
tmpArray.SetObjectReference(NULL);
5358
CLR_RT_ProtectFromGC gc(tmpArray);
54-
int depth = 0;
55-
CLR_RT_HeapBlock *pThis = stack.This();
59+
60+
pThis = stack.This();
5661
FAULT_ON_NULL(pThis);
5762

5863
pArray = pThis[FIELD___stackTrace].DereferenceArray();

src/CLR/CorLib/corlib_native_System_GC.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ HRESULT Library_corlib_native_System_GC::ReRegisterForFinalize___STATIC__VOID__O
3636
NATIVE_PROFILE_CLR_CORE();
3737
NANOCLR_HEADER();
3838

39-
CLR_RT_TypeDescriptor desc;
39+
CLR_RT_TypeDescriptor desc{};
4040
CLR_RT_HeapBlock *pObj = stack.Arg0().Dereference();
4141
FAULT_ON_NULL(pObj);
4242

src/CLR/CorLib/corlib_native_System_Number.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -962,7 +962,7 @@ HRESULT Library_corlib_native_System_Number::
962962
FAULT_ON_NULL(numberGroupSizes);
963963

964964
{
965-
CLR_RT_TypeDescriptor desc;
965+
CLR_RT_TypeDescriptor desc{};
966966
NANOCLR_CHECK_HRESULT(desc.InitializeFromObject(*value));
967967
NANOCLR_CHECK_HRESULT(value->PerformUnboxing(desc.m_handlerCls));
968968
}

src/CLR/CorLib/corlib_native_System_Object.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ HRESULT Library_corlib_native_System_Object::GetType___SystemType(CLR_RT_StackFr
3434
NATIVE_PROFILE_CLR_CORE();
3535
NANOCLR_HEADER();
3636

37-
CLR_RT_TypeDescriptor desc;
37+
CLR_RT_TypeDescriptor desc{};
3838
CLR_RT_ReflectionDef_Index idx;
3939
CLR_RT_HeapBlock &arg0 = stack.Arg0();
4040
CLR_RT_HeapBlock *pObj;

src/CLR/CorLib/corlib_native_System_Reflection_Assembly.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,8 @@ HRESULT Library_corlib_native_System_Reflection_Assembly::Load___STATIC__SystemR
295295

296296
header = (CLR_RECORD_ASSEMBLY *)array->GetFirstElement();
297297

298+
memset(&hbTimeout, 0, sizeof(struct CLR_RT_HeapBlock));
299+
298300
// !! need to cast to CLR_INT64 otherwise it wont setup a proper timeout
299301
hbTimeout.SetInteger((CLR_INT64)2 * CLR_RT_Thread::c_TimeQuantum_Milliseconds * TIME_CONVERSION__TO_MILLISECONDS);
300302

src/CLR/CorLib/corlib_native_System_Reflection_FieldInfo.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ HRESULT Library_corlib_native_System_Reflection_FieldInfo::SetValue___VOID__OBJE
1919
bool fValueType;
2020
CLR_RT_HeapBlock &srcVal = stack.Arg2();
2121
CLR_RT_HeapBlock val;
22+
23+
memset(&val, 0, sizeof(struct CLR_RT_HeapBlock));
2224
val.Assign(srcVal);
2325
CLR_RT_ProtectFromGC gc(val);
2426

src/CLR/CorLib/corlib_native_System_Reflection_RuntimeFieldInfo.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ HRESULT Library_corlib_native_System_Reflection_RuntimeFieldInfo::get_FieldType_
5454
NATIVE_PROFILE_CLR_CORE();
5555
NANOCLR_HEADER();
5656

57-
CLR_RT_TypeDescriptor desc;
57+
CLR_RT_TypeDescriptor desc{};
5858
CLR_RT_FieldDef_Instance fd;
5959
CLR_RT_HeapBlock *hbField = stack.Arg0().Dereference();
6060

@@ -86,6 +86,8 @@ HRESULT Library_corlib_native_System_Reflection_RuntimeFieldInfo::GetValue___OBJ
8686
CLR_RT_HeapBlock *obj;
8787
CLR_RT_HeapBlock dst;
8888

89+
memset(&dst, 0, sizeof(struct CLR_RT_HeapBlock));
90+
8991
NANOCLR_CHECK_HRESULT(Library_corlib_native_System_Reflection_FieldInfo::Initialize(stack, instFD, instTD, obj));
9092

9193
fd = instFD.m_target;

src/CLR/CorLib/corlib_native_System_RuntimeType.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ HRESULT Library_corlib_native_System_RuntimeType::GetElementType___SystemType(CL
183183
NATIVE_PROFILE_CLR_CORE();
184184
NANOCLR_HEADER();
185185

186-
CLR_RT_TypeDescriptor desc;
186+
CLR_RT_TypeDescriptor desc{};
187187
CLR_RT_TypeDescriptor descSub;
188188
CLR_RT_HeapBlock &top = stack.PushValueAndClear();
189189
CLR_RT_HeapBlock *hbType = stack.Arg0().Dereference();
@@ -342,7 +342,7 @@ HRESULT Library_corlib_native_System_RuntimeType::GetCustomAttributes(
342342
attributeEnumerator.GetCurrent(&instanceTypeDef);
343343

344344
// setup attribute parser
345-
CLR_RT_AttributeParser parser;
345+
CLR_RT_AttributeParser parser{};
346346
NANOCLR_CHECK_HRESULT(parser.Initialize(attributeEnumerator));
347347

348348
while (true)

src/CLR/CorLib/corlib_native_System_Runtime_CompilerServices_RuntimeHelpers.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ HRESULT Library_corlib_native_System_Runtime_CompilerServices_RuntimeHelpers::
145145
CLR_RT_HeapBlock tmp;
146146
CLR_UINT32 *ptr = (CLR_UINT32 *)ptrDst;
147147

148+
memset(&tmp, 0, sizeof(struct CLR_RT_HeapBlock));
149+
148150
for (; lenSrc; lenSrc--, ptr++)
149151
{
150152
NANOCLR_CHECK_HRESULT(tmp.SetFloatIEEE754(*ptr));
@@ -159,6 +161,8 @@ HRESULT Library_corlib_native_System_Runtime_CompilerServices_RuntimeHelpers::
159161
CLR_RT_HeapBlock tmp;
160162
CLR_UINT64 *ptr = (CLR_UINT64 *)ptrDst;
161163

164+
memset(&tmp, 0, sizeof(struct CLR_RT_HeapBlock));
165+
162166
for (; lenSrc; lenSrc--, ptr++)
163167
{
164168
NANOCLR_CHECK_HRESULT(tmp.SetDoubleIEEE754(*ptr));

0 commit comments

Comments
 (0)