From 27cd1af4a7e7476ae078aaf3762095266064c445 Mon Sep 17 00:00:00 2001 From: Elvin Efendi Date: Tue, 21 Aug 2018 13:42:21 -0400 Subject: [PATCH] fix variable parsing when key is number --- rootfs/etc/nginx/lua/test/util_test.lua | 35 +++++++++++++++++++++++++ rootfs/etc/nginx/lua/util.lua | 4 +++ 2 files changed, 39 insertions(+) create mode 100644 rootfs/etc/nginx/lua/test/util_test.lua diff --git a/rootfs/etc/nginx/lua/test/util_test.lua b/rootfs/etc/nginx/lua/test/util_test.lua new file mode 100644 index 000000000..682c85919 --- /dev/null +++ b/rootfs/etc/nginx/lua/test/util_test.lua @@ -0,0 +1,35 @@ +local original_ngx = ngx +local function reset_ngx() + _G.ngx = original_ngx +end + +local function mock_ngx(mock) + local _ngx = mock + setmetatable(_ngx, { __index = ngx }) + _G.ngx = _ngx +end + +describe("lua_ngx_var", function() + local util = require("util") + + before_each(function() + mock_ngx({ var = { remote_addr = "192.168.1.1", [1] = "nginx/regexp/1/group/capturing" } }) + end) + + after_each(function() + reset_ngx() + package.loaded["monitor"] = nil + end) + + it("returns value of nginx var by key", function() + assert.equal("192.168.1.1", util.lua_ngx_var("$remote_addr")) + end) + + it("returns value of nginx var when key is number", function() + assert.equal("nginx/regexp/1/group/capturing", util.lua_ngx_var("$1")) + end) + + it("returns nil when variable is not defined", function() + assert.equal(nil, util.lua_ngx_var("$foo_bar")) + end) +end) diff --git a/rootfs/etc/nginx/lua/util.lua b/rootfs/etc/nginx/lua/util.lua index 449ad312f..2ef42ee83 100644 --- a/rootfs/etc/nginx/lua/util.lua +++ b/rootfs/etc/nginx/lua/util.lua @@ -46,6 +46,10 @@ end -- it returns value of ngx.var[request_uri] function _M.lua_ngx_var(ngx_var) local var_name = string_sub(ngx_var, 2) + if var_name:match("^%d+$") then + var_name = tonumber(var_name) + end + return ngx.var[var_name] end