diff options
author | Kim Alvefur <zash@zash.se> | 2019-05-30 13:41:05 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2019-05-30 13:41:05 +0200 |
commit | be249b1a12e22c3276598555bedf7beb8386f550 (patch) | |
tree | 081f89c13f1e99ee994923454030effe81b09778 | |
parent | 411d4c02a1315eb778e2ee5613723b74b6cfd00d (diff) | |
download | prosody-be249b1a12e22c3276598555bedf7beb8386f550.tar.gz prosody-be249b1a12e22c3276598555bedf7beb8386f550.zip |
util.format: Handle formats expecting an integer in Lua 5.3+ (fixes #1371)
-rw-r--r-- | spec/util_format_spec.lua | 1 | ||||
-rw-r--r-- | util/format.lua | 6 |
2 files changed, 7 insertions, 0 deletions
diff --git a/spec/util_format_spec.lua b/spec/util_format_spec.lua index b9652d19..82b70205 100644 --- a/spec/util_format_spec.lua +++ b/spec/util_format_spec.lua @@ -12,6 +12,7 @@ describe("util.format", function() assert.equal("[true]", format("%d", true)); assert.equal("% [true]", format("%%", true)); assert.equal("{ }", format("%q", { })); + assert.equal("[1.5]", format("%d", 1.5)); end); end); end); diff --git a/util/format.lua b/util/format.lua index c31f599f..857bb694 100644 --- a/util/format.lua +++ b/util/format.lua @@ -7,6 +7,9 @@ local unpack = table.unpack or unpack; -- luacheck: ignore 113/unpack local pack = require "util.table".pack; -- TODO table.pack in 5.2+ local type = type; local dump = require "util.serialization".new("debug"); +local num_type = math.type; + +local expects_integer = num_type and { c = true, d = true, i = true, o = true, u = true, X = true, x = true, } or {}; local function format(formatstring, ...) local args = pack(...); @@ -43,6 +46,9 @@ local function format(formatstring, ...) elseif type(arg) ~= "number" then -- arg isn't number as expected? args[i] = tostring(arg); spec = "[%s]"; + elseif expects_integer[option] and num_type(arg) ~= "integer" then + args[i] = tostring(arg); + spec = "[%s]"; end end return spec; |