immunio 0.15.4 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +0 -27
  3. data/ext/immunio/Rakefile +9 -0
  4. data/lib/immunio/plugins/active_record.rb +1 -1
  5. data/lib/immunio/plugins/active_record_relation.rb +1 -1
  6. data/lib/immunio/plugins/environment_reporter.rb +20 -0
  7. data/lib/immunio/rufus_lua_ext/ref.rb +1 -3
  8. data/lib/immunio/version.rb +1 -1
  9. data/lib/immunio/vm.rb +1 -2
  10. data/lua-hooks/Makefile +97 -0
  11. data/lua-hooks/ext/all.c +41 -52
  12. data/lua-hooks/ext/all.o +0 -0
  13. data/lua-hooks/ext/libinjection/libinjection_html5.o +0 -0
  14. data/lua-hooks/ext/libinjection/libinjection_sqli.o +0 -0
  15. data/lua-hooks/ext/libinjection/libinjection_xss.o +0 -0
  16. data/lua-hooks/ext/libinjection/lualib.c +2 -2
  17. data/lua-hooks/ext/lpeg/lpcap.c +2 -2
  18. data/lua-hooks/ext/lpeg/lpcap.o +0 -0
  19. data/lua-hooks/ext/lpeg/lpcode.c +2 -2
  20. data/lua-hooks/ext/lpeg/lpcode.h +1 -1
  21. data/lua-hooks/ext/lpeg/lpcode.o +0 -0
  22. data/lua-hooks/ext/lpeg/lpprint.o +0 -0
  23. data/lua-hooks/ext/lpeg/lptree.c +2 -2
  24. data/lua-hooks/ext/lpeg/lptypes.h +1 -1
  25. data/lua-hooks/ext/lpeg/lpvm.c +2 -2
  26. data/lua-hooks/ext/lpeg/lpvm.o +0 -0
  27. data/lua-hooks/ext/lua-cmsgpack/lua_cmsgpack.c +16 -3
  28. data/lua-hooks/ext/lua-snapshot/snapshot.c +14 -7
  29. data/lua-hooks/ext/luajit/COPYRIGHT +56 -0
  30. data/lua-hooks/ext/luajit/Makefile +159 -0
  31. data/lua-hooks/ext/luajit/README +16 -0
  32. data/lua-hooks/ext/luajit/doc/bluequad-print.css +166 -0
  33. data/lua-hooks/ext/luajit/doc/bluequad.css +325 -0
  34. data/lua-hooks/ext/luajit/doc/changes.html +804 -0
  35. data/lua-hooks/ext/luajit/doc/contact.html +104 -0
  36. data/lua-hooks/ext/luajit/doc/ext_c_api.html +189 -0
  37. data/lua-hooks/ext/luajit/doc/ext_ffi.html +332 -0
  38. data/lua-hooks/ext/luajit/doc/ext_ffi_api.html +570 -0
  39. data/lua-hooks/ext/luajit/doc/ext_ffi_semantics.html +1261 -0
  40. data/lua-hooks/ext/luajit/doc/ext_ffi_tutorial.html +603 -0
  41. data/lua-hooks/ext/luajit/doc/ext_jit.html +201 -0
  42. data/lua-hooks/ext/luajit/doc/ext_profiler.html +365 -0
  43. data/lua-hooks/ext/luajit/doc/extensions.html +448 -0
  44. data/lua-hooks/ext/luajit/doc/faq.html +186 -0
  45. data/lua-hooks/ext/luajit/doc/img/contact.png +0 -0
  46. data/lua-hooks/ext/luajit/doc/install.html +659 -0
  47. data/lua-hooks/ext/luajit/doc/luajit.html +236 -0
  48. data/lua-hooks/ext/luajit/doc/running.html +309 -0
  49. data/lua-hooks/ext/luajit/doc/status.html +118 -0
  50. data/lua-hooks/ext/luajit/dynasm/dasm_arm.h +456 -0
  51. data/lua-hooks/ext/luajit/dynasm/dasm_arm.lua +1125 -0
  52. data/lua-hooks/ext/luajit/dynasm/dasm_arm64.h +518 -0
  53. data/lua-hooks/ext/luajit/dynasm/dasm_arm64.lua +1166 -0
  54. data/lua-hooks/ext/luajit/dynasm/dasm_mips.h +416 -0
  55. data/lua-hooks/ext/luajit/dynasm/dasm_mips.lua +953 -0
  56. data/lua-hooks/ext/luajit/dynasm/dasm_ppc.h +419 -0
  57. data/lua-hooks/ext/luajit/dynasm/dasm_ppc.lua +1919 -0
  58. data/lua-hooks/ext/luajit/dynasm/dasm_proto.h +83 -0
  59. data/lua-hooks/ext/luajit/dynasm/dasm_x64.lua +12 -0
  60. data/lua-hooks/ext/luajit/dynasm/dasm_x86.h +471 -0
  61. data/lua-hooks/ext/luajit/dynasm/dasm_x86.lua +1945 -0
  62. data/lua-hooks/ext/luajit/dynasm/dynasm.lua +1094 -0
  63. data/lua-hooks/ext/luajit/etc/luajit.1 +88 -0
  64. data/lua-hooks/ext/luajit/etc/luajit.pc +25 -0
  65. data/lua-hooks/ext/luajit/src/Makefile +697 -0
  66. data/lua-hooks/ext/luajit/src/Makefile.dep +244 -0
  67. data/lua-hooks/ext/luajit/src/host/README +4 -0
  68. data/lua-hooks/ext/luajit/src/host/buildvm +0 -0
  69. data/lua-hooks/ext/luajit/src/host/buildvm.c +518 -0
  70. data/lua-hooks/ext/luajit/src/host/buildvm.h +105 -0
  71. data/lua-hooks/ext/luajit/src/host/buildvm.o +0 -0
  72. data/lua-hooks/ext/luajit/src/host/buildvm_arch.h +7449 -0
  73. data/lua-hooks/ext/luajit/src/host/buildvm_asm.c +345 -0
  74. data/lua-hooks/ext/luajit/src/host/buildvm_asm.o +0 -0
  75. data/lua-hooks/ext/luajit/src/host/buildvm_fold.c +229 -0
  76. data/lua-hooks/ext/luajit/src/host/buildvm_fold.o +0 -0
  77. data/lua-hooks/ext/luajit/src/host/buildvm_lib.c +457 -0
  78. data/lua-hooks/ext/luajit/src/host/buildvm_lib.o +0 -0
  79. data/lua-hooks/ext/luajit/src/host/buildvm_libbc.h +45 -0
  80. data/lua-hooks/ext/luajit/src/host/buildvm_peobj.c +368 -0
  81. data/lua-hooks/ext/luajit/src/host/buildvm_peobj.o +0 -0
  82. data/lua-hooks/ext/luajit/src/host/genlibbc.lua +197 -0
  83. data/lua-hooks/ext/luajit/src/host/genminilua.lua +428 -0
  84. data/lua-hooks/ext/luajit/src/host/minilua +0 -0
  85. data/lua-hooks/ext/luajit/src/host/minilua.c +7770 -0
  86. data/lua-hooks/ext/luajit/src/host/minilua.o +0 -0
  87. data/lua-hooks/ext/luajit/src/jit/bc.lua +190 -0
  88. data/lua-hooks/ext/luajit/src/jit/bcsave.lua +661 -0
  89. data/lua-hooks/ext/luajit/src/jit/dis_arm.lua +689 -0
  90. data/lua-hooks/ext/luajit/src/jit/dis_mips.lua +428 -0
  91. data/lua-hooks/ext/luajit/src/jit/dis_mipsel.lua +17 -0
  92. data/lua-hooks/ext/luajit/src/jit/dis_ppc.lua +591 -0
  93. data/lua-hooks/ext/luajit/src/jit/dis_x64.lua +17 -0
  94. data/lua-hooks/ext/luajit/src/jit/dis_x86.lua +838 -0
  95. data/lua-hooks/ext/luajit/src/jit/dump.lua +706 -0
  96. data/lua-hooks/ext/luajit/src/jit/p.lua +310 -0
  97. data/lua-hooks/ext/luajit/src/jit/v.lua +170 -0
  98. data/lua-hooks/ext/luajit/src/jit/vmdef.lua +362 -0
  99. data/lua-hooks/ext/luajit/src/jit/zone.lua +45 -0
  100. data/lua-hooks/ext/{lua → luajit/src}/lauxlib.h +10 -17
  101. data/lua-hooks/ext/luajit/src/lib_aux.c +356 -0
  102. data/lua-hooks/ext/luajit/src/lib_aux.o +0 -0
  103. data/lua-hooks/ext/luajit/src/lib_aux_dyn.o +0 -0
  104. data/lua-hooks/ext/luajit/src/lib_base.c +664 -0
  105. data/lua-hooks/ext/luajit/src/lib_base.o +0 -0
  106. data/lua-hooks/ext/luajit/src/lib_base_dyn.o +0 -0
  107. data/lua-hooks/ext/luajit/src/lib_bit.c +180 -0
  108. data/lua-hooks/ext/luajit/src/lib_bit.o +0 -0
  109. data/lua-hooks/ext/luajit/src/lib_bit_dyn.o +0 -0
  110. data/lua-hooks/ext/luajit/src/lib_debug.c +405 -0
  111. data/lua-hooks/ext/luajit/src/lib_debug.o +0 -0
  112. data/lua-hooks/ext/luajit/src/lib_debug_dyn.o +0 -0
  113. data/lua-hooks/ext/luajit/src/lib_ffi.c +872 -0
  114. data/lua-hooks/ext/luajit/src/lib_ffi.o +0 -0
  115. data/lua-hooks/ext/luajit/src/lib_ffi_dyn.o +0 -0
  116. data/lua-hooks/ext/luajit/src/lib_init.c +55 -0
  117. data/lua-hooks/ext/luajit/src/lib_init.o +0 -0
  118. data/lua-hooks/ext/luajit/src/lib_init_dyn.o +0 -0
  119. data/lua-hooks/ext/luajit/src/lib_io.c +541 -0
  120. data/lua-hooks/ext/luajit/src/lib_io.o +0 -0
  121. data/lua-hooks/ext/luajit/src/lib_io_dyn.o +0 -0
  122. data/lua-hooks/ext/luajit/src/lib_jit.c +767 -0
  123. data/lua-hooks/ext/luajit/src/lib_jit.o +0 -0
  124. data/lua-hooks/ext/luajit/src/lib_jit_dyn.o +0 -0
  125. data/lua-hooks/ext/luajit/src/lib_math.c +230 -0
  126. data/lua-hooks/ext/luajit/src/lib_math.o +0 -0
  127. data/lua-hooks/ext/luajit/src/lib_math_dyn.o +0 -0
  128. data/lua-hooks/ext/luajit/src/lib_os.c +292 -0
  129. data/lua-hooks/ext/luajit/src/lib_os.o +0 -0
  130. data/lua-hooks/ext/luajit/src/lib_os_dyn.o +0 -0
  131. data/lua-hooks/ext/luajit/src/lib_package.c +610 -0
  132. data/lua-hooks/ext/luajit/src/lib_package.o +0 -0
  133. data/lua-hooks/ext/luajit/src/lib_package_dyn.o +0 -0
  134. data/lua-hooks/ext/luajit/src/lib_string.c +752 -0
  135. data/lua-hooks/ext/luajit/src/lib_string.o +0 -0
  136. data/lua-hooks/ext/luajit/src/lib_string_dyn.o +0 -0
  137. data/lua-hooks/ext/luajit/src/lib_table.c +307 -0
  138. data/lua-hooks/ext/luajit/src/lib_table.o +0 -0
  139. data/lua-hooks/ext/luajit/src/lib_table_dyn.o +0 -0
  140. data/lua-hooks/ext/luajit/src/libluajit.a +0 -0
  141. data/lua-hooks/ext/luajit/src/libluajit.so +0 -0
  142. data/lua-hooks/ext/luajit/src/lj.supp +26 -0
  143. data/lua-hooks/ext/luajit/src/lj_alloc.c +1398 -0
  144. data/lua-hooks/ext/luajit/src/lj_alloc.h +17 -0
  145. data/lua-hooks/ext/luajit/src/lj_alloc.o +0 -0
  146. data/lua-hooks/ext/luajit/src/lj_alloc_dyn.o +0 -0
  147. data/lua-hooks/ext/luajit/src/lj_api.c +1210 -0
  148. data/lua-hooks/ext/luajit/src/lj_api.o +0 -0
  149. data/lua-hooks/ext/luajit/src/lj_api_dyn.o +0 -0
  150. data/lua-hooks/ext/luajit/src/lj_arch.h +509 -0
  151. data/lua-hooks/ext/luajit/src/lj_asm.c +2278 -0
  152. data/lua-hooks/ext/luajit/src/lj_asm.h +17 -0
  153. data/lua-hooks/ext/luajit/src/lj_asm.o +0 -0
  154. data/lua-hooks/ext/luajit/src/lj_asm_arm.h +2217 -0
  155. data/lua-hooks/ext/luajit/src/lj_asm_dyn.o +0 -0
  156. data/lua-hooks/ext/luajit/src/lj_asm_mips.h +1833 -0
  157. data/lua-hooks/ext/luajit/src/lj_asm_ppc.h +2015 -0
  158. data/lua-hooks/ext/luajit/src/lj_asm_x86.h +2634 -0
  159. data/lua-hooks/ext/luajit/src/lj_bc.c +14 -0
  160. data/lua-hooks/ext/luajit/src/lj_bc.h +265 -0
  161. data/lua-hooks/ext/luajit/src/lj_bc.o +0 -0
  162. data/lua-hooks/ext/luajit/src/lj_bc_dyn.o +0 -0
  163. data/lua-hooks/ext/luajit/src/lj_bcdef.h +220 -0
  164. data/lua-hooks/ext/luajit/src/lj_bcdump.h +68 -0
  165. data/lua-hooks/ext/luajit/src/lj_bcread.c +457 -0
  166. data/lua-hooks/ext/luajit/src/lj_bcread.o +0 -0
  167. data/lua-hooks/ext/luajit/src/lj_bcread_dyn.o +0 -0
  168. data/lua-hooks/ext/luajit/src/lj_bcwrite.c +361 -0
  169. data/lua-hooks/ext/luajit/src/lj_bcwrite.o +0 -0
  170. data/lua-hooks/ext/luajit/src/lj_bcwrite_dyn.o +0 -0
  171. data/lua-hooks/ext/luajit/src/lj_buf.c +234 -0
  172. data/lua-hooks/ext/luajit/src/lj_buf.h +105 -0
  173. data/lua-hooks/ext/luajit/src/lj_buf.o +0 -0
  174. data/lua-hooks/ext/luajit/src/lj_buf_dyn.o +0 -0
  175. data/lua-hooks/ext/luajit/src/lj_carith.c +429 -0
  176. data/lua-hooks/ext/luajit/src/lj_carith.h +37 -0
  177. data/lua-hooks/ext/luajit/src/lj_carith.o +0 -0
  178. data/lua-hooks/ext/luajit/src/lj_carith_dyn.o +0 -0
  179. data/lua-hooks/ext/luajit/src/lj_ccall.c +984 -0
  180. data/lua-hooks/ext/luajit/src/lj_ccall.h +178 -0
  181. data/lua-hooks/ext/luajit/src/lj_ccall.o +0 -0
  182. data/lua-hooks/ext/luajit/src/lj_ccall_dyn.o +0 -0
  183. data/lua-hooks/ext/luajit/src/lj_ccallback.c +712 -0
  184. data/lua-hooks/ext/luajit/src/lj_ccallback.h +25 -0
  185. data/lua-hooks/ext/luajit/src/lj_ccallback.o +0 -0
  186. data/lua-hooks/ext/luajit/src/lj_ccallback_dyn.o +0 -0
  187. data/lua-hooks/ext/luajit/src/lj_cconv.c +752 -0
  188. data/lua-hooks/ext/luajit/src/lj_cconv.h +70 -0
  189. data/lua-hooks/ext/luajit/src/lj_cconv.o +0 -0
  190. data/lua-hooks/ext/luajit/src/lj_cconv_dyn.o +0 -0
  191. data/lua-hooks/ext/luajit/src/lj_cdata.c +288 -0
  192. data/lua-hooks/ext/luajit/src/lj_cdata.h +76 -0
  193. data/lua-hooks/ext/luajit/src/lj_cdata.o +0 -0
  194. data/lua-hooks/ext/luajit/src/lj_cdata_dyn.o +0 -0
  195. data/lua-hooks/ext/luajit/src/lj_char.c +43 -0
  196. data/lua-hooks/ext/luajit/src/lj_char.h +42 -0
  197. data/lua-hooks/ext/luajit/src/lj_char.o +0 -0
  198. data/lua-hooks/ext/luajit/src/lj_char_dyn.o +0 -0
  199. data/lua-hooks/ext/luajit/src/lj_clib.c +418 -0
  200. data/lua-hooks/ext/luajit/src/lj_clib.h +29 -0
  201. data/lua-hooks/ext/luajit/src/lj_clib.o +0 -0
  202. data/lua-hooks/ext/luajit/src/lj_clib_dyn.o +0 -0
  203. data/lua-hooks/ext/luajit/src/lj_cparse.c +1862 -0
  204. data/lua-hooks/ext/luajit/src/lj_cparse.h +65 -0
  205. data/lua-hooks/ext/luajit/src/lj_cparse.o +0 -0
  206. data/lua-hooks/ext/luajit/src/lj_cparse_dyn.o +0 -0
  207. data/lua-hooks/ext/luajit/src/lj_crecord.c +1834 -0
  208. data/lua-hooks/ext/luajit/src/lj_crecord.h +38 -0
  209. data/lua-hooks/ext/luajit/src/lj_crecord.o +0 -0
  210. data/lua-hooks/ext/luajit/src/lj_crecord_dyn.o +0 -0
  211. data/lua-hooks/ext/luajit/src/lj_ctype.c +635 -0
  212. data/lua-hooks/ext/luajit/src/lj_ctype.h +461 -0
  213. data/lua-hooks/ext/luajit/src/lj_ctype.o +0 -0
  214. data/lua-hooks/ext/luajit/src/lj_ctype_dyn.o +0 -0
  215. data/lua-hooks/ext/luajit/src/lj_debug.c +699 -0
  216. data/lua-hooks/ext/luajit/src/lj_debug.h +65 -0
  217. data/lua-hooks/ext/luajit/src/lj_debug.o +0 -0
  218. data/lua-hooks/ext/luajit/src/lj_debug_dyn.o +0 -0
  219. data/lua-hooks/ext/luajit/src/lj_def.h +365 -0
  220. data/lua-hooks/ext/luajit/src/lj_dispatch.c +557 -0
  221. data/lua-hooks/ext/luajit/src/lj_dispatch.h +138 -0
  222. data/lua-hooks/ext/luajit/src/lj_dispatch.o +0 -0
  223. data/lua-hooks/ext/luajit/src/lj_dispatch_dyn.o +0 -0
  224. data/lua-hooks/ext/luajit/src/lj_emit_arm.h +356 -0
  225. data/lua-hooks/ext/luajit/src/lj_emit_mips.h +211 -0
  226. data/lua-hooks/ext/luajit/src/lj_emit_ppc.h +238 -0
  227. data/lua-hooks/ext/luajit/src/lj_emit_x86.h +462 -0
  228. data/lua-hooks/ext/luajit/src/lj_err.c +794 -0
  229. data/lua-hooks/ext/luajit/src/lj_err.h +41 -0
  230. data/lua-hooks/ext/luajit/src/lj_err.o +0 -0
  231. data/lua-hooks/ext/luajit/src/lj_err_dyn.o +0 -0
  232. data/lua-hooks/ext/luajit/src/lj_errmsg.h +190 -0
  233. data/lua-hooks/ext/luajit/src/lj_ff.h +18 -0
  234. data/lua-hooks/ext/luajit/src/lj_ffdef.h +209 -0
  235. data/lua-hooks/ext/luajit/src/lj_ffrecord.c +1247 -0
  236. data/lua-hooks/ext/luajit/src/lj_ffrecord.h +24 -0
  237. data/lua-hooks/ext/luajit/src/lj_ffrecord.o +0 -0
  238. data/lua-hooks/ext/luajit/src/lj_ffrecord_dyn.o +0 -0
  239. data/lua-hooks/ext/luajit/src/lj_folddef.h +1138 -0
  240. data/lua-hooks/ext/luajit/src/lj_frame.h +259 -0
  241. data/lua-hooks/ext/luajit/src/lj_func.c +185 -0
  242. data/lua-hooks/ext/luajit/src/lj_func.h +24 -0
  243. data/lua-hooks/ext/luajit/src/lj_func.o +0 -0
  244. data/lua-hooks/ext/luajit/src/lj_func_dyn.o +0 -0
  245. data/lua-hooks/ext/luajit/src/lj_gc.c +845 -0
  246. data/lua-hooks/ext/luajit/src/lj_gc.h +134 -0
  247. data/lua-hooks/ext/luajit/src/lj_gc.o +0 -0
  248. data/lua-hooks/ext/luajit/src/lj_gc_dyn.o +0 -0
  249. data/lua-hooks/ext/luajit/src/lj_gdbjit.c +787 -0
  250. data/lua-hooks/ext/luajit/src/lj_gdbjit.h +22 -0
  251. data/lua-hooks/ext/luajit/src/lj_gdbjit.o +0 -0
  252. data/lua-hooks/ext/luajit/src/lj_gdbjit_dyn.o +0 -0
  253. data/lua-hooks/ext/luajit/src/lj_ir.c +505 -0
  254. data/lua-hooks/ext/luajit/src/lj_ir.h +577 -0
  255. data/lua-hooks/ext/luajit/src/lj_ir.o +0 -0
  256. data/lua-hooks/ext/luajit/src/lj_ir_dyn.o +0 -0
  257. data/lua-hooks/ext/luajit/src/lj_ircall.h +321 -0
  258. data/lua-hooks/ext/luajit/src/lj_iropt.h +161 -0
  259. data/lua-hooks/ext/luajit/src/lj_jit.h +440 -0
  260. data/lua-hooks/ext/luajit/src/lj_lex.c +482 -0
  261. data/lua-hooks/ext/luajit/src/lj_lex.h +86 -0
  262. data/lua-hooks/ext/luajit/src/lj_lex.o +0 -0
  263. data/lua-hooks/ext/luajit/src/lj_lex_dyn.o +0 -0
  264. data/lua-hooks/ext/luajit/src/lj_lib.c +303 -0
  265. data/lua-hooks/ext/luajit/src/lj_lib.h +115 -0
  266. data/lua-hooks/ext/luajit/src/lj_lib.o +0 -0
  267. data/lua-hooks/ext/luajit/src/lj_lib_dyn.o +0 -0
  268. data/lua-hooks/ext/luajit/src/lj_libdef.h +414 -0
  269. data/lua-hooks/ext/luajit/src/lj_load.c +168 -0
  270. data/lua-hooks/ext/luajit/src/lj_load.o +0 -0
  271. data/lua-hooks/ext/luajit/src/lj_load_dyn.o +0 -0
  272. data/lua-hooks/ext/luajit/src/lj_mcode.c +386 -0
  273. data/lua-hooks/ext/luajit/src/lj_mcode.h +30 -0
  274. data/lua-hooks/ext/luajit/src/lj_mcode.o +0 -0
  275. data/lua-hooks/ext/luajit/src/lj_mcode_dyn.o +0 -0
  276. data/lua-hooks/ext/luajit/src/lj_meta.c +477 -0
  277. data/lua-hooks/ext/luajit/src/lj_meta.h +38 -0
  278. data/lua-hooks/ext/luajit/src/lj_meta.o +0 -0
  279. data/lua-hooks/ext/luajit/src/lj_meta_dyn.o +0 -0
  280. data/lua-hooks/ext/luajit/src/lj_obj.c +50 -0
  281. data/lua-hooks/ext/luajit/src/lj_obj.h +976 -0
  282. data/lua-hooks/ext/luajit/src/lj_obj.o +0 -0
  283. data/lua-hooks/ext/luajit/src/lj_obj_dyn.o +0 -0
  284. data/lua-hooks/ext/luajit/src/lj_opt_dce.c +78 -0
  285. data/lua-hooks/ext/luajit/src/lj_opt_dce.o +0 -0
  286. data/lua-hooks/ext/luajit/src/lj_opt_dce_dyn.o +0 -0
  287. data/lua-hooks/ext/luajit/src/lj_opt_fold.c +2488 -0
  288. data/lua-hooks/ext/luajit/src/lj_opt_fold.o +0 -0
  289. data/lua-hooks/ext/luajit/src/lj_opt_fold_dyn.o +0 -0
  290. data/lua-hooks/ext/luajit/src/lj_opt_loop.c +449 -0
  291. data/lua-hooks/ext/luajit/src/lj_opt_loop.o +0 -0
  292. data/lua-hooks/ext/luajit/src/lj_opt_loop_dyn.o +0 -0
  293. data/lua-hooks/ext/luajit/src/lj_opt_mem.c +935 -0
  294. data/lua-hooks/ext/luajit/src/lj_opt_mem.o +0 -0
  295. data/lua-hooks/ext/luajit/src/lj_opt_mem_dyn.o +0 -0
  296. data/lua-hooks/ext/luajit/src/lj_opt_narrow.c +652 -0
  297. data/lua-hooks/ext/luajit/src/lj_opt_narrow.o +0 -0
  298. data/lua-hooks/ext/luajit/src/lj_opt_narrow_dyn.o +0 -0
  299. data/lua-hooks/ext/luajit/src/lj_opt_sink.c +245 -0
  300. data/lua-hooks/ext/luajit/src/lj_opt_sink.o +0 -0
  301. data/lua-hooks/ext/luajit/src/lj_opt_sink_dyn.o +0 -0
  302. data/lua-hooks/ext/luajit/src/lj_opt_split.c +856 -0
  303. data/lua-hooks/ext/luajit/src/lj_opt_split.o +0 -0
  304. data/lua-hooks/ext/luajit/src/lj_opt_split_dyn.o +0 -0
  305. data/lua-hooks/ext/luajit/src/lj_parse.c +2725 -0
  306. data/lua-hooks/ext/luajit/src/lj_parse.h +18 -0
  307. data/lua-hooks/ext/luajit/src/lj_parse.o +0 -0
  308. data/lua-hooks/ext/luajit/src/lj_parse_dyn.o +0 -0
  309. data/lua-hooks/ext/luajit/src/lj_profile.c +368 -0
  310. data/lua-hooks/ext/luajit/src/lj_profile.h +21 -0
  311. data/lua-hooks/ext/luajit/src/lj_profile.o +0 -0
  312. data/lua-hooks/ext/luajit/src/lj_profile_dyn.o +0 -0
  313. data/lua-hooks/ext/luajit/src/lj_recdef.h +270 -0
  314. data/lua-hooks/ext/luajit/src/lj_record.c +2554 -0
  315. data/lua-hooks/ext/luajit/src/lj_record.h +45 -0
  316. data/lua-hooks/ext/luajit/src/lj_record.o +0 -0
  317. data/lua-hooks/ext/luajit/src/lj_record_dyn.o +0 -0
  318. data/lua-hooks/ext/luajit/src/lj_snap.c +870 -0
  319. data/lua-hooks/ext/luajit/src/lj_snap.h +34 -0
  320. data/lua-hooks/ext/luajit/src/lj_snap.o +0 -0
  321. data/lua-hooks/ext/luajit/src/lj_snap_dyn.o +0 -0
  322. data/lua-hooks/ext/luajit/src/lj_state.c +300 -0
  323. data/lua-hooks/ext/luajit/src/lj_state.h +35 -0
  324. data/lua-hooks/ext/luajit/src/lj_state.o +0 -0
  325. data/lua-hooks/ext/luajit/src/lj_state_dyn.o +0 -0
  326. data/lua-hooks/ext/luajit/src/lj_str.c +197 -0
  327. data/lua-hooks/ext/luajit/src/lj_str.h +27 -0
  328. data/lua-hooks/ext/luajit/src/lj_str.o +0 -0
  329. data/lua-hooks/ext/luajit/src/lj_str_dyn.o +0 -0
  330. data/lua-hooks/ext/luajit/src/lj_strfmt.c +554 -0
  331. data/lua-hooks/ext/luajit/src/lj_strfmt.h +125 -0
  332. data/lua-hooks/ext/luajit/src/lj_strfmt.o +0 -0
  333. data/lua-hooks/ext/luajit/src/lj_strfmt_dyn.o +0 -0
  334. data/lua-hooks/ext/luajit/src/lj_strscan.c +547 -0
  335. data/lua-hooks/ext/luajit/src/lj_strscan.h +39 -0
  336. data/lua-hooks/ext/luajit/src/lj_strscan.o +0 -0
  337. data/lua-hooks/ext/luajit/src/lj_strscan_dyn.o +0 -0
  338. data/lua-hooks/ext/luajit/src/lj_tab.c +666 -0
  339. data/lua-hooks/ext/luajit/src/lj_tab.h +73 -0
  340. data/lua-hooks/ext/luajit/src/lj_tab.o +0 -0
  341. data/lua-hooks/ext/luajit/src/lj_tab_dyn.o +0 -0
  342. data/lua-hooks/ext/luajit/src/lj_target.h +164 -0
  343. data/lua-hooks/ext/luajit/src/lj_target_arm.h +270 -0
  344. data/lua-hooks/ext/luajit/src/lj_target_arm64.h +97 -0
  345. data/lua-hooks/ext/luajit/src/lj_target_mips.h +260 -0
  346. data/lua-hooks/ext/luajit/src/lj_target_ppc.h +280 -0
  347. data/lua-hooks/ext/luajit/src/lj_target_x86.h +345 -0
  348. data/lua-hooks/ext/luajit/src/lj_trace.c +859 -0
  349. data/lua-hooks/ext/luajit/src/lj_trace.h +54 -0
  350. data/lua-hooks/ext/luajit/src/lj_trace.o +0 -0
  351. data/lua-hooks/ext/luajit/src/lj_trace_dyn.o +0 -0
  352. data/lua-hooks/ext/luajit/src/lj_traceerr.h +63 -0
  353. data/lua-hooks/ext/luajit/src/lj_udata.c +34 -0
  354. data/lua-hooks/ext/luajit/src/lj_udata.h +14 -0
  355. data/lua-hooks/ext/luajit/src/lj_udata.o +0 -0
  356. data/lua-hooks/ext/luajit/src/lj_udata_dyn.o +0 -0
  357. data/lua-hooks/ext/luajit/src/lj_vm.S +2730 -0
  358. data/lua-hooks/ext/luajit/src/lj_vm.h +114 -0
  359. data/lua-hooks/ext/luajit/src/lj_vm.o +0 -0
  360. data/lua-hooks/ext/luajit/src/lj_vm_dyn.o +0 -0
  361. data/lua-hooks/ext/luajit/src/lj_vmevent.c +58 -0
  362. data/lua-hooks/ext/luajit/src/lj_vmevent.h +59 -0
  363. data/lua-hooks/ext/luajit/src/lj_vmevent.o +0 -0
  364. data/lua-hooks/ext/luajit/src/lj_vmevent_dyn.o +0 -0
  365. data/lua-hooks/ext/luajit/src/lj_vmmath.c +152 -0
  366. data/lua-hooks/ext/luajit/src/lj_vmmath.o +0 -0
  367. data/lua-hooks/ext/luajit/src/lj_vmmath_dyn.o +0 -0
  368. data/lua-hooks/ext/luajit/src/ljamalg.c +96 -0
  369. data/lua-hooks/ext/{lua → luajit/src}/lua.h +12 -7
  370. data/lua-hooks/ext/luajit/src/lua.hpp +9 -0
  371. data/lua-hooks/ext/luajit/src/luaconf.h +156 -0
  372. data/lua-hooks/ext/luajit/src/luajit +0 -0
  373. data/lua-hooks/ext/luajit/src/luajit.c +570 -0
  374. data/lua-hooks/ext/luajit/src/luajit.h +79 -0
  375. data/lua-hooks/ext/luajit/src/luajit.o +0 -0
  376. data/lua-hooks/ext/luajit/src/lualib.h +43 -0
  377. data/lua-hooks/ext/luajit/src/msvcbuild.bat +114 -0
  378. data/lua-hooks/ext/luajit/src/ps4build.bat +103 -0
  379. data/lua-hooks/ext/luajit/src/psvitabuild.bat +93 -0
  380. data/lua-hooks/ext/luajit/src/vm_arm.dasc +4585 -0
  381. data/lua-hooks/ext/luajit/src/vm_arm64.dasc +3764 -0
  382. data/lua-hooks/ext/luajit/src/vm_mips.dasc +4355 -0
  383. data/lua-hooks/ext/luajit/src/vm_ppc.dasc +5252 -0
  384. data/lua-hooks/ext/luajit/src/vm_x64.dasc +4902 -0
  385. data/lua-hooks/ext/luajit/src/vm_x86.dasc +5710 -0
  386. data/lua-hooks/ext/luajit/src/xb1build.bat +101 -0
  387. data/lua-hooks/ext/luajit/src/xedkbuild.bat +92 -0
  388. data/lua-hooks/ext/luautf8/lutf8lib.c +3 -3
  389. data/lua-hooks/lib/boot.lua +37 -2
  390. metadata +372 -69
  391. data/lua-hooks/ext/bitop/README +0 -22
  392. data/lua-hooks/ext/bitop/bit.c +0 -189
  393. data/lua-hooks/ext/extconf.rb +0 -38
  394. data/lua-hooks/ext/lua/COPYRIGHT +0 -34
  395. data/lua-hooks/ext/lua/lapi.c +0 -1087
  396. data/lua-hooks/ext/lua/lapi.h +0 -16
  397. data/lua-hooks/ext/lua/lauxlib.c +0 -652
  398. data/lua-hooks/ext/lua/lbaselib.c +0 -659
  399. data/lua-hooks/ext/lua/lcode.c +0 -831
  400. data/lua-hooks/ext/lua/lcode.h +0 -76
  401. data/lua-hooks/ext/lua/ldblib.c +0 -398
  402. data/lua-hooks/ext/lua/ldebug.c +0 -638
  403. data/lua-hooks/ext/lua/ldebug.h +0 -33
  404. data/lua-hooks/ext/lua/ldo.c +0 -519
  405. data/lua-hooks/ext/lua/ldo.h +0 -57
  406. data/lua-hooks/ext/lua/ldump.c +0 -164
  407. data/lua-hooks/ext/lua/lfunc.c +0 -174
  408. data/lua-hooks/ext/lua/lfunc.h +0 -34
  409. data/lua-hooks/ext/lua/lgc.c +0 -710
  410. data/lua-hooks/ext/lua/lgc.h +0 -110
  411. data/lua-hooks/ext/lua/linit.c +0 -38
  412. data/lua-hooks/ext/lua/liolib.c +0 -556
  413. data/lua-hooks/ext/lua/llex.c +0 -463
  414. data/lua-hooks/ext/lua/llex.h +0 -81
  415. data/lua-hooks/ext/lua/llimits.h +0 -128
  416. data/lua-hooks/ext/lua/lmathlib.c +0 -263
  417. data/lua-hooks/ext/lua/lmem.c +0 -86
  418. data/lua-hooks/ext/lua/lmem.h +0 -49
  419. data/lua-hooks/ext/lua/loadlib.c +0 -705
  420. data/lua-hooks/ext/lua/loadlib_rel.c +0 -760
  421. data/lua-hooks/ext/lua/lobject.c +0 -214
  422. data/lua-hooks/ext/lua/lobject.h +0 -381
  423. data/lua-hooks/ext/lua/lopcodes.c +0 -102
  424. data/lua-hooks/ext/lua/lopcodes.h +0 -268
  425. data/lua-hooks/ext/lua/loslib.c +0 -243
  426. data/lua-hooks/ext/lua/lparser.c +0 -1339
  427. data/lua-hooks/ext/lua/lparser.h +0 -82
  428. data/lua-hooks/ext/lua/lstate.c +0 -214
  429. data/lua-hooks/ext/lua/lstate.h +0 -169
  430. data/lua-hooks/ext/lua/lstring.c +0 -111
  431. data/lua-hooks/ext/lua/lstring.h +0 -31
  432. data/lua-hooks/ext/lua/lstrlib.c +0 -871
  433. data/lua-hooks/ext/lua/ltable.c +0 -588
  434. data/lua-hooks/ext/lua/ltable.h +0 -40
  435. data/lua-hooks/ext/lua/ltablib.c +0 -287
  436. data/lua-hooks/ext/lua/ltm.c +0 -75
  437. data/lua-hooks/ext/lua/ltm.h +0 -54
  438. data/lua-hooks/ext/lua/lua.c +0 -392
  439. data/lua-hooks/ext/lua/lua.def +0 -131
  440. data/lua-hooks/ext/lua/lua.rc +0 -28
  441. data/lua-hooks/ext/lua/lua_dll.rc +0 -26
  442. data/lua-hooks/ext/lua/luac.c +0 -200
  443. data/lua-hooks/ext/lua/luac.rc +0 -1
  444. data/lua-hooks/ext/lua/luaconf.h +0 -763
  445. data/lua-hooks/ext/lua/luaconf.h.in +0 -724
  446. data/lua-hooks/ext/lua/luaconf.h.orig +0 -763
  447. data/lua-hooks/ext/lua/lualib.h +0 -53
  448. data/lua-hooks/ext/lua/lundump.c +0 -227
  449. data/lua-hooks/ext/lua/lundump.h +0 -36
  450. data/lua-hooks/ext/lua/lvm.c +0 -767
  451. data/lua-hooks/ext/lua/lvm.h +0 -36
  452. data/lua-hooks/ext/lua/lzio.c +0 -82
  453. data/lua-hooks/ext/lua/lzio.h +0 -67
  454. data/lua-hooks/ext/lua/print.c +0 -227
@@ -0,0 +1,68 @@
1
+ /*
2
+ ** Bytecode dump definitions.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #ifndef _LJ_BCDUMP_H
7
+ #define _LJ_BCDUMP_H
8
+
9
+ #include "lj_obj.h"
10
+ #include "lj_lex.h"
11
+
12
+ /* -- Bytecode dump format ------------------------------------------------ */
13
+
14
+ /*
15
+ ** dump = header proto+ 0U
16
+ ** header = ESC 'L' 'J' versionB flagsU [namelenU nameB*]
17
+ ** proto = lengthU pdata
18
+ ** pdata = phead bcinsW* uvdataH* kgc* knum* [debugB*]
19
+ ** phead = flagsB numparamsB framesizeB numuvB numkgcU numknU numbcU
20
+ ** [debuglenU [firstlineU numlineU]]
21
+ ** kgc = kgctypeU { ktab | (loU hiU) | (rloU rhiU iloU ihiU) | strB* }
22
+ ** knum = intU0 | (loU1 hiU)
23
+ ** ktab = narrayU nhashU karray* khash*
24
+ ** karray = ktabk
25
+ ** khash = ktabk ktabk
26
+ ** ktabk = ktabtypeU { intU | (loU hiU) | strB* }
27
+ **
28
+ ** B = 8 bit, H = 16 bit, W = 32 bit, U = ULEB128 of W, U0/U1 = ULEB128 of W+1
29
+ */
30
+
31
+ /* Bytecode dump header. */
32
+ #define BCDUMP_HEAD1 0x1b
33
+ #define BCDUMP_HEAD2 0x4c
34
+ #define BCDUMP_HEAD3 0x4a
35
+
36
+ /* If you perform *any* kind of private modifications to the bytecode itself
37
+ ** or to the dump format, you *must* set BCDUMP_VERSION to 0x80 or higher.
38
+ */
39
+ #define BCDUMP_VERSION 2
40
+
41
+ /* Compatibility flags. */
42
+ #define BCDUMP_F_BE 0x01
43
+ #define BCDUMP_F_STRIP 0x02
44
+ #define BCDUMP_F_FFI 0x04
45
+ #define BCDUMP_F_FR2 0x08
46
+
47
+ #define BCDUMP_F_KNOWN (BCDUMP_F_FR2*2-1)
48
+
49
+ /* Type codes for the GC constants of a prototype. Plus length for strings. */
50
+ enum {
51
+ BCDUMP_KGC_CHILD, BCDUMP_KGC_TAB, BCDUMP_KGC_I64, BCDUMP_KGC_U64,
52
+ BCDUMP_KGC_COMPLEX, BCDUMP_KGC_STR
53
+ };
54
+
55
+ /* Type codes for the keys/values of a constant table. */
56
+ enum {
57
+ BCDUMP_KTAB_NIL, BCDUMP_KTAB_FALSE, BCDUMP_KTAB_TRUE,
58
+ BCDUMP_KTAB_INT, BCDUMP_KTAB_NUM, BCDUMP_KTAB_STR
59
+ };
60
+
61
+ /* -- Bytecode reader/writer ---------------------------------------------- */
62
+
63
+ LJ_FUNC int lj_bcwrite(lua_State *L, GCproto *pt, lua_Writer writer,
64
+ void *data, int strip);
65
+ LJ_FUNC GCproto *lj_bcread_proto(LexState *ls);
66
+ LJ_FUNC GCproto *lj_bcread(LexState *ls);
67
+
68
+ #endif
@@ -0,0 +1,457 @@
1
+ /*
2
+ ** Bytecode reader.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #define lj_bcread_c
7
+ #define LUA_CORE
8
+
9
+ #include "lj_obj.h"
10
+ #include "lj_gc.h"
11
+ #include "lj_err.h"
12
+ #include "lj_buf.h"
13
+ #include "lj_str.h"
14
+ #include "lj_tab.h"
15
+ #include "lj_bc.h"
16
+ #if LJ_HASFFI
17
+ #include "lj_ctype.h"
18
+ #include "lj_cdata.h"
19
+ #include "lualib.h"
20
+ #endif
21
+ #include "lj_lex.h"
22
+ #include "lj_bcdump.h"
23
+ #include "lj_state.h"
24
+ #include "lj_strfmt.h"
25
+
26
+ /* Reuse some lexer fields for our own purposes. */
27
+ #define bcread_flags(ls) ls->level
28
+ #define bcread_swap(ls) \
29
+ ((bcread_flags(ls) & BCDUMP_F_BE) != LJ_BE*BCDUMP_F_BE)
30
+ #define bcread_oldtop(L, ls) restorestack(L, ls->lastline)
31
+ #define bcread_savetop(L, ls, top) \
32
+ ls->lastline = (BCLine)savestack(L, (top))
33
+
34
+ /* -- Input buffer handling ----------------------------------------------- */
35
+
36
+ /* Throw reader error. */
37
+ static LJ_NOINLINE void bcread_error(LexState *ls, ErrMsg em)
38
+ {
39
+ lua_State *L = ls->L;
40
+ const char *name = ls->chunkarg;
41
+ if (*name == BCDUMP_HEAD1) name = "(binary)";
42
+ else if (*name == '@' || *name == '=') name++;
43
+ lj_strfmt_pushf(L, "%s: %s", name, err2msg(em));
44
+ lj_err_throw(L, LUA_ERRSYNTAX);
45
+ }
46
+
47
+ /* Refill buffer. */
48
+ static LJ_NOINLINE void bcread_fill(LexState *ls, MSize len, int need)
49
+ {
50
+ lua_assert(len != 0);
51
+ if (len > LJ_MAX_BUF || ls->c < 0)
52
+ bcread_error(ls, LJ_ERR_BCBAD);
53
+ do {
54
+ const char *buf;
55
+ size_t sz;
56
+ char *p = sbufB(&ls->sb);
57
+ MSize n = (MSize)(ls->pe - ls->p);
58
+ if (n) { /* Copy remainder to buffer. */
59
+ if (sbuflen(&ls->sb)) { /* Move down in buffer. */
60
+ lua_assert(ls->pe == sbufP(&ls->sb));
61
+ if (ls->p != p) memmove(p, ls->p, n);
62
+ } else { /* Copy from buffer provided by reader. */
63
+ p = lj_buf_need(&ls->sb, len);
64
+ memcpy(p, ls->p, n);
65
+ }
66
+ ls->p = p;
67
+ ls->pe = p + n;
68
+ }
69
+ setsbufP(&ls->sb, p + n);
70
+ buf = ls->rfunc(ls->L, ls->rdata, &sz); /* Get more data from reader. */
71
+ if (buf == NULL || sz == 0) { /* EOF? */
72
+ if (need) bcread_error(ls, LJ_ERR_BCBAD);
73
+ ls->c = -1; /* Only bad if we get called again. */
74
+ break;
75
+ }
76
+ if (n) { /* Append to buffer. */
77
+ n += (MSize)sz;
78
+ p = lj_buf_need(&ls->sb, n < len ? len : n);
79
+ memcpy(sbufP(&ls->sb), buf, sz);
80
+ setsbufP(&ls->sb, p + n);
81
+ ls->p = p;
82
+ ls->pe = p + n;
83
+ } else { /* Return buffer provided by reader. */
84
+ ls->p = buf;
85
+ ls->pe = buf + sz;
86
+ }
87
+ } while (ls->p + len > ls->pe);
88
+ }
89
+
90
+ /* Need a certain number of bytes. */
91
+ static LJ_AINLINE void bcread_need(LexState *ls, MSize len)
92
+ {
93
+ if (LJ_UNLIKELY(ls->p + len > ls->pe))
94
+ bcread_fill(ls, len, 1);
95
+ }
96
+
97
+ /* Want to read up to a certain number of bytes, but may need less. */
98
+ static LJ_AINLINE void bcread_want(LexState *ls, MSize len)
99
+ {
100
+ if (LJ_UNLIKELY(ls->p + len > ls->pe))
101
+ bcread_fill(ls, len, 0);
102
+ }
103
+
104
+ /* Return memory block from buffer. */
105
+ static LJ_AINLINE uint8_t *bcread_mem(LexState *ls, MSize len)
106
+ {
107
+ uint8_t *p = (uint8_t *)ls->p;
108
+ ls->p += len;
109
+ lua_assert(ls->p <= ls->pe);
110
+ return p;
111
+ }
112
+
113
+ /* Copy memory block from buffer. */
114
+ static void bcread_block(LexState *ls, void *q, MSize len)
115
+ {
116
+ memcpy(q, bcread_mem(ls, len), len);
117
+ }
118
+
119
+ /* Read byte from buffer. */
120
+ static LJ_AINLINE uint32_t bcread_byte(LexState *ls)
121
+ {
122
+ lua_assert(ls->p < ls->pe);
123
+ return (uint32_t)(uint8_t)*ls->p++;
124
+ }
125
+
126
+ /* Read ULEB128 value from buffer. */
127
+ static LJ_AINLINE uint32_t bcread_uleb128(LexState *ls)
128
+ {
129
+ uint32_t v = lj_buf_ruleb128(&ls->p);
130
+ lua_assert(ls->p <= ls->pe);
131
+ return v;
132
+ }
133
+
134
+ /* Read top 32 bits of 33 bit ULEB128 value from buffer. */
135
+ static uint32_t bcread_uleb128_33(LexState *ls)
136
+ {
137
+ const uint8_t *p = (const uint8_t *)ls->p;
138
+ uint32_t v = (*p++ >> 1);
139
+ if (LJ_UNLIKELY(v >= 0x40)) {
140
+ int sh = -1;
141
+ v &= 0x3f;
142
+ do {
143
+ v |= ((*p & 0x7f) << (sh += 7));
144
+ } while (*p++ >= 0x80);
145
+ }
146
+ ls->p = (char *)p;
147
+ lua_assert(ls->p <= ls->pe);
148
+ return v;
149
+ }
150
+
151
+ /* -- Bytecode reader ----------------------------------------------------- */
152
+
153
+ /* Read debug info of a prototype. */
154
+ static void bcread_dbg(LexState *ls, GCproto *pt, MSize sizedbg)
155
+ {
156
+ void *lineinfo = (void *)proto_lineinfo(pt);
157
+ bcread_block(ls, lineinfo, sizedbg);
158
+ /* Swap lineinfo if the endianess differs. */
159
+ if (bcread_swap(ls) && pt->numline >= 256) {
160
+ MSize i, n = pt->sizebc-1;
161
+ if (pt->numline < 65536) {
162
+ uint16_t *p = (uint16_t *)lineinfo;
163
+ for (i = 0; i < n; i++) p[i] = (uint16_t)((p[i] >> 8)|(p[i] << 8));
164
+ } else {
165
+ uint32_t *p = (uint32_t *)lineinfo;
166
+ for (i = 0; i < n; i++) p[i] = lj_bswap(p[i]);
167
+ }
168
+ }
169
+ }
170
+
171
+ /* Find pointer to varinfo. */
172
+ static const void *bcread_varinfo(GCproto *pt)
173
+ {
174
+ const uint8_t *p = proto_uvinfo(pt);
175
+ MSize n = pt->sizeuv;
176
+ if (n) while (*p++ || --n) ;
177
+ return p;
178
+ }
179
+
180
+ /* Read a single constant key/value of a template table. */
181
+ static void bcread_ktabk(LexState *ls, TValue *o)
182
+ {
183
+ MSize tp = bcread_uleb128(ls);
184
+ if (tp >= BCDUMP_KTAB_STR) {
185
+ MSize len = tp - BCDUMP_KTAB_STR;
186
+ const char *p = (const char *)bcread_mem(ls, len);
187
+ setstrV(ls->L, o, lj_str_new(ls->L, p, len));
188
+ } else if (tp == BCDUMP_KTAB_INT) {
189
+ setintV(o, (int32_t)bcread_uleb128(ls));
190
+ } else if (tp == BCDUMP_KTAB_NUM) {
191
+ o->u32.lo = bcread_uleb128(ls);
192
+ o->u32.hi = bcread_uleb128(ls);
193
+ } else {
194
+ lua_assert(tp <= BCDUMP_KTAB_TRUE);
195
+ setpriV(o, ~tp);
196
+ }
197
+ }
198
+
199
+ /* Read a template table. */
200
+ static GCtab *bcread_ktab(LexState *ls)
201
+ {
202
+ MSize narray = bcread_uleb128(ls);
203
+ MSize nhash = bcread_uleb128(ls);
204
+ GCtab *t = lj_tab_new(ls->L, narray, hsize2hbits(nhash));
205
+ if (narray) { /* Read array entries. */
206
+ MSize i;
207
+ TValue *o = tvref(t->array);
208
+ for (i = 0; i < narray; i++, o++)
209
+ bcread_ktabk(ls, o);
210
+ }
211
+ if (nhash) { /* Read hash entries. */
212
+ MSize i;
213
+ for (i = 0; i < nhash; i++) {
214
+ TValue key;
215
+ bcread_ktabk(ls, &key);
216
+ lua_assert(!tvisnil(&key));
217
+ bcread_ktabk(ls, lj_tab_set(ls->L, t, &key));
218
+ }
219
+ }
220
+ return t;
221
+ }
222
+
223
+ /* Read GC constants of a prototype. */
224
+ static void bcread_kgc(LexState *ls, GCproto *pt, MSize sizekgc)
225
+ {
226
+ MSize i;
227
+ GCRef *kr = mref(pt->k, GCRef) - (ptrdiff_t)sizekgc;
228
+ for (i = 0; i < sizekgc; i++, kr++) {
229
+ MSize tp = bcread_uleb128(ls);
230
+ if (tp >= BCDUMP_KGC_STR) {
231
+ MSize len = tp - BCDUMP_KGC_STR;
232
+ const char *p = (const char *)bcread_mem(ls, len);
233
+ setgcref(*kr, obj2gco(lj_str_new(ls->L, p, len)));
234
+ } else if (tp == BCDUMP_KGC_TAB) {
235
+ setgcref(*kr, obj2gco(bcread_ktab(ls)));
236
+ #if LJ_HASFFI
237
+ } else if (tp != BCDUMP_KGC_CHILD) {
238
+ CTypeID id = tp == BCDUMP_KGC_COMPLEX ? CTID_COMPLEX_DOUBLE :
239
+ tp == BCDUMP_KGC_I64 ? CTID_INT64 : CTID_UINT64;
240
+ CTSize sz = tp == BCDUMP_KGC_COMPLEX ? 16 : 8;
241
+ GCcdata *cd = lj_cdata_new_(ls->L, id, sz);
242
+ TValue *p = (TValue *)cdataptr(cd);
243
+ setgcref(*kr, obj2gco(cd));
244
+ p[0].u32.lo = bcread_uleb128(ls);
245
+ p[0].u32.hi = bcread_uleb128(ls);
246
+ if (tp == BCDUMP_KGC_COMPLEX) {
247
+ p[1].u32.lo = bcread_uleb128(ls);
248
+ p[1].u32.hi = bcread_uleb128(ls);
249
+ }
250
+ #endif
251
+ } else {
252
+ lua_State *L = ls->L;
253
+ lua_assert(tp == BCDUMP_KGC_CHILD);
254
+ if (L->top <= bcread_oldtop(L, ls)) /* Stack underflow? */
255
+ bcread_error(ls, LJ_ERR_BCBAD);
256
+ L->top--;
257
+ setgcref(*kr, obj2gco(protoV(L->top)));
258
+ }
259
+ }
260
+ }
261
+
262
+ /* Read number constants of a prototype. */
263
+ static void bcread_knum(LexState *ls, GCproto *pt, MSize sizekn)
264
+ {
265
+ MSize i;
266
+ TValue *o = mref(pt->k, TValue);
267
+ for (i = 0; i < sizekn; i++, o++) {
268
+ int isnum = (ls->p[0] & 1);
269
+ uint32_t lo = bcread_uleb128_33(ls);
270
+ if (isnum) {
271
+ o->u32.lo = lo;
272
+ o->u32.hi = bcread_uleb128(ls);
273
+ } else {
274
+ setintV(o, lo);
275
+ }
276
+ }
277
+ }
278
+
279
+ /* Read bytecode instructions. */
280
+ static void bcread_bytecode(LexState *ls, GCproto *pt, MSize sizebc)
281
+ {
282
+ BCIns *bc = proto_bc(pt);
283
+ bc[0] = BCINS_AD((pt->flags & PROTO_VARARG) ? BC_FUNCV : BC_FUNCF,
284
+ pt->framesize, 0);
285
+ bcread_block(ls, bc+1, (sizebc-1)*(MSize)sizeof(BCIns));
286
+ /* Swap bytecode instructions if the endianess differs. */
287
+ if (bcread_swap(ls)) {
288
+ MSize i;
289
+ for (i = 1; i < sizebc; i++) bc[i] = lj_bswap(bc[i]);
290
+ }
291
+ }
292
+
293
+ /* Read upvalue refs. */
294
+ static void bcread_uv(LexState *ls, GCproto *pt, MSize sizeuv)
295
+ {
296
+ if (sizeuv) {
297
+ uint16_t *uv = proto_uv(pt);
298
+ bcread_block(ls, uv, sizeuv*2);
299
+ /* Swap upvalue refs if the endianess differs. */
300
+ if (bcread_swap(ls)) {
301
+ MSize i;
302
+ for (i = 0; i < sizeuv; i++)
303
+ uv[i] = (uint16_t)((uv[i] >> 8)|(uv[i] << 8));
304
+ }
305
+ }
306
+ }
307
+
308
+ /* Read a prototype. */
309
+ GCproto *lj_bcread_proto(LexState *ls)
310
+ {
311
+ GCproto *pt;
312
+ MSize framesize, numparams, flags, sizeuv, sizekgc, sizekn, sizebc, sizept;
313
+ MSize ofsk, ofsuv, ofsdbg;
314
+ MSize sizedbg = 0;
315
+ BCLine firstline = 0, numline = 0;
316
+
317
+ /* Read prototype header. */
318
+ flags = bcread_byte(ls);
319
+ numparams = bcread_byte(ls);
320
+ framesize = bcread_byte(ls);
321
+ sizeuv = bcread_byte(ls);
322
+ sizekgc = bcread_uleb128(ls);
323
+ sizekn = bcread_uleb128(ls);
324
+ sizebc = bcread_uleb128(ls) + 1;
325
+ if (!(bcread_flags(ls) & BCDUMP_F_STRIP)) {
326
+ sizedbg = bcread_uleb128(ls);
327
+ if (sizedbg) {
328
+ firstline = bcread_uleb128(ls);
329
+ numline = bcread_uleb128(ls);
330
+ }
331
+ }
332
+
333
+ /* Calculate total size of prototype including all colocated arrays. */
334
+ sizept = (MSize)sizeof(GCproto) +
335
+ sizebc*(MSize)sizeof(BCIns) +
336
+ sizekgc*(MSize)sizeof(GCRef);
337
+ sizept = (sizept + (MSize)sizeof(TValue)-1) & ~((MSize)sizeof(TValue)-1);
338
+ ofsk = sizept; sizept += sizekn*(MSize)sizeof(TValue);
339
+ ofsuv = sizept; sizept += ((sizeuv+1)&~1)*2;
340
+ ofsdbg = sizept; sizept += sizedbg;
341
+
342
+ /* Allocate prototype object and initialize its fields. */
343
+ pt = (GCproto *)lj_mem_newgco(ls->L, (MSize)sizept);
344
+ pt->gct = ~LJ_TPROTO;
345
+ pt->numparams = (uint8_t)numparams;
346
+ pt->framesize = (uint8_t)framesize;
347
+ pt->sizebc = sizebc;
348
+ setmref(pt->k, (char *)pt + ofsk);
349
+ setmref(pt->uv, (char *)pt + ofsuv);
350
+ pt->sizekgc = 0; /* Set to zero until fully initialized. */
351
+ pt->sizekn = sizekn;
352
+ pt->sizept = sizept;
353
+ pt->sizeuv = (uint8_t)sizeuv;
354
+ pt->flags = (uint8_t)flags;
355
+ pt->trace = 0;
356
+ setgcref(pt->chunkname, obj2gco(ls->chunkname));
357
+
358
+ /* Close potentially uninitialized gap between bc and kgc. */
359
+ *(uint32_t *)((char *)pt + ofsk - sizeof(GCRef)*(sizekgc+1)) = 0;
360
+
361
+ /* Read bytecode instructions and upvalue refs. */
362
+ bcread_bytecode(ls, pt, sizebc);
363
+ bcread_uv(ls, pt, sizeuv);
364
+
365
+ /* Read constants. */
366
+ bcread_kgc(ls, pt, sizekgc);
367
+ pt->sizekgc = sizekgc;
368
+ bcread_knum(ls, pt, sizekn);
369
+
370
+ /* Read and initialize debug info. */
371
+ pt->firstline = firstline;
372
+ pt->numline = numline;
373
+ if (sizedbg) {
374
+ MSize sizeli = (sizebc-1) << (numline < 256 ? 0 : numline < 65536 ? 1 : 2);
375
+ setmref(pt->lineinfo, (char *)pt + ofsdbg);
376
+ setmref(pt->uvinfo, (char *)pt + ofsdbg + sizeli);
377
+ bcread_dbg(ls, pt, sizedbg);
378
+ setmref(pt->varinfo, bcread_varinfo(pt));
379
+ } else {
380
+ setmref(pt->lineinfo, NULL);
381
+ setmref(pt->uvinfo, NULL);
382
+ setmref(pt->varinfo, NULL);
383
+ }
384
+ return pt;
385
+ }
386
+
387
+ /* Read and check header of bytecode dump. */
388
+ static int bcread_header(LexState *ls)
389
+ {
390
+ uint32_t flags;
391
+ bcread_want(ls, 3+5+5);
392
+ if (bcread_byte(ls) != BCDUMP_HEAD2 ||
393
+ bcread_byte(ls) != BCDUMP_HEAD3 ||
394
+ bcread_byte(ls) != BCDUMP_VERSION) return 0;
395
+ bcread_flags(ls) = flags = bcread_uleb128(ls);
396
+ if ((flags & ~(BCDUMP_F_KNOWN)) != 0) return 0;
397
+ if ((flags & BCDUMP_F_FR2) != LJ_FR2*BCDUMP_F_FR2) return 0;
398
+ if ((flags & BCDUMP_F_FFI)) {
399
+ #if LJ_HASFFI
400
+ lua_State *L = ls->L;
401
+ if (!ctype_ctsG(G(L))) {
402
+ ptrdiff_t oldtop = savestack(L, L->top);
403
+ luaopen_ffi(L); /* Load FFI library on-demand. */
404
+ L->top = restorestack(L, oldtop);
405
+ }
406
+ #else
407
+ return 0;
408
+ #endif
409
+ }
410
+ if ((flags & BCDUMP_F_STRIP)) {
411
+ ls->chunkname = lj_str_newz(ls->L, ls->chunkarg);
412
+ } else {
413
+ MSize len = bcread_uleb128(ls);
414
+ bcread_need(ls, len);
415
+ ls->chunkname = lj_str_new(ls->L, (const char *)bcread_mem(ls, len), len);
416
+ }
417
+ return 1; /* Ok. */
418
+ }
419
+
420
+ /* Read a bytecode dump. */
421
+ GCproto *lj_bcread(LexState *ls)
422
+ {
423
+ lua_State *L = ls->L;
424
+ lua_assert(ls->c == BCDUMP_HEAD1);
425
+ bcread_savetop(L, ls, L->top);
426
+ lj_buf_reset(&ls->sb);
427
+ /* Check for a valid bytecode dump header. */
428
+ if (!bcread_header(ls))
429
+ bcread_error(ls, LJ_ERR_BCFMT);
430
+ for (;;) { /* Process all prototypes in the bytecode dump. */
431
+ GCproto *pt;
432
+ MSize len;
433
+ const char *startp;
434
+ /* Read length. */
435
+ if (ls->p < ls->pe && ls->p[0] == 0) { /* Shortcut EOF. */
436
+ ls->p++;
437
+ break;
438
+ }
439
+ bcread_want(ls, 5);
440
+ len = bcread_uleb128(ls);
441
+ if (!len) break; /* EOF */
442
+ bcread_need(ls, len);
443
+ startp = ls->p;
444
+ pt = lj_bcread_proto(ls);
445
+ if (ls->p != startp + len)
446
+ bcread_error(ls, LJ_ERR_BCBAD);
447
+ setprotoV(L, L->top, pt);
448
+ incr_top(L);
449
+ }
450
+ if ((int32_t)(2*(uint32_t)(ls->pe - ls->p)) > 0 ||
451
+ L->top-1 != bcread_oldtop(L, ls))
452
+ bcread_error(ls, LJ_ERR_BCBAD);
453
+ /* Pop off last prototype. */
454
+ L->top--;
455
+ return protoV(L->top);
456
+ }
457
+