diff --git a/csharp/src/Apache.Arrow/Ipc/ArrowStreamWriter.cs b/csharp/src/Apache.Arrow/Ipc/ArrowStreamWriter.cs index 1b83735925556..a7e4c13525236 100644 --- a/csharp/src/Apache.Arrow/Ipc/ArrowStreamWriter.cs +++ b/csharp/src/Apache.Arrow/Ipc/ArrowStreamWriter.cs @@ -165,8 +165,13 @@ public void Visit(ListArray array) _buffers.Add(CreateBitmapBuffer(array.NullBitmapBuffer, array.Offset, array.Length)); _buffers.Add(CreateBuffer(GetZeroBasedValueOffsets(array.ValueOffsetsBuffer, array.Offset, array.Length))); - int valuesOffset = array.ValueOffsets[0]; - int valuesLength = array.ValueOffsets[array.Length] - valuesOffset; + int valuesOffset = 0; + int valuesLength = 0; + if (array.Length > 0) + { + valuesOffset = array.ValueOffsets[0]; + valuesLength = array.ValueOffsets[array.Length] - valuesOffset; + } var values = array.Values; if (valuesOffset > 0 || valuesLength < values.Length) @@ -206,8 +211,13 @@ public void Visit(BinaryArray array) _buffers.Add(CreateBitmapBuffer(array.NullBitmapBuffer, array.Offset, array.Length)); _buffers.Add(CreateBuffer(GetZeroBasedValueOffsets(array.ValueOffsetsBuffer, array.Offset, array.Length))); - int valuesOffset = array.ValueOffsets[0]; - int valuesLength = array.ValueOffsets[array.Length] - valuesOffset; + int valuesOffset = 0; + int valuesLength = 0; + if (array.Length > 0) + { + valuesOffset = array.ValueOffsets[0]; + valuesLength = array.ValueOffsets[array.Length] - valuesOffset; + } _buffers.Add(CreateSlicedBuffer(array.ValueBuffer, valuesOffset, valuesLength)); } diff --git a/csharp/test/Apache.Arrow.Tests/ArrowFileWriterTests.cs b/csharp/test/Apache.Arrow.Tests/ArrowFileWriterTests.cs index 449760364364c..297cb5e181cd3 100644 --- a/csharp/test/Apache.Arrow.Tests/ArrowFileWriterTests.cs +++ b/csharp/test/Apache.Arrow.Tests/ArrowFileWriterTests.cs @@ -245,17 +245,5 @@ public async Task WriteListArrayWithEmptyOffsets() await ValidateRecordBatchFile(stream, recordBatch, strictCompare: false); } - - private static void Shuffle(int[] values, Random random) - { - var length = values.Length; - for (int i = 0; i < length - 1; ++i) - { - var j = random.Next(i, length); - var tmp = values[i]; - values[i] = values[j]; - values[j] = tmp; - } - } } }