diff --git a/rules/rules.go b/rules/rules.go index 093d031d16..44332261b9 100644 --- a/rules/rules.go +++ b/rules/rules.go @@ -269,6 +269,9 @@ func (r *Rules) Parse(expression string) (*mux.Route, error) { if r.err != nil { return r.err } + if resultRoute == nil { + return fmt.Errorf("invalid expression: %s", expression) + } if resultRoute.GetError() != nil { return resultRoute.GetError() } diff --git a/rules/rules_test.go b/rules/rules_test.go index 0db6182183..7239ad7503 100644 --- a/rules/rules_test.go +++ b/rules/rules_test.go @@ -218,11 +218,17 @@ func TestHostRegexp(t *testing.T) { } } -type fakeHandler struct { - name string -} +func TestParseInvalidSyntax(t *testing.T) { + router := mux.NewRouter() + router.StrictSlash(true) -func (h *fakeHandler) ServeHTTP(http.ResponseWriter, *http.Request) {} + rules := &Rules{Route: &types.ServerRoute{Route: router.NewRoute()}} + expression01 := "Path: /path1;Query:param_one=true, /path2" + + routeFoo, err := rules.Parse(expression01) + require.Error(t, err) + assert.Nil(t, routeFoo) +} func TestPathPrefix(t *testing.T) { testCases := []struct { @@ -287,3 +293,9 @@ func TestPathPrefix(t *testing.T) { }) } } + +type fakeHandler struct { + name string +} + +func (h *fakeHandler) ServeHTTP(http.ResponseWriter, *http.Request) {}