diff --git a/src/protobuf-net-data/Internal/RecordReader.cs b/src/protobuf-net-data/Internal/RecordReader.cs index 2de70a4..e721213 100644 --- a/src/protobuf-net-data/Internal/RecordReader.cs +++ b/src/protobuf-net-data/Internal/RecordReader.cs @@ -22,7 +22,7 @@ public static bool ReadRecord(ProtoReaderContext context) return false; } - if (context.Buffers == null) + if (context.Buffers == null || context.Buffers.Length < context.Columns.Count) { context.Buffers = new ProtoDataBuffer[context.Columns.Count]; diff --git a/test/protobuf-net-data.Tests/ProtoDataReaderTests.TheNextResultMethod.cs b/test/protobuf-net-data.Tests/ProtoDataReaderTests.TheNextResultMethod.cs index ca48cd6..7a64e3b 100644 --- a/test/protobuf-net-data.Tests/ProtoDataReaderTests.TheNextResultMethod.cs +++ b/test/protobuf-net-data.Tests/ProtoDataReaderTests.TheNextResultMethod.cs @@ -113,6 +113,33 @@ public void ShouldChangeColumns() Assert.Equal(dataSet.Tables[1].Columns[0].ColumnName, dataReader.GetName(0)); } + + [Fact] + public void ShouldExtendBuffers() + { + // Act + var dataSet = new DataSet(); + + dataSet.Tables.Add(new DataTable()); + dataSet.Tables.Add(new DataTable()); + + dataSet.Tables[0].Columns.Add("foo", typeof(string)); + dataSet.Tables[1].Columns.Add("bar", typeof(string)); + dataSet.Tables[1].Columns.Add("baz", typeof(string)); + + dataSet.Tables[0].Rows.Add("qux"); + dataSet.Tables[1].Rows.Add("quux", "quuz"); + + var dataReader = this.ToProtoDataReader(dataSet.CreateDataReader()); + + // Act + dataReader.NextResult(); + + // Assert + dataReader.Read(); + + Assert.Equal(dataSet.Tables[1].Rows[0][1], dataReader.GetValue(1)); + } } } }