From 95ff1f1d803ba52235fd827218bfdd606327abeb Mon Sep 17 00:00:00 2001 From: "Stefan F." <32997632+stefan301@users.noreply.github.com> Date: Wed, 4 Feb 2026 13:13:01 +0100 Subject: [PATCH] [c#] Fix Table __vector_as_array correct len calc (#8911) * fix for https://github.com/google/flatbuffers/issues/8759 __vector_as_array calling ByteBuffer.ToArray with the length in bytes by multiplying len with ByteBuffer.Sizeof and FlatBuffersExampleTests extended to call GetVectorOfLongsArray/GetVectorOfDoublesArray which failed without the fix * first try to repair build-dotnet-windows * syntax error fixed * Update solution creation command in build workflow add --format sln to the dotnet new command, maybe it is currently creating a .slnx instead? --- .github/workflows/build.yml | 5 ++--- net/FlatBuffers/Table.cs | 2 +- tests/FlatBuffers.Test/FlatBuffersExampleTests.cs | 14 +++++++++++++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3ca3f118a..30e0cecdf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -197,8 +197,7 @@ jobs: configuration: [ '', '-p:UnsafeByteBuffer=true', - # Fails two tests currently. - #'-p:EnableSpanT=true,UnsafeByteBuffer=true' + '-p:EnableSpanT=true,UnsafeByteBuffer=true' ] steps: - uses: actions/checkout@v6 @@ -209,7 +208,7 @@ jobs: - name: Build run: | cd tests\FlatBuffers.Test - dotnet new sln --force --name FlatBuffers.Test + dotnet new sln --force --name FlatBuffers.Test --format sln dotnet sln FlatBuffers.Test.sln add FlatBuffers.Test.csproj dotnet build -c Release ${{matrix.configuration}} FlatBuffers.Test.sln - name: Run net6.0 diff --git a/net/FlatBuffers/Table.cs b/net/FlatBuffers/Table.cs index d6d9d09fb..5dde28e95 100644 --- a/net/FlatBuffers/Table.cs +++ b/net/FlatBuffers/Table.cs @@ -150,7 +150,7 @@ namespace Google.FlatBuffers var pos = this.__vector(o); var len = this.__vector_len(o); - return bb.ToArray(pos, len); + return bb.ToArray(pos, len * ByteBuffer.SizeOf()); } // Initialize any Table-derived type to point to the union at the given offset. diff --git a/tests/FlatBuffers.Test/FlatBuffersExampleTests.cs b/tests/FlatBuffers.Test/FlatBuffersExampleTests.cs index dc541be14..d5774571c 100644 --- a/tests/FlatBuffers.Test/FlatBuffersExampleTests.cs +++ b/tests/FlatBuffers.Test/FlatBuffersExampleTests.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright 2014 Google Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -90,6 +90,9 @@ namespace Google.FlatBuffers.Test fbb.AddOffset(test1.Value); var testArrayOfString = fbb.EndVector(); + var longsVector = Monster.CreateVectorOfLongsVector(fbb, new long[] { 1, 100, 10000, 1000000, 100000000 }); + var doublesVector = Monster.CreateVectorOfDoublesVector(fbb, new double[] { -1.7976931348623157e+308, 0, 1.7976931348623157e+308 }); + Monster.StartMonster(fbb); Monster.AddPos(fbb, Vec3.CreateVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0, Color.Green, (short)5, (sbyte)6)); @@ -102,6 +105,8 @@ namespace Google.FlatBuffers.Test Monster.AddTestarrayofstring(fbb, testArrayOfString); Monster.AddTestbool(fbb, true); Monster.AddTestarrayoftables(fbb, sortMons); + Monster.AddVectorOfLongs(fbb, longsVector); + Monster.AddVectorOfDoubles(fbb, doublesVector); var mon = Monster.EndMonster(fbb); if (sizePrefix) @@ -285,6 +290,13 @@ namespace Google.FlatBuffers.Test Assert.IsTrue(monster.GetTestarrayofboolsBytes().HasValue); } #endif + + var longArray = monster.GetVectorOfLongsArray(); + Assert.AreEqual(5, longArray.Length); + Assert.AreEqual(100, longArray[1]); + + var doublesArray = monster.GetVectorOfDoublesArray(); + Assert.AreEqual(3, doublesArray.Length); } [FlatBuffersTestMethod]