From 23b9df06944881cf9442a1c52208a3760e623e6f Mon Sep 17 00:00:00 2001 From: Yao Zongyou Date: Tue, 25 Jun 2019 07:59:33 +0800 Subject: [PATCH] Fix s3select TRIM function's nil pointer dereference bug (#7817) --- pkg/s3select/sql/analysis.go | 9 +++++++++ pkg/s3select/sql/funceval.go | 21 +++++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/pkg/s3select/sql/analysis.go b/pkg/s3select/sql/analysis.go index b246be4c1..e0a5e8eba 100644 --- a/pkg/s3select/sql/analysis.go +++ b/pkg/s3select/sql/analysis.go @@ -274,6 +274,15 @@ func (e *FuncExpr) analyze(s *Select) (result qProp) { } return result + case sqlFnTrim: + if e.Trim.TrimChars != nil { + result.combine(e.Trim.TrimChars.analyze(s)) + } + if e.Trim.TrimFrom != nil { + result.combine(e.Trim.TrimFrom.analyze(s)) + } + return result + case sqlFnSubstring: errVal := fmt.Errorf("Invalid argument(s) to %s", string(funcName)) result.combine(e.Substring.Expr.analyze(s)) diff --git a/pkg/s3select/sql/funceval.go b/pkg/s3select/sql/funceval.go index 8b968e6bd..51dcbdbd9 100644 --- a/pkg/s3select/sql/funceval.go +++ b/pkg/s3select/sql/funceval.go @@ -337,20 +337,25 @@ func handleSQLSubstring(r Record, e *SubstringFunc) (val *Value, err error) { } func handleSQLTrim(r Record, e *TrimFunc) (res *Value, err error) { - charsV, cerr := e.TrimChars.evalNode(r) - if cerr != nil { - return nil, cerr - } - inferTypeAsString(charsV) - chars, ok := charsV.ToString() - if !ok { - return nil, errNonStringTrimArg + chars := "" + ok := false + if e.TrimChars != nil { + charsV, cerr := e.TrimChars.evalNode(r) + if cerr != nil { + return nil, cerr + } + inferTypeAsString(charsV) + chars, ok = charsV.ToString() + if !ok { + return nil, errNonStringTrimArg + } } fromV, ferr := e.TrimFrom.evalNode(r) if ferr != nil { return nil, ferr } + inferTypeAsString(fromV) from, ok := fromV.ToString() if !ok { return nil, errNonStringTrimArg