Limit S3 Select JSON documents to 10MB (#20439)

Closes #20430

Limit allocations from badly formed documents.
This commit is contained in:
Klaus Post 2024-09-16 09:59:03 -07:00 committed by GitHub
parent 229f04ab79
commit 8a30967542
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 6 additions and 1 deletions

View File

@ -26,6 +26,10 @@ import (
"github.com/bcicen/jstream"
)
// Limit single document size to 10MiB, 10x the AWS limit:
// https://docs.aws.amazon.com/AmazonS3/latest/userguide/selecting-content-from-objects.html
const maxDocumentSize = 10 << 20
// Reader - JSON record reader for S3Select.
type Reader struct {
args *ReaderArgs
@ -80,7 +84,7 @@ func (r *Reader) Close() error {
// NewReader - creates new JSON reader using readCloser.
func NewReader(readCloser io.ReadCloser, args *ReaderArgs) *Reader {
readCloser = &syncReadCloser{rc: readCloser}
d := jstream.NewDecoder(readCloser, 0).ObjectAsKVS()
d := jstream.NewDecoder(io.LimitReader(readCloser, maxDocumentSize), 0).ObjectAsKVS()
return &Reader{
args: args,
decoder: d,

View File

@ -442,6 +442,7 @@ func (s3Select *S3Select) Open(rsc io.ReadSeekCloser) error {
s3Select.recordReader = json.NewPReader(s3Select.progressReader, &s3Select.Input.JSONArgs)
}
} else {
// Document mode.
s3Select.recordReader = json.NewReader(s3Select.progressReader, &s3Select.Input.JSONArgs)
}