Fix out-of-bound array access crash in select processing (#6594)

Fix test case.
master
Aditya Manthramurthy 6 years ago committed by kannappanr
parent cbc5d78a09
commit 16a100b597
  1. 5
      pkg/s3select/select.go
  2. 2
      pkg/s3select/select_test.go

@ -370,8 +370,9 @@ func aggregationFunctions(counter int, filtrCount int, myAggVals []float64, colu
// If column names are provided as an index it'll use this if statement instead of the else/ // If column names are provided as an index it'll use this if statement instead of the else/
var convAggFloat float64 var convAggFloat float64
if representsInt(storeReqCols[i]) { if representsInt(storeReqCols[i]) {
myIndex, _ := strconv.Atoi(storeReqCols[i]) colIndex, _ := strconv.Atoi(storeReqCols[i])
convAggFloat, _ = strconv.ParseFloat(record[myIndex], 64) // colIndex is 1-based
convAggFloat, _ = strconv.ParseFloat(record[colIndex-1], 64)
} else { } else {
// case that the columns are in the form of named columns rather than indices. // case that the columns are in the form of named columns rather than indices.

@ -331,7 +331,7 @@ func TestMyAggregationFunc(t *testing.T) {
{1, 1, []float64{10}, columnsMap, []string{"Col1"}, []string{"avg"}, []string{"1", "2"}, nil, 5.500}, {1, 1, []float64{10}, columnsMap, []string{"Col1"}, []string{"avg"}, []string{"1", "2"}, nil, 5.500},
{10, 5, []float64{0.000}, columnsMap, []string{"Col1"}, []string{"random"}, []string{"1", "2"}, ErrParseNonUnaryAgregateFunctionCall, 0}, {10, 5, []float64{0.000}, columnsMap, []string{"Col1"}, []string{"random"}, []string{"1", "2"}, ErrParseNonUnaryAgregateFunctionCall, 0},
{0, 5, []float64{0}, columnsMap, []string{"0"}, []string{"count"}, []string{"1", "2"}, nil, 1}, {0, 5, []float64{0}, columnsMap, []string{"0"}, []string{"count"}, []string{"1", "2"}, nil, 1},
{10, 5, []float64{10}, columnsMap, []string{"1"}, []string{"min"}, []string{"1", "12"}, nil, 10}, {10, 5, []float64{10}, columnsMap, []string{"1"}, []string{"min"}, []string{"1", "12"}, nil, 1},
} }
for _, table := range tables { for _, table := range tables {
err := aggregationFunctions(table.counter, table.filtrCount, table.myAggVals, table.columnsMap, table.storeReqCols, table.storeFunctions, table.record) err := aggregationFunctions(table.counter, table.filtrCount, table.myAggVals, table.columnsMap, table.storeReqCols, table.storeFunctions, table.record)

Loading…
Cancel
Save