aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--spec/util_format_spec.lua9
-rw-r--r--util/format.lua2
2 files changed, 8 insertions, 3 deletions
diff --git a/spec/util_format_spec.lua b/spec/util_format_spec.lua
index 184b8bd8..cb473b47 100644
--- a/spec/util_format_spec.lua
+++ b/spec/util_format_spec.lua
@@ -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);
diff --git a/util/format.lua b/util/format.lua
index 1cd8d81b..533f3a82 100644
--- a/util/format.lua
+++ b/util/format.lua
@@ -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