fixed crash in ToArray when sequence explicitly denies __len__ · pythonnet/pythonnet@8e1d4db
@@ -761,6 +761,11 @@ private static bool ToArray(IntPtr value, Type obType, out object result, bool s
761761762762bool IsSeqObj = Runtime.PySequence_Check(value);
763763var len = IsSeqObj ? Runtime.PySequence_Size(value) : -1;
764+if (IsSeqObj && len < 0)
765+{
766+// for the sequences, that explicitly deny calling __len__()
767+Exceptions.Clear();
768+}
764769765770var IterObject = Runtime.PyObject_GetIter(new BorrowedReference(value));
766771@@ -776,8 +781,9 @@ private static bool ToArray(IntPtr value, Type obType, out object result, bool s
776781777782var listType = typeof(List<>);
778783var constructedListType = listType.MakeGenericType(elementType);
779-IList list = IsSeqObj ? (IList) Activator.CreateInstance(constructedListType, new Object[] {(int) len}) :
780-(IList) Activator.CreateInstance(constructedListType);
784+IList list = IsSeqObj && len > 0
785+? (IList) Activator.CreateInstance(constructedListType, args: (int)len)
786+: (IList) Activator.CreateInstance(constructedListType);
781787NewReference item;
782788783789while (!(item = Runtime.PyIter_Next(IterObject)).IsNull())