dotnet / runtime

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

System.Numerics.Tensors SetSlice safety #106535

Closed soerenwolfers closed 3 weeks ago

soerenwolfers commented 2 months ago

Description

new TensorSpan<double>(array: myArrayOfLength1, lengths: new IntPtr[] { 2 }, strides: new IntPtr[]{ 0 })
.SetSlice(new TensorSpan<double>(new double[] {1d, 2d}), new NRange[] { ..2 });

writes the 2d to &myArrayOfLength1 + 1 wherever that may be.

Reproduction Steps

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

namespace ConsoleApp1;

public abstract class Program
{
    [Experimental("SYSLIB5001")]
    public static unsafe void Main()
    {
        var ar = new double[1];
        fixed (double* pointer = ar)
        {
            var a = new TensorSpan<double>(ar.AsSpan()[..1], new IntPtr[] { 2 }, new IntPtr[]{ 0 });
            a.SetSlice(new TensorSpan<double>(new double[] {1, 3}), new NRange[] { ..2 });
            var x = *pointer;
            var y = *(pointer + 1);
            Console.WriteLine((x, y));  // (1, 2)
        }
    }
}

Expected behavior

2d should be written to the single entry of the TensorSpan.

Actual behavior

.

Regression?

No response

Known Workarounds

No response

Configuration

.NET8, Ubuntu22, x64

Other information

No response

dotnet-policy-service[bot] commented 2 months 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 2 months ago

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

jeffhandley commented 3 weeks ago

This was fixed by @michaelgsharp in #107852 and backported to .NET 9 in #108282.