Skip to content

Commit 99d1a6c

Browse files
committed
code reviews.
1 parent e408045 commit 99d1a6c

File tree

4 files changed

+19
-13
lines changed

4 files changed

+19
-13
lines changed

buffer.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -647,8 +647,8 @@ func (b *buffer) Float64Array2DColumn(name string, values [][]float64) *buffer {
647647
var dim2 int
648648
if dim1 > 0 {
649649
dim2 = len(values[0])
650-
totalElements := dim1 * dim2
651-
if dim1 > MaxArrayElements || dim2 > MaxArrayElements || totalElements > MaxArrayElements || totalElements < 0 {
650+
totalElements := product([]uint{uint(dim1), uint(dim2)})
651+
if totalElements > MaxArrayElements {
652652
b.lastErr = fmt.Errorf("array size %d exceeds maximum limit %d", totalElements, MaxArrayElements)
653653
return b
654654
}
@@ -699,8 +699,8 @@ func (b *buffer) Float64Array3DColumn(name string, values [][][]float64) *buffer
699699
if dim2 > 0 {
700700
dim3 = len(values[0][0])
701701
}
702-
totalElements := dim1 * dim2 * dim3
703-
if dim1 > MaxArrayElements || dim2 > MaxArrayElements || dim3 > MaxArrayElements || totalElements > MaxArrayElements || totalElements < 0 {
702+
totalElements := product([]uint{uint(dim1), uint(dim2), uint(dim3)})
703+
if totalElements > MaxArrayElements {
704704
b.lastErr = fmt.Errorf("array size %d exceeds maximum limit %d", totalElements, MaxArrayElements)
705705
return b
706706
}

integration_test.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ package questdb_test
2727
import (
2828
"context"
2929
"fmt"
30+
"math"
3031
"math/big"
3132
"path/filepath"
3233
"reflect"
@@ -417,11 +418,12 @@ func (suite *integrationTestSuite) TestE2EValidWrites() {
417418
"double array",
418419
testTable,
419420
func(s qdb.LineSender) error {
420-
values1D := []float64{1.0, 2.0, 3.0, 4.0, 5.0}
421-
values2D := [][]float64{{1.0, 2.0}, {3.0, 4.0}, {5.0, 6.0}}
422-
values3D := [][][]float64{{{1.0, 2.0}, {3.0, 4.0}}, {{5.0, 6.0}, {7.0, 8.0}}}
421+
values1D := []float64{1.0, 2.0, 3.0, 4.0, 5.0, math.NaN()}
422+
values2D := [][]float64{{1.0, 2.0}, {3.0, 4.0}, {5.0, 6.0}, {math.NaN(), math.NaN()}}
423+
values3D := [][][]float64{{{1.0, 2.0}, {3.0, 4.0}}, {{5.0, 6.0}, {7.0, math.NaN()}}}
423424
arrayND, _ := qdb.NewNDArray[float64](2, 2, 1, 2)
424425
arrayND.Fill(11.0)
426+
arrayND.Set(math.NaN(), 1, 1, 0, 1)
425427

426428
err := s.
427429
Table(testTable).
@@ -464,10 +466,10 @@ func (suite *integrationTestSuite) TestE2EValidWrites() {
464466
},
465467
Dataset: [][]interface{}{
466468
{
467-
[]interface{}{float64(1), float64(2), float64(3), float64(4), float64(5)},
468-
[]interface{}{[]interface{}{float64(1), float64(2)}, []interface{}{float64(3), float64(4)}, []interface{}{float64(5), float64(6)}},
469-
[]interface{}{[]interface{}{[]interface{}{float64(1), float64(2)}, []interface{}{float64(3), float64(4)}}, []interface{}{[]interface{}{float64(5), float64(6)}, []interface{}{float64(7), float64(8)}}},
470-
[]interface{}{[]interface{}{[]interface{}{[]interface{}{float64(11), float64(11)}}, []interface{}{[]interface{}{float64(11), float64(11)}}}, []interface{}{[]interface{}{[]interface{}{float64(11), float64(11)}}, []interface{}{[]interface{}{float64(11), float64(11)}}}},
469+
[]interface{}{float64(1), float64(2), float64(3), float64(4), float64(5), nil},
470+
[]interface{}{[]interface{}{float64(1), float64(2)}, []interface{}{float64(3), float64(4)}, []interface{}{float64(5), float64(6)}, []interface{}{nil, nil}},
471+
[]interface{}{[]interface{}{[]interface{}{float64(1), float64(2)}, []interface{}{float64(3), float64(4)}}, []interface{}{[]interface{}{float64(5), float64(6)}, []interface{}{float64(7), nil}}},
472+
[]interface{}{[]interface{}{[]interface{}{[]interface{}{float64(11), float64(11)}}, []interface{}{[]interface{}{float64(11), float64(11)}}}, []interface{}{[]interface{}{[]interface{}{float64(11), float64(11)}}, []interface{}{[]interface{}{float64(11), nil}}}},
471473
"1970-01-01T00:00:00.000001Z"},
472474
{
473475
[]interface{}{},

ndarray.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,10 +208,13 @@ func validateShape(shape []uint) error {
208208

209209
func product(s []uint) uint {
210210
if len(s) == 0 {
211-
return 0
211+
return 1
212212
}
213213
p := uint(1)
214214
for _, v := range s {
215+
if v != 0 && p > MaxArrayElements/v {
216+
return MaxArrayElements + 1
217+
}
215218
p *= v
216219
}
217220
return p

ndarray_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,8 @@ func TestReshape_InvalidShapes(t *testing.T) {
178178
}{
179179
{"wrong size", []uint{5}},
180180
{"empty shape", []uint{}},
181-
{"too large", []uint{qdb.MaxArrayElements + 1}},
181+
{"too large1", []uint{qdb.MaxArrayElements + 1}},
182+
{"too large2", []uint{4294967296, 4294967296}},
182183
}
183184

184185
for _, tc := range testCases {

0 commit comments

Comments
 (0)