aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Yong Tang <yong.tang.github@outlook.com> 2022-06-25 09:17:35 -0700
committerGravatar GitHub <noreply@github.com> 2022-06-25 09:17:35 -0700
commit4a40e9e3a0dfe40da319f5d8e724120ed796da8e (patch)
tree0b9e169cd50bff2622eeffee8e7c2c17976b4334
parent497c31f09800d907dcafad4e2adc59a429263c2c (diff)
downloadcoredns-4a40e9e3a0dfe40da319f5d8e724120ed796da8e.tar.gz
coredns-4a40e9e3a0dfe40da319f5d8e724120ed796da8e.tar.zst
coredns-4a40e9e3a0dfe40da319f5d8e724120ed796da8e.zip
Fix a crash in rewrite plugin when rule type is missing (#5459)
-rw-r--r--plugin/rewrite/rewrite.go3
-rw-r--r--plugin/rewrite/setup_test.go79
2 files changed, 35 insertions, 47 deletions
diff --git a/plugin/rewrite/rewrite.go b/plugin/rewrite/rewrite.go
index c315fa73a..b676a1f2d 100644
--- a/plugin/rewrite/rewrite.go
+++ b/plugin/rewrite/rewrite.go
@@ -104,6 +104,9 @@ func newRule(args ...string) (Rule, error) {
expectNumArgs = len(args) - 1
startArg = 2
case Stop:
+ if len(args) < 2 {
+ return nil, fmt.Errorf("stop rule must begin with a rule type")
+ }
ruleType = strings.ToLower(args[1])
expectNumArgs = len(args) - 1
startArg = 2
diff --git a/plugin/rewrite/setup_test.go b/plugin/rewrite/setup_test.go
index 00808bd9c..128f3d11c 100644
--- a/plugin/rewrite/setup_test.go
+++ b/plugin/rewrite/setup_test.go
@@ -8,60 +8,45 @@ import (
)
func TestParse(t *testing.T) {
- c := caddy.NewTestController("dns", `rewrite`)
- _, err := rewriteParse(c)
- if err == nil {
- t.Errorf("Expected error but found nil for `rewrite`")
- }
- c = caddy.NewTestController("dns", `rewrite name`)
- _, err = rewriteParse(c)
- if err == nil {
- t.Errorf("Expected error but found nil for `rewrite name`")
- }
- c = caddy.NewTestController("dns", `rewrite name a.com b.com`)
- _, err = rewriteParse(c)
- if err != nil {
- t.Errorf("Expected success but found %s for `rewrite name a.com b.com`", err)
- }
- c = caddy.NewTestController("dns",
- `rewrite stop {
+ tests := []struct {
+ inputFileRules string
+ shouldErr bool
+ errContains string
+ }{
+ // parse errors
+ {`rewrite`, true, ""},
+ {`rewrite name`, true, ""},
+ {`rewrite name a.com b.com`, false, ""},
+ {`rewrite stop {
name regex foo bar
answer name bar foo
-}`)
- _, err = rewriteParse(c)
- if err != nil {
- t.Errorf("Expected success but found %s for valid response rewrite", err)
- }
-
- c = caddy.NewTestController("dns", `rewrite stop name regex foo bar answer name bar foo`)
- _, err = rewriteParse(c)
- if err != nil {
- t.Errorf("Expected success but found %s for valid response rewrite", err)
- }
-
- c = caddy.NewTestController("dns",
- `rewrite stop {
+}`, false, ""},
+ {`rewrite stop name regex foo bar answer name bar foo`, false, ""},
+ {`rewrite stop {
name regex foo bar
answer name bar foo
name baz
-}`)
- _, err = rewriteParse(c)
- if err == nil {
- t.Errorf("Expected error but got success for invalid response rewrite")
- } else if !strings.Contains(err.Error(), "2 arguments required") {
- t.Errorf("Got wrong error for invalid response rewrite: %v", err.Error())
- }
-
- c = caddy.NewTestController("dns",
- `rewrite stop {
+}`, true, "2 arguments required"},
+ {`rewrite stop {
answer name bar foo
name regex foo bar
-}`)
- _, err = rewriteParse(c)
- if err == nil {
- t.Errorf("Expected error but got success for invalid response rewrite")
- } else if !strings.Contains(err.Error(), "must begin with a name rule") {
- t.Errorf("Got wrong error for invalid response rewrite: %v", err.Error())
+}`, true, "must begin with a name rule"},
+ {`rewrite stop`, true, ""},
+ }
+
+ for i, test := range tests {
+ c := caddy.NewTestController("dns", test.inputFileRules)
+ _, err := rewriteParse(c)
+ if err == nil && test.shouldErr {
+ t.Fatalf("Test %d expected errors, but got no error\n---\n%s", i, test.inputFileRules)
+ } else if err != nil && !test.shouldErr {
+ t.Fatalf("Test %d expected no errors, but got '%v'\n---\n%s", i, err, test.inputFileRules)
+ }
+
+ if err != nil && test.errContains != "" && !strings.Contains(err.Error(), test.errContains) {
+ t.Errorf("Test %d got wrong error for invalid response rewrite: '%v'\n---\n%s", i, err.Error(), test.inputFileRules)
+ }
}
+
}
aultController.js?h=test/action'>unfollow)
AgeCommit message (Expand)AuthorFilesLines
2023-02-03Run tests on pull requestsGravatar Ashcon Partovi 1-0/+7
2023-02-03Run tests on pushGravatar Ashcon Partovi 1-0/+7
2023-02-03anotherGravatar Dylan Conway 1-1/+1
2023-02-03integers overflowingGravatar Dylan Conway 1-1/+1
2023-02-03Attempt to debug annotations 2Gravatar Ashcon Partovi 1-4/+1
2023-02-03Attempt to debug annotationsGravatar Ashcon Partovi 1-0/+7
2023-02-03Fix console output in bun wiptestGravatar Ashcon Partovi 1-4/+3
2023-02-03Use GitHub action SDKGravatar Ashcon Partovi 4-10/+16