aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2019-01-16 13:53:04 +0100
committerKim Alvefur <zash@zash.se>2019-01-16 13:53:04 +0100
commit3e30870220e8c617cda3a06b1c9d9054b346283c (patch)
tree37d221126b4bb853517742623abe2ac9e769452d
parentcf984835d120a714e2ed4337f8522e935cf85498 (diff)
downloadprosody-3e30870220e8c617cda3a06b1c9d9054b346283c.tar.gz
prosody-3e30870220e8c617cda3a06b1c9d9054b346283c.zip
util.http: Fix decoding of uppercase URL encoded chars
Broken in 1af5106a2c34
-rw-r--r--spec/util_http_spec.lua5
-rw-r--r--util/http.lua1
2 files changed, 6 insertions, 0 deletions
diff --git a/spec/util_http_spec.lua b/spec/util_http_spec.lua
index 0f51a86c..d38645f7 100644
--- a/spec/util_http_spec.lua
+++ b/spec/util_http_spec.lua
@@ -28,6 +28,11 @@ describe("util.http", function()
it("should decode important URL characters", function()
assert.are.equal("This & that = something", http.urldecode("This%20%26%20that%20%3d%20something"), "Important URL chars escaped");
end);
+
+ it("should decode both lower and uppercase", function ()
+ assert.are.equal("This & that = {something}.", http.urldecode("This%20%26%20that%20%3D%20%7Bsomething%7D%2E"), "Important URL chars escaped");
+ end);
+
end);
describe("#formencode()", function()
diff --git a/util/http.lua b/util/http.lua
index 1730d4d4..3852f91c 100644
--- a/util/http.lua
+++ b/util/http.lua
@@ -15,6 +15,7 @@ for i = 0, 255 do
local u = format("%%%02x", i);
url_codes[c] = u;
url_codes[u] = c;
+ url_codes[u:upper()] = c;
end
local function urlencode(s)
return s and (s:gsub("[^a-zA-Z0-9.~_-]", url_codes));