bug: uri safe encode. (#1461)

This commit is contained in:
YuanSheng Wang 2020-04-16 08:00:45 +08:00 committed by GitHub
parent f39dd6efa2
commit c31edf3899
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 0 deletions

View File

@ -18,11 +18,22 @@ local table = require("apisix.core.table")
local ngx_re = require("ngx.re")
local resolver = require("resty.dns.resolver")
local ipmatcher= require("resty.ipmatcher")
local ffi = require("ffi")
local base = require("resty.core.base")
local open = io.open
local math = math
local sub_str = string.sub
local str_byte = string.byte
local tonumber = tonumber
local C = ffi.C
local ffi_string = ffi.string
local get_string_buf = base.get_string_buf
ffi.cdef[[
int ngx_escape_uri(char *dst, const char *src,
size_t size, int type);
]]
local _M = {
@ -144,4 +155,14 @@ function _M.parse_addr(addr)
end
function _M.uri_safe_encode(uri)
local count_escaped = C.ngx_escape_uri(nil, uri, #uri, 0)
local len = #uri + 2 * count_escaped
local buf = get_string_buf(len)
C.ngx_escape_uri(buf, uri, #uri, 0)
return ffi_string(buf, len)
end
return _M

View File

@ -144,6 +144,8 @@ function _M.rewrite(conf, ctx)
end
end
upstream_uri = core.utils.uri_safe_encode(upstream_uri)
if ctx.var.is_args == "?" then
ctx.var.upstream_uri = upstream_uri .. "?" .. (ctx.var.args or "")
else