diff --git a/Source/AssetRipper.SourceGenerated.Extensions/MeshData.cs b/Source/AssetRipper.SourceGenerated.Extensions/MeshData.cs index 1337e918c..ab4c60a7c 100644 --- a/Source/AssetRipper.SourceGenerated.Extensions/MeshData.cs +++ b/Source/AssetRipper.SourceGenerated.Extensions/MeshData.cs @@ -185,6 +185,6 @@ public readonly record struct MeshData( [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] private static T TryGetAtIndex(T[]? array, uint index) where T : struct { - return array is null ? default : array[index]; + return array is null or { Length: 0 } ? default : array[index]; } } diff --git a/Source/AssetRipper.Tests/MeshDataTests.cs b/Source/AssetRipper.Tests/MeshDataTests.cs new file mode 100644 index 000000000..1d0e93563 --- /dev/null +++ b/Source/AssetRipper.Tests/MeshDataTests.cs @@ -0,0 +1,32 @@ +using AssetRipper.SourceGenerated.Extensions; + +namespace AssetRipper.Tests; + +internal class MeshDataTests +{ + [Test] + public void AccessingNullUV2DoesNotThrow() + { + MeshData meshData = MeshData.CreateTriangleMesh() with + { + UV2 = null + }; + Assert.DoesNotThrow(() => + { + meshData.TryGetUV2AtIndex(0); + }); + } + + [Test] + public void AccessingEmptyUV2DoesNotThrow() + { + MeshData meshData = MeshData.CreateTriangleMesh() with + { + UV2 = [] + }; + Assert.DoesNotThrow(() => + { + meshData.TryGetUV2AtIndex(0); + }); + } +}