Skip to content
This repository was archived by the owner on Jun 5, 2019. It is now read-only.

Commit 3e46196

Browse files
committed
Merge pull request #176 from mortezag/fixStringNullCtor
Fix new String(null)
2 parents e538df5 + ecb08a8 commit 3e46196

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

CLR/Libraries/CorLib/corlib_native_System_String.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -547,14 +547,23 @@ HRESULT Library_corlib_native_System_String::FromCharArray( CLR_RT_StackFrame& s
547547
CLR_RT_HeapBlock_Array* array;
548548
CLR_UINT32 len;
549549

550-
array = stack.Arg1().DereferenceArray(); if(!array) TINYCLR_SET_AND_LEAVE(S_OK);
551-
len = array->m_numOfElements ;
550+
array = stack.Arg1().DereferenceArray();
551+
if (!array || array->m_numOfElements == 0)
552+
{
553+
TINYCLR_SET_AND_LEAVE(CLR_RT_HeapBlock_String::CreateInstance(stack.Arg0(), ""));
554+
}
555+
else
556+
{
557+
len = array->m_numOfElements;
552558

553-
if(length == -1) length = len - startIndex;
559+
if (length == -1)
560+
length = len - startIndex;
554561

555-
if(CLR_RT_HeapBlock_Array::CheckRange( startIndex, length, len ) == false) TINYCLR_SET_AND_LEAVE(CLR_E_OUT_OF_RANGE);
562+
if (CLR_RT_HeapBlock_Array::CheckRange(startIndex, length, len) == false)
563+
TINYCLR_SET_AND_LEAVE(CLR_E_OUT_OF_RANGE);
556564

557-
TINYCLR_SET_AND_LEAVE(CLR_RT_HeapBlock_String::CreateInstance( stack.Arg0(), (CLR_UINT16*)array->GetElement( startIndex ), length ));
565+
TINYCLR_SET_AND_LEAVE(CLR_RT_HeapBlock_String::CreateInstance(stack.Arg0(), (CLR_UINT16*)array->GetElement(startIndex), length));
566+
}
558567

559568
TINYCLR_NOCLEANUP();
560569
}

Test/Platform/Tests/CLR/mscorlib/systemlib/systemlib2/SystemStringTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ public MFTestResults Ctor_Test()
6363
str = new string(new char[0]);
6464
testResult &= (str == string.Empty);
6565

66+
Log.Comment("null");
67+
str = new string(null);
68+
testResult &= (str == string.Empty);
69+
6670
return (testResult ? MFTestResults.Pass : MFTestResults.Fail);
6771
}
6872
[TestMethod]

0 commit comments

Comments
 (0)