diff --git a/src/core/org/luaj/vm2/lib/StringLib.java b/src/core/org/luaj/vm2/lib/StringLib.java index 26a12921..58d24438 100644 --- a/src/core/org/luaj/vm2/lib/StringLib.java +++ b/src/core/org/luaj/vm2/lib/StringLib.java @@ -309,10 +309,24 @@ public class StringLib extends TwoArgFunction { addquoted( result, args.checkstring( arg ) ); break; case 's': { - LuaString s = args.checkstring( arg ); + LuaValue argv = args.checkvalue( arg ); + LuaString s; + LuaValue h = argv.metatag(TOSTRING); + if ( ! h.isnil() ) { + LuaValue v = h.call(argv).tostring(); + return !v.isnil() ? v : StringLib.valueOf("(null)"); + } else { + LuaValue v = argv.tostring(); + if ( ! v.isnil() ) { + s = v.checkstring(); + } else { + s = StringLib.valueOf(argv.tojstring()); + } + } if ( fdsc.precision == -1 && s.length() >= 100 ) { result.append( s ); } else { + fdsc.zeroPad = false; fdsc.format( result, s ); } } break;