dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
14.95k stars 4.65k forks source link

System.Numerics.Tensors constructor safety #106534

Open soerenwolfers opened 4 weeks ago

soerenwolfers commented 4 weeks ago

Description

The innocuous looking

var a = new TensorSpan<double>(array: new[] {1});

performs an unsafe cast, such that

a[0] == double.Epsilon

for me and even that is only true because the surrounding 4 bytes happen to be zeros.

Reproduction Steps

using System.Diagnostics.CodeAnalysis;
using System.Numerics.Tensors;

namespace ConsoleApp1;

public abstract class Program
{
    [Experimental("SYSLIB5001")]
    public static void Main()
    {
        var a = new TensorSpan<double>(array: new[] {1});
        Console.WriteLine(a[new IntPtr[] { 0 }]);
    }
}

Expected behavior

There should be no public TensorSpan<T>(Array array) constructor.

Actual behavior

.

Regression?

No response

Known Workarounds

No response

Configuration

.Net8, Ubuntu22, x64

Other information

No response

dotnet-policy-service[bot] commented 4 weeks ago

Tagging subscribers to this area: @dotnet/area-system-numerics See info in area-owners.md if you want to be subscribed.

dotnet-policy-service[bot] commented 4 weeks ago

Tagging subscribers to this area: @dotnet/area-system-numerics-tensors See info in area-owners.md if you want to be subscribed.