Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb52823b

Browse files
committed
fixed crash in ToArray when sequence explicitly denies __len__
port of8e1d4db
1 parentea61b03 commitb52823b

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

‎src/runtime/converter.cs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -882,17 +882,26 @@ private static bool ToArray(IntPtr value, Type obType, out object result, bool s
882882
// See https://docs.microsoft.com/en-us/dotnet/api/system.type.makegenerictype#System_Type_MakeGenericType_System_Type
883883
varconstructedListType=typeof(List<>).MakeGenericType(elementType);
884884
boolIsSeqObj=Runtime.PySequence_Check(value);
885+
object[]constructorArgs=Array.Empty<object>();
885886
if(IsSeqObj)
886887
{
887888
varlen=Runtime.PySequence_Size(value);
888-
list=(IList)Activator.CreateInstance(constructedListType,newObject[]{(int)len});
889-
}
890-
else
891-
{
892-
// CreateInstance can throw even if MakeGenericType succeeded.
893-
// See https://docs.microsoft.com/en-us/dotnet/api/system.activator.createinstance#System_Activator_CreateInstance_System_Type_
894-
list=(IList)Activator.CreateInstance(constructedListType);
889+
if(len>=0)
890+
{
891+
if(len<=int.MaxValue)
892+
{
893+
constructorArgs=newobject[]{(int)len};
894+
}
895+
}
896+
else
897+
{
898+
// for the sequences, that explicitly deny calling __len__()
899+
Exceptions.Clear();
900+
}
895901
}
902+
// CreateInstance can throw even if MakeGenericType succeeded.
903+
// See https://docs.microsoft.com/en-us/dotnet/api/system.activator.createinstance#System_Activator_CreateInstance_System_Type_
904+
list=(IList)Activator.CreateInstance(constructedListType,args:constructorArgs);
896905
}
897906
catch(Exceptione)
898907
{

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp