summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/caddyhttp/map/map.go4
-rw-r--r--modules/caddyhttp/map/map_test.go17
2 files changed, 21 insertions, 0 deletions
diff --git a/modules/caddyhttp/map/map.go b/modules/caddyhttp/map/map.go
index 8394955..0a27aab 100644
--- a/modules/caddyhttp/map/map.go
+++ b/modules/caddyhttp/map/map.go
@@ -145,6 +145,10 @@ func (h Handler) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyhtt
return string(result), true
}
if input == m.Input {
+ if outputStr, ok := output.(string); ok {
+ // NOTE: if the output has a placeholder that has the same key as the input, this is infinite recursion
+ return repl.ReplaceAll(outputStr, ""), true
+ }
return output, true
}
}
diff --git a/modules/caddyhttp/map/map_test.go b/modules/caddyhttp/map/map_test.go
index 2789459..26d6e85 100644
--- a/modules/caddyhttp/map/map_test.go
+++ b/modules/caddyhttp/map/map_test.go
@@ -82,6 +82,22 @@ func TestHandler(t *testing.T) {
"output": "3",
},
},
+ {
+ reqURI: "/foo",
+ handler: Handler{
+ Source: "{http.request.uri.path}",
+ Destinations: []string{"{output}"},
+ Mappings: []Mapping{
+ {
+ Input: "/foo",
+ Outputs: []interface{}{"{testvar}"},
+ },
+ },
+ },
+ expect: map[string]interface{}{
+ "output": "testing",
+ },
+ },
} {
if err := tc.handler.Provision(caddy.Context{}); err != nil {
t.Fatalf("Test %d: Provisioning handler: %v", i, err)
@@ -92,6 +108,7 @@ func TestHandler(t *testing.T) {
t.Fatalf("Test %d: Creating request: %v", i, err)
}
repl := caddyhttp.NewTestReplacer(req)
+ repl.Set("testvar", "testing")
ctx := context.WithValue(req.Context(), caddy.ReplacerCtxKey, repl)
req = req.WithContext(ctx)