Next>> Scroll to Bottom
Stuff goes here
L1[10:18:41] <boiler> %lua fun=setmetatable({},{tostring=function(t) error(t) end}) print(fun) return fun
L2[10:18:41] <MichiBot> main:1: unexpected symbol near char(29)
L3[10:18:51] <boiler> %lua fun=setmetatable({},{tostring=function(t) error(t) end})
L4[10:18:51] <MichiBot> main:1: unexpected symbol near char(29)
L5[10:19:39] <boiler> %lua fun=setmetatable({},{["tostring"]=function(t) error(t) end } )
L6[10:19:47] <boiler> %lua fun=setmetatable({},{["tostring"]=function(t) error(t) end } ) return fun
L7[10:19:47] <MichiBot> table: 0x7ff9fc06d560
L8[10:20:02] <boiler> %lua fun=setmetatable({},{[tostring]=function(t) error(t) end } )
L9[10:20:02] <MichiBot> main:1: unexpected symbol near char(29)
L10[10:20:48] <boiler> %lua a={} a.tostring=function(t) error(t) end fun=setmetatable({},a) return fun
L11[10:20:48] <MichiBot> main:1: <name> expected near char(29)
L12[10:21:28] <boiler> %lua a={} a.["tostring"]=function(t) error(t) end fun=setmetatable({},a) return fun
L13[10:21:29] <MichiBot> main:1: <name> expected near '['
L14[10:21:37] <boiler> %lua a={} a["tostring"]=function(t) error(t) end fun=setmetatable({},a) return fun
L15[10:21:37] <MichiBot> table: 0x7ffa0c066bf0
L16[10:21:50] <boiler> %lua a={} a["tostring"]=function(t) error(t) end fun=setmetatable({},a) print(fun)
L17[10:21:50] <MichiBot> table: 0x7ffa6c068d10
L18[10:21:56] <boiler> how
L19[10:22:34] <boiler> is this lua 5.1?
L20[10:23:04] <boiler> is this <lua 5.1? [Edited]
L21[10:30:09] <boiler> %lua a={} a["tostring"]=function(t) return(t) end fun=setmetatable({},a) print(fun)
L22[10:30:10] <MichiBot> table: 0x7ffa240599b0
L23[10:40:04] <Saghetti> %lua _VERSION
L24[10:40:04] <MichiBot> Lua 5.2
L25[10:40:12] <Saghetti> @boiler
L26[10:40:45] <boiler> then it somehow detects when fucky metatables are in play and doesn't let them ruin everything
L27[10:40:58] <Saghetti> %lua setfenv
L28[10:40:58] <MichiBot> nil
L29[10:41:19] <boiler> %lua a={} a["metatable"]={} a["tostring"]=function(t) return(t) end fun=setmetatable({},a) print(fun)
L30[10:41:19] <MichiBot> table: 0x7ffa4803a4f0
L31[10:41:29] <boiler> aaaa discord stahp
L32[10:42:02] <boiler> %lua a={} fuckingshitdiscordformatting = "" a[fuckingshitdiscordformatting.."metatable"]={} a[fuckingshitdiscordformatting.."tostring"]=function(t) return(t) end fun=setmetatable({},a) print(fun)
L33[10:42:02] <MichiBot> table: 0x7ffa00075490
L34[10:44:59] <boiler> %lua a={} us= "" a[us.."metatable"]=function() return nil end a[us.."tostring"]=function(t) return(t) end fun=setmetatable({},a) print(fun)
L35[10:44:59] <MichiBot> table: 0x7ffa14061c20
L36[10:45:08] <boiler> %lua a={} us= "" a[us.."metatable"]=function() return nil end a[us.."tostring"]=function(t) error(t) end fun=setmetatable({},a) print(fun)
L37[10:45:08] <MichiBot> table: 0x7ffa0c0688c0
L38[10:45:32] <boiler> %lua a={} us= "" a[us.."metatable"]=nil a[us.."tostring"]=function(t) return(t) end fun=setmetatable({},a) print(fun)
L39[10:45:32] <MichiBot> table: 0x7ffa0c067570
L40[10:45:57] <AmandaC> %lua print(setmetatable({}, { __tostring = function(t) error(t) end }))
L41[10:45:57] <MichiBot> table: 0x7ffa405b0840
L42[10:47:20] <boiler> how is it tostring()ing it if the tostring metamethod ALWAYS errors?
L43[10:47:49] <AmandaC> the default table tostring method, ofc
L44[10:48:28] <boiler> %lua print(setmetatable({}, {\metatable=nil,tostring = function(t) error(t) end }))
L45[10:48:28] <MichiBot> main:1: unexpected symbol near '\'
L46[10:49:03] <boiler> %lua print(setmetatable({}, {metatable=nil,tostring = function(t) error(t) end }))
L47[10:49:03] <MichiBot> main:1: unexpected symbol near char(31)
L48[10:49:16] <boiler> discord formatting is a pain
L49[10:49:50] <boiler> %lua us="" print(setmetatable({}, {[us.."metatable"]=nil,[us.."tostring"] = function(t) error(t) end }))
L50[10:49:50] <MichiBot> table: 0x7ffa28040800
L51[10:50:46] <AmandaC> That's not doing what you think it is
L52[10:51:08] <AmandaC> Try `("_"):rep(2)`
L53[10:51:12] <AmandaC> or get on IRC like a winner
L54[10:53:15] <boiler> %lua us=("_"):rep(2) print(setmetatable({}, {[us.."metatable"]=nil,[us.."tostring"] = function(t) error(t) end }))
L55[10:53:15] <MichiBot> table: 0x7ff9f0084c00
L56[10:54:15] <AmandaC> the C code for tostring probably tries the metamethod, if it fails,c alls the C default
L57[10:55:27] <boiler> %lua us=("_"):rep(2) print(setmetatable({}, {[us.."metatable"]=nil,[us.."tostring"] = function(t) return(t) end }))
L58[10:55:27] <MichiBot> table: 0x7ffa583581f0
L59[10:56:16] <AmandaC> plus I'm not sure if C print calls tostring
L60[10:56:39] <AmandaC> or whatever MichiBot replaces it with
L61[10:58:35] <boiler> either way, it's not breaking, so you win
L62[10:58:42] <boiler> either way, it's not breaking, so you win mimiru [Edited]
L63[10:59:51] <AmandaC> All it'd do is cause a stack overflow, anyway: https://nc.ddna.co/s/7JmGw8tLtMN7fYY
L64[11:00:03] <AmandaC> which would be caught by michibot and reported as such
L65[11:02:14] <boiler> try the return thing
L66[11:02:40] <boiler> instead of error(t) do return(t). i'm too lazy to fix my lua install atm
L67[11:04:23] <AmandaC> "__tostring must return a string"
L68[11:04:52] <boiler> oh, so that's pretty foolproof.
L69[11:04:54] <AmandaC> regardless, if you did manage to break MichiBot, all it'd earn you is a ban
L70[11:05:38] <boiler> breaking programs is fun though
Next>> Scroll to Top