From f4779551f949da2c3f3689699fa1195206a7910b Mon Sep 17 00:00:00 2001 From: congqixia Date: Thu, 30 May 2024 17:35:39 +0800 Subject: [PATCH] fix: Set Slice start to Len if out-of-bound (#751) Fix slice may panic with out of bound error when last batch is not sufficent for batch size in query iterator Signed-off-by: Congqi Xia --- entity/columns_array.go | 3 +++ entity/columns_array_gen.go | 21 +++++++++++++++++++++ entity/columns_json.go | 3 +++ entity/columns_scalar_gen.go | 24 ++++++++++++++++++++++++ entity/columns_sparse.go | 3 +++ entity/columns_varchar.go | 3 +++ entity/columns_vector_gen.go | 12 ++++++++++++ 7 files changed, 69 insertions(+) diff --git a/entity/columns_array.go b/entity/columns_array.go index 5e774d72..e2726add 100644 --- a/entity/columns_array.go +++ b/entity/columns_array.go @@ -30,6 +30,9 @@ func (c *ColumnVarCharArray) Len() int { } func (c *ColumnVarCharArray) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } diff --git a/entity/columns_array_gen.go b/entity/columns_array_gen.go index ebfe6cc1..8da7bb03 100755 --- a/entity/columns_array_gen.go +++ b/entity/columns_array_gen.go @@ -34,6 +34,9 @@ func (c *ColumnBoolArray) Len() int { } func (c *ColumnBoolArray) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } @@ -144,6 +147,9 @@ func (c *ColumnInt8Array) Len() int { } func (c *ColumnInt8Array) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } @@ -254,6 +260,9 @@ func (c *ColumnInt16Array) Len() int { } func (c *ColumnInt16Array) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } @@ -364,6 +373,9 @@ func (c *ColumnInt32Array) Len() int { } func (c *ColumnInt32Array) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } @@ -474,6 +486,9 @@ func (c *ColumnInt64Array) Len() int { } func (c *ColumnInt64Array) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } @@ -584,6 +599,9 @@ func (c *ColumnFloatArray) Len() int { } func (c *ColumnFloatArray) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } @@ -694,6 +712,9 @@ func (c *ColumnDoubleArray) Len() int { } func (c *ColumnDoubleArray) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } diff --git a/entity/columns_json.go b/entity/columns_json.go index 12604663..88301b83 100644 --- a/entity/columns_json.go +++ b/entity/columns_json.go @@ -36,6 +36,9 @@ func (c *ColumnJSONBytes) Len() int { } func (c *ColumnJSONBytes) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } diff --git a/entity/columns_scalar_gen.go b/entity/columns_scalar_gen.go index b791449d..33462cad 100755 --- a/entity/columns_scalar_gen.go +++ b/entity/columns_scalar_gen.go @@ -33,6 +33,9 @@ func (c *ColumnBool) Len() int { } func (c *ColumnBool) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } @@ -131,6 +134,9 @@ func (c *ColumnInt8) Len() int { } func (c *ColumnInt8) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } @@ -229,6 +235,9 @@ func (c *ColumnInt16) Len() int { } func (c *ColumnInt16) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } @@ -327,6 +336,9 @@ func (c *ColumnInt32) Len() int { } func (c *ColumnInt32) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } @@ -425,6 +437,9 @@ func (c *ColumnInt64) Len() int { } func (c *ColumnInt64) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } @@ -523,6 +538,9 @@ func (c *ColumnFloat) Len() int { } func (c *ColumnFloat) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } @@ -621,6 +639,9 @@ func (c *ColumnDouble) Len() int { } func (c *ColumnDouble) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } @@ -719,6 +740,9 @@ func (c *ColumnString) Len() int { } func (c *ColumnString) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } diff --git a/entity/columns_sparse.go b/entity/columns_sparse.go index fb246148..2df3a11e 100644 --- a/entity/columns_sparse.go +++ b/entity/columns_sparse.go @@ -144,6 +144,9 @@ func (c *ColumnSparseFloatVector) Len() int { } func (c *ColumnSparseFloatVector) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } diff --git a/entity/columns_varchar.go b/entity/columns_varchar.go index 4888e07d..72b12d99 100644 --- a/entity/columns_varchar.go +++ b/entity/columns_varchar.go @@ -46,6 +46,9 @@ func (c *ColumnVarChar) GetAsString(idx int) (string, error) { } func (c *ColumnVarChar) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } diff --git a/entity/columns_vector_gen.go b/entity/columns_vector_gen.go index cc025a57..90e5cb01 100755 --- a/entity/columns_vector_gen.go +++ b/entity/columns_vector_gen.go @@ -35,6 +35,9 @@ func (c * ColumnBinaryVector) Len() int { } func (c *ColumnBinaryVector) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } @@ -147,6 +150,9 @@ func (c *ColumnFloatVector) Get(idx int) (interface{}, error) { } func (c *ColumnFloatVector) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } @@ -235,6 +241,9 @@ func (c * ColumnFloat16Vector) Len() int { } func (c *ColumnFloat16Vector) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() } @@ -334,6 +343,9 @@ func (c * ColumnBFloat16Vector) Len() int { } func (c *ColumnBFloat16Vector) Slice(start, end int) Column { + if start > c.Len() { + start = c.Len() + } if end == -1 || end > c.Len() { end = c.Len() }