Skip to content

Commit 620b3e7

Browse files
committed
fix: validate regex pattern even when replacement is a secret ref
In redirect.lua and proxy-rewrite.lua, still validate the regex pattern when only the replacement is a secret ref (using empty string as test replacement). Only skip validation when the pattern itself is a secret ref.
1 parent 72b2feb commit 620b3e7

2 files changed

Lines changed: 17 additions & 13 deletions

File tree

apisix/plugins/proxy-rewrite.lua

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -196,14 +196,16 @@ function _M.check_schema(conf)
196196
return false, "The length of regex_uri should be an even number"
197197
end
198198
for i = 1, #conf.regex_uri, 2 do
199-
if not secret.is_secret_ref(conf.regex_uri[i])
200-
and not secret.is_secret_ref(conf.regex_uri[i + 1])
201-
then
202-
local _, _, err = re_sub("/fake_uri", conf.regex_uri[i],
203-
conf.regex_uri[i + 1], "jo")
199+
local pattern = conf.regex_uri[i]
200+
local replacement = conf.regex_uri[i + 1]
201+
if not secret.is_secret_ref(pattern) then
202+
local test_replacement = secret.is_secret_ref(replacement)
203+
and "" or replacement
204+
local _, _, err = re_sub("/fake_uri", pattern,
205+
test_replacement, "jo")
204206
if err then
205-
return false, "invalid regex_uri(" .. conf.regex_uri[i] ..
206-
", " .. conf.regex_uri[i + 1] .. "): " .. err
207+
return false, "invalid regex_uri(" .. pattern ..
208+
", " .. replacement .. "): " .. err
207209
end
208210
end
209211
end

apisix/plugins/redirect.lua

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,16 @@ function _M.check_schema(conf)
108108
end
109109

110110
if conf.regex_uri and #conf.regex_uri > 0 then
111-
if not secret.is_secret_ref(conf.regex_uri[1])
112-
and not secret.is_secret_ref(conf.regex_uri[2])
113-
then
114-
local _, _, err = re_sub("/fake_uri", conf.regex_uri[1],
115-
conf.regex_uri[2], "jo")
111+
local pattern = conf.regex_uri[1]
112+
local replacement = conf.regex_uri[2]
113+
if not secret.is_secret_ref(pattern) then
114+
local test_replacement = secret.is_secret_ref(replacement)
115+
and "" or replacement
116+
local _, _, err = re_sub("/fake_uri", pattern,
117+
test_replacement, "jo")
116118
if err then
117119
local msg = string_format("invalid regex_uri (%s, %s), err:%s",
118-
conf.regex_uri[1], conf.regex_uri[2], err)
120+
pattern, replacement, err)
119121
return false, msg
120122
end
121123
end

0 commit comments

Comments
 (0)