enhance: validate JSON data while inserting (#28602) (#28725)

some SDKs doesn't check the JSON data validation,
add this in server.

pr: #28602

Signed-off-by: yah01 <yah2er0ne@outlook.com>
pull/28770/head
yah01 2023-11-27 16:16:26 +08:00 committed by GitHub
parent c4be1ddf44
commit 55fda49104
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 0 deletions

View File

@ -1,6 +1,7 @@
package proxy
import (
"encoding/json"
"fmt"
"math"
"reflect"
@ -341,6 +342,18 @@ func (v *validateUtil) checkJSONFieldData(field *schemapb.FieldData, fieldSchema
}
}
var jsonMap map[string]interface{}
for _, data := range jsonArray {
err := json.Unmarshal(data, &jsonMap)
if err != nil {
log.Warn("insert invalid JSON data",
zap.ByteString("data", data),
zap.Error(err),
)
return merr.WrapErrIoFailedReason(err.Error())
}
}
return nil
}

View File

@ -3209,4 +3209,27 @@ func Test_validateUtil_checkJSONData(t *testing.T) {
err := v.checkJSONFieldData(data, f)
assert.Error(t, err)
})
t.Run("invalid_JSON_data", func(t *testing.T) {
v := newValidateUtil(withOverflowCheck(), withMaxLenCheck())
jsonData := "hello"
f := &schemapb.FieldSchema{
DataType: schemapb.DataType_JSON,
}
data := &schemapb.FieldData{
FieldName: "json",
Field: &schemapb.FieldData_Scalars{
Scalars: &schemapb.ScalarField{
Data: &schemapb.ScalarField_JsonData{
JsonData: &schemapb.JSONArray{
Data: [][]byte{[]byte(jsonData)},
},
},
},
},
}
err := v.checkJSONFieldData(data, f)
assert.Error(t, err)
})
}