From 74ea365c5a89e72d5716c3eb85a7c0792834bbaf Mon Sep 17 00:00:00 2001 From: Vikram Rangnekar Date: Sat, 20 Apr 2019 17:27:03 -0400 Subject: [PATCH] Fix null pointer issue found by fuzz test --- qcode/lex.go | 4 ++++ qcode/parse_test.go | 8 ++++++++ qcode/qcode.go | 8 +++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/qcode/lex.go b/qcode/lex.go index 79c4651..4a35a0d 100644 --- a/qcode/lex.go +++ b/qcode/lex.go @@ -1,6 +1,7 @@ package qcode import ( + "errors" "fmt" "strings" "unicode" @@ -207,6 +208,9 @@ func (l *lexer) errorf(format string, args ...interface{}) stateFn { // lex creates a new scanner for the input string. func lex(input string) (*lexer, error) { + if len(input) == 0 { + return nil, errors.New("empty query") + } l := &lexer{ input: input, items: make([]item, 0, 100), diff --git a/qcode/parse_test.go b/qcode/parse_test.go index b6545b0..8ca96b1 100644 --- a/qcode/parse_test.go +++ b/qcode/parse_test.go @@ -57,3 +57,11 @@ func TestCompile(t *testing.T) { t.Fatal(err) } } + +func TestEmptyCompile(t *testing.T) { + qcompile, _ := NewCompiler(Config{}) + _, err := qcompile.CompileQuery(``) + if err == nil { + t.Fatal(errors.New("expecting an error")) + } +} diff --git a/qcode/qcode.go b/qcode/qcode.go index 5955449..e2cefa5 100644 --- a/qcode/qcode.go +++ b/qcode/qcode.go @@ -336,7 +336,13 @@ func (com *Compiler) compileQuery(op *Operation) (*Query, error) { } } - fil, ok := com.fm[selRoot.Table] + var ok bool + var fil *Exp + + if selRoot != nil { + fil, ok = com.fm[selRoot.Table] + } + if !ok || fil == nil { fil = com.fl }