mirror of
https://github.com/bjc/prosody.git
synced 2025-04-01 20:27:39 +03:00
util.format: Skip control code escaping when doing full serialization
Fixes that a multi-line string ended up "like\ \9this" instead of "like\nthis" as can be demonstrated by somehow initiating a connection to a HTTP server.
This commit is contained in:
parent
d607d2898f
commit
c551d3d8dd
2 changed files with 8 additions and 3 deletions
|
@ -37,6 +37,11 @@ describe("util.format", function()
|
|||
end)
|
||||
end
|
||||
|
||||
it("escapes multi-line strings", function ()
|
||||
assert.equal("Hello\n\tWorld", format("%s", "Hello\nWorld"))
|
||||
assert.equal("\"Hello\\nWorld\"", format("%q", "Hello\nWorld"))
|
||||
end)
|
||||
|
||||
-- Tests generated with loops!
|
||||
describe("nil", function ()
|
||||
describe("to %c", function ()
|
||||
|
@ -561,8 +566,8 @@ describe("util.format", function()
|
|||
describe("to %q", function ()
|
||||
it("works", function ()
|
||||
assert.equal("\"hello\"", format("%q", "hello"))
|
||||
assert.equal("\"foo \226\144\129\226\144\130\226\144\131 bar\"", format("%q", "foo \001\002\003 bar"))
|
||||
assert.equal("\"nödåtgärd\"", format("%q", "n\195\182d\195\165tg\195\164rd"))
|
||||
assert.equal("\"foo \\001\\002\\003 bar\"", format("%q", "foo \001\002\003 bar"))
|
||||
assert.equal("\"n\\195\\182d\\195\\165tg\\195\\164rd\"", format("%q", "n\195\182d\195\165tg\195\164rd"))
|
||||
assert.equal("\"n\\195\\182d\\195\\165tg\\195\"", format("%q", "n\195\182d\195\165tg\195"))
|
||||
end);
|
||||
end);
|
||||
|
|
|
@ -108,7 +108,7 @@ local function format(formatstring, ...)
|
|||
if t == "string" and option ~= "p" then
|
||||
if not valid_utf8(arg) then
|
||||
option = "q";
|
||||
else
|
||||
elseif option ~= "q" then -- gets fully escaped in the next block
|
||||
args[i] = arg:gsub("[%z\1-\8\11-\31\127]", control_symbols):gsub("\n\t?", "\n\t");
|
||||
return spec;
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue