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,42 @@
1
+ /*
2
+ ** Character types.
3
+ ** Donated to the public domain.
4
+ */
5
+
6
+ #ifndef _LJ_CHAR_H
7
+ #define _LJ_CHAR_H
8
+
9
+ #include "lj_def.h"
10
+
11
+ #define LJ_CHAR_CNTRL 0x01
12
+ #define LJ_CHAR_SPACE 0x02
13
+ #define LJ_CHAR_PUNCT 0x04
14
+ #define LJ_CHAR_DIGIT 0x08
15
+ #define LJ_CHAR_XDIGIT 0x10
16
+ #define LJ_CHAR_UPPER 0x20
17
+ #define LJ_CHAR_LOWER 0x40
18
+ #define LJ_CHAR_IDENT 0x80
19
+ #define LJ_CHAR_ALPHA (LJ_CHAR_LOWER|LJ_CHAR_UPPER)
20
+ #define LJ_CHAR_ALNUM (LJ_CHAR_ALPHA|LJ_CHAR_DIGIT)
21
+ #define LJ_CHAR_GRAPH (LJ_CHAR_ALNUM|LJ_CHAR_PUNCT)
22
+
23
+ /* Only pass -1 or 0..255 to these macros. Never pass a signed char! */
24
+ #define lj_char_isa(c, t) ((lj_char_bits+1)[(c)] & t)
25
+ #define lj_char_iscntrl(c) lj_char_isa((c), LJ_CHAR_CNTRL)
26
+ #define lj_char_isspace(c) lj_char_isa((c), LJ_CHAR_SPACE)
27
+ #define lj_char_ispunct(c) lj_char_isa((c), LJ_CHAR_PUNCT)
28
+ #define lj_char_isdigit(c) lj_char_isa((c), LJ_CHAR_DIGIT)
29
+ #define lj_char_isxdigit(c) lj_char_isa((c), LJ_CHAR_XDIGIT)
30
+ #define lj_char_isupper(c) lj_char_isa((c), LJ_CHAR_UPPER)
31
+ #define lj_char_islower(c) lj_char_isa((c), LJ_CHAR_LOWER)
32
+ #define lj_char_isident(c) lj_char_isa((c), LJ_CHAR_IDENT)
33
+ #define lj_char_isalpha(c) lj_char_isa((c), LJ_CHAR_ALPHA)
34
+ #define lj_char_isalnum(c) lj_char_isa((c), LJ_CHAR_ALNUM)
35
+ #define lj_char_isgraph(c) lj_char_isa((c), LJ_CHAR_GRAPH)
36
+
37
+ #define lj_char_toupper(c) ((c) - (lj_char_islower(c) >> 1))
38
+ #define lj_char_tolower(c) ((c) + lj_char_isupper(c))
39
+
40
+ LJ_DATA const uint8_t lj_char_bits[257];
41
+
42
+ #endif
@@ -0,0 +1,418 @@
1
+ /*
2
+ ** FFI C library loader.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #include "lj_obj.h"
7
+
8
+ #if LJ_HASFFI
9
+
10
+ #include "lj_gc.h"
11
+ #include "lj_err.h"
12
+ #include "lj_tab.h"
13
+ #include "lj_str.h"
14
+ #include "lj_udata.h"
15
+ #include "lj_ctype.h"
16
+ #include "lj_cconv.h"
17
+ #include "lj_cdata.h"
18
+ #include "lj_clib.h"
19
+ #include "lj_strfmt.h"
20
+
21
+ /* -- OS-specific functions ----------------------------------------------- */
22
+
23
+ #if LJ_TARGET_DLOPEN
24
+
25
+ #include <dlfcn.h>
26
+ #include <stdio.h>
27
+
28
+ #if defined(RTLD_DEFAULT)
29
+ #define CLIB_DEFHANDLE RTLD_DEFAULT
30
+ #elif LJ_TARGET_OSX || LJ_TARGET_BSD
31
+ #define CLIB_DEFHANDLE ((void *)(intptr_t)-2)
32
+ #else
33
+ #define CLIB_DEFHANDLE NULL
34
+ #endif
35
+
36
+ LJ_NORET LJ_NOINLINE static void clib_error_(lua_State *L)
37
+ {
38
+ lj_err_callermsg(L, dlerror());
39
+ }
40
+
41
+ #define clib_error(L, fmt, name) clib_error_(L)
42
+
43
+ #if defined(__CYGWIN__)
44
+ #define CLIB_SOPREFIX "cyg"
45
+ #else
46
+ #define CLIB_SOPREFIX "lib"
47
+ #endif
48
+
49
+ #if LJ_TARGET_OSX
50
+ #define CLIB_SOEXT "%s.dylib"
51
+ #elif defined(__CYGWIN__)
52
+ #define CLIB_SOEXT "%s.dll"
53
+ #else
54
+ #define CLIB_SOEXT "%s.so"
55
+ #endif
56
+
57
+ static const char *clib_extname(lua_State *L, const char *name)
58
+ {
59
+ if (!strchr(name, '/')
60
+ #ifdef __CYGWIN__
61
+ && !strchr(name, '\\')
62
+ #endif
63
+ ) {
64
+ if (!strchr(name, '.')) {
65
+ name = lj_strfmt_pushf(L, CLIB_SOEXT, name);
66
+ L->top--;
67
+ #ifdef __CYGWIN__
68
+ } else {
69
+ return name;
70
+ #endif
71
+ }
72
+ if (!(name[0] == CLIB_SOPREFIX[0] && name[1] == CLIB_SOPREFIX[1] &&
73
+ name[2] == CLIB_SOPREFIX[2])) {
74
+ name = lj_strfmt_pushf(L, CLIB_SOPREFIX "%s", name);
75
+ L->top--;
76
+ }
77
+ }
78
+ return name;
79
+ }
80
+
81
+ /* Check for a recognized ld script line. */
82
+ static const char *clib_check_lds(lua_State *L, const char *buf)
83
+ {
84
+ char *p, *e;
85
+ if ((!strncmp(buf, "GROUP", 5) || !strncmp(buf, "INPUT", 5)) &&
86
+ (p = strchr(buf, '('))) {
87
+ while (*++p == ' ') ;
88
+ for (e = p; *e && *e != ' ' && *e != ')'; e++) ;
89
+ return strdata(lj_str_new(L, p, e-p));
90
+ }
91
+ return NULL;
92
+ }
93
+
94
+ /* Quick and dirty solution to resolve shared library name from ld script. */
95
+ static const char *clib_resolve_lds(lua_State *L, const char *name)
96
+ {
97
+ FILE *fp = fopen(name, "r");
98
+ const char *p = NULL;
99
+ if (fp) {
100
+ char buf[256];
101
+ if (fgets(buf, sizeof(buf), fp)) {
102
+ if (!strncmp(buf, "/* GNU ld script", 16)) { /* ld script magic? */
103
+ while (fgets(buf, sizeof(buf), fp)) { /* Check all lines. */
104
+ p = clib_check_lds(L, buf);
105
+ if (p) break;
106
+ }
107
+ } else { /* Otherwise check only the first line. */
108
+ p = clib_check_lds(L, buf);
109
+ }
110
+ }
111
+ fclose(fp);
112
+ }
113
+ return p;
114
+ }
115
+
116
+ static void *clib_loadlib(lua_State *L, const char *name, int global)
117
+ {
118
+ void *h = dlopen(clib_extname(L, name),
119
+ RTLD_LAZY | (global?RTLD_GLOBAL:RTLD_LOCAL));
120
+ if (!h) {
121
+ const char *e, *err = dlerror();
122
+ if (*err == '/' && (e = strchr(err, ':')) &&
123
+ (name = clib_resolve_lds(L, strdata(lj_str_new(L, err, e-err))))) {
124
+ h = dlopen(name, RTLD_LAZY | (global?RTLD_GLOBAL:RTLD_LOCAL));
125
+ if (h) return h;
126
+ err = dlerror();
127
+ }
128
+ lj_err_callermsg(L, err);
129
+ }
130
+ return h;
131
+ }
132
+
133
+ static void clib_unloadlib(CLibrary *cl)
134
+ {
135
+ if (cl->handle && cl->handle != CLIB_DEFHANDLE)
136
+ dlclose(cl->handle);
137
+ }
138
+
139
+ static void *clib_getsym(CLibrary *cl, const char *name)
140
+ {
141
+ void *p = dlsym(cl->handle, name);
142
+ return p;
143
+ }
144
+
145
+ #elif LJ_TARGET_WINDOWS
146
+
147
+ #define WIN32_LEAN_AND_MEAN
148
+ #include <windows.h>
149
+
150
+ #ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
151
+ #define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4
152
+ #define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 2
153
+ BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*);
154
+ #endif
155
+
156
+ #define CLIB_DEFHANDLE ((void *)-1)
157
+
158
+ /* Default libraries. */
159
+ enum {
160
+ CLIB_HANDLE_EXE,
161
+ CLIB_HANDLE_DLL,
162
+ CLIB_HANDLE_CRT,
163
+ CLIB_HANDLE_KERNEL32,
164
+ CLIB_HANDLE_USER32,
165
+ CLIB_HANDLE_GDI32,
166
+ CLIB_HANDLE_MAX
167
+ };
168
+
169
+ static void *clib_def_handle[CLIB_HANDLE_MAX];
170
+
171
+ LJ_NORET LJ_NOINLINE static void clib_error(lua_State *L, const char *fmt,
172
+ const char *name)
173
+ {
174
+ DWORD err = GetLastError();
175
+ #if LJ_TARGET_XBOXONE
176
+ wchar_t wbuf[128];
177
+ char buf[128*2];
178
+ if (!FormatMessageW(FORMAT_MESSAGE_IGNORE_INSERTS|FORMAT_MESSAGE_FROM_SYSTEM,
179
+ NULL, err, 0, wbuf, sizeof(wbuf)/sizeof(wchar_t), NULL) ||
180
+ !WideCharToMultiByte(CP_ACP, 0, wbuf, 128, buf, 128*2, NULL, NULL))
181
+ #else
182
+ char buf[128];
183
+ if (!FormatMessageA(FORMAT_MESSAGE_IGNORE_INSERTS|FORMAT_MESSAGE_FROM_SYSTEM,
184
+ NULL, err, 0, buf, sizeof(buf), NULL))
185
+ #endif
186
+ buf[0] = '\0';
187
+ lj_err_callermsg(L, lj_strfmt_pushf(L, fmt, name, buf));
188
+ }
189
+
190
+ static int clib_needext(const char *s)
191
+ {
192
+ while (*s) {
193
+ if (*s == '/' || *s == '\\' || *s == '.') return 0;
194
+ s++;
195
+ }
196
+ return 1;
197
+ }
198
+
199
+ static const char *clib_extname(lua_State *L, const char *name)
200
+ {
201
+ if (clib_needext(name)) {
202
+ name = lj_strfmt_pushf(L, "%s.dll", name);
203
+ L->top--;
204
+ }
205
+ return name;
206
+ }
207
+
208
+ static void *clib_loadlib(lua_State *L, const char *name, int global)
209
+ {
210
+ DWORD oldwerr = GetLastError();
211
+ void *h = (void *)LoadLibraryExA(clib_extname(L, name), NULL, 0);
212
+ if (!h) clib_error(L, "cannot load module " LUA_QS ": %s", name);
213
+ SetLastError(oldwerr);
214
+ UNUSED(global);
215
+ return h;
216
+ }
217
+
218
+ static void clib_unloadlib(CLibrary *cl)
219
+ {
220
+ if (cl->handle == CLIB_DEFHANDLE) {
221
+ MSize i;
222
+ for (i = CLIB_HANDLE_KERNEL32; i < CLIB_HANDLE_MAX; i++) {
223
+ void *h = clib_def_handle[i];
224
+ if (h) {
225
+ clib_def_handle[i] = NULL;
226
+ FreeLibrary((HINSTANCE)h);
227
+ }
228
+ }
229
+ } else if (cl->handle) {
230
+ FreeLibrary((HINSTANCE)cl->handle);
231
+ }
232
+ }
233
+
234
+ static void *clib_getsym(CLibrary *cl, const char *name)
235
+ {
236
+ void *p = NULL;
237
+ if (cl->handle == CLIB_DEFHANDLE) { /* Search default libraries. */
238
+ MSize i;
239
+ for (i = 0; i < CLIB_HANDLE_MAX; i++) {
240
+ HINSTANCE h = (HINSTANCE)clib_def_handle[i];
241
+ if (!(void *)h) { /* Resolve default library handles (once). */
242
+ switch (i) {
243
+ case CLIB_HANDLE_EXE: GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, NULL, &h); break;
244
+ case CLIB_HANDLE_DLL:
245
+ GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
246
+ (const char *)clib_def_handle, &h);
247
+ break;
248
+ case CLIB_HANDLE_CRT:
249
+ GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
250
+ (const char *)&_fmode, &h);
251
+ break;
252
+ case CLIB_HANDLE_KERNEL32: h = LoadLibraryExA("kernel32.dll", NULL, 0); break;
253
+ case CLIB_HANDLE_USER32: h = LoadLibraryExA("user32.dll", NULL, 0); break;
254
+ case CLIB_HANDLE_GDI32: h = LoadLibraryExA("gdi32.dll", NULL, 0); break;
255
+ }
256
+ if (!h) continue;
257
+ clib_def_handle[i] = (void *)h;
258
+ }
259
+ p = (void *)GetProcAddress(h, name);
260
+ if (p) break;
261
+ }
262
+ } else {
263
+ p = (void *)GetProcAddress((HINSTANCE)cl->handle, name);
264
+ }
265
+ return p;
266
+ }
267
+
268
+ #else
269
+
270
+ #define CLIB_DEFHANDLE NULL
271
+
272
+ LJ_NORET LJ_NOINLINE static void clib_error(lua_State *L, const char *fmt,
273
+ const char *name)
274
+ {
275
+ lj_err_callermsg(L, lj_strfmt_pushf(L, fmt, name, "no support for this OS"));
276
+ }
277
+
278
+ static void *clib_loadlib(lua_State *L, const char *name, int global)
279
+ {
280
+ lj_err_callermsg(L, "no support for loading dynamic libraries for this OS");
281
+ UNUSED(name); UNUSED(global);
282
+ return NULL;
283
+ }
284
+
285
+ static void clib_unloadlib(CLibrary *cl)
286
+ {
287
+ UNUSED(cl);
288
+ }
289
+
290
+ static void *clib_getsym(CLibrary *cl, const char *name)
291
+ {
292
+ UNUSED(cl); UNUSED(name);
293
+ return NULL;
294
+ }
295
+
296
+ #endif
297
+
298
+ /* -- C library indexing -------------------------------------------------- */
299
+
300
+ #if LJ_TARGET_X86 && LJ_ABI_WIN
301
+ /* Compute argument size for fastcall/stdcall functions. */
302
+ static CTSize clib_func_argsize(CTState *cts, CType *ct)
303
+ {
304
+ CTSize n = 0;
305
+ while (ct->sib) {
306
+ CType *d;
307
+ ct = ctype_get(cts, ct->sib);
308
+ if (ctype_isfield(ct->info)) {
309
+ d = ctype_rawchild(cts, ct);
310
+ n += ((d->size + 3) & ~3);
311
+ }
312
+ }
313
+ return n;
314
+ }
315
+ #endif
316
+
317
+ /* Get redirected or mangled external symbol. */
318
+ static const char *clib_extsym(CTState *cts, CType *ct, GCstr *name)
319
+ {
320
+ if (ct->sib) {
321
+ CType *ctf = ctype_get(cts, ct->sib);
322
+ if (ctype_isxattrib(ctf->info, CTA_REDIR))
323
+ return strdata(gco2str(gcref(ctf->name)));
324
+ }
325
+ return strdata(name);
326
+ }
327
+
328
+ /* Index a C library by name. */
329
+ TValue *lj_clib_index(lua_State *L, CLibrary *cl, GCstr *name)
330
+ {
331
+ TValue *tv = lj_tab_setstr(L, cl->cache, name);
332
+ if (LJ_UNLIKELY(tvisnil(tv))) {
333
+ CTState *cts = ctype_cts(L);
334
+ CType *ct;
335
+ CTypeID id = lj_ctype_getname(cts, &ct, name, CLNS_INDEX);
336
+ if (!id)
337
+ lj_err_callerv(L, LJ_ERR_FFI_NODECL, strdata(name));
338
+ if (ctype_isconstval(ct->info)) {
339
+ CType *ctt = ctype_child(cts, ct);
340
+ lua_assert(ctype_isinteger(ctt->info) && ctt->size <= 4);
341
+ if ((ctt->info & CTF_UNSIGNED) && (int32_t)ct->size < 0)
342
+ setnumV(tv, (lua_Number)(uint32_t)ct->size);
343
+ else
344
+ setintV(tv, (int32_t)ct->size);
345
+ } else {
346
+ const char *sym = clib_extsym(cts, ct, name);
347
+ #if LJ_TARGET_WINDOWS
348
+ DWORD oldwerr = GetLastError();
349
+ #endif
350
+ void *p = clib_getsym(cl, sym);
351
+ GCcdata *cd;
352
+ lua_assert(ctype_isfunc(ct->info) || ctype_isextern(ct->info));
353
+ #if LJ_TARGET_X86 && LJ_ABI_WIN
354
+ /* Retry with decorated name for fastcall/stdcall functions. */
355
+ if (!p && ctype_isfunc(ct->info)) {
356
+ CTInfo cconv = ctype_cconv(ct->info);
357
+ if (cconv == CTCC_FASTCALL || cconv == CTCC_STDCALL) {
358
+ CTSize sz = clib_func_argsize(cts, ct);
359
+ const char *symd = lj_strfmt_pushf(L,
360
+ cconv == CTCC_FASTCALL ? "@%s@%d" : "_%s@%d",
361
+ sym, sz);
362
+ L->top--;
363
+ p = clib_getsym(cl, symd);
364
+ }
365
+ }
366
+ #endif
367
+ if (!p)
368
+ clib_error(L, "cannot resolve symbol " LUA_QS ": %s", sym);
369
+ #if LJ_TARGET_WINDOWS
370
+ SetLastError(oldwerr);
371
+ #endif
372
+ cd = lj_cdata_new(cts, id, CTSIZE_PTR);
373
+ *(void **)cdataptr(cd) = p;
374
+ setcdataV(L, tv, cd);
375
+ }
376
+ }
377
+ return tv;
378
+ }
379
+
380
+ /* -- C library management ------------------------------------------------ */
381
+
382
+ /* Create a new CLibrary object and push it on the stack. */
383
+ static CLibrary *clib_new(lua_State *L, GCtab *mt)
384
+ {
385
+ GCtab *t = lj_tab_new(L, 0, 0);
386
+ GCudata *ud = lj_udata_new(L, sizeof(CLibrary), t);
387
+ CLibrary *cl = (CLibrary *)uddata(ud);
388
+ cl->cache = t;
389
+ ud->udtype = UDTYPE_FFI_CLIB;
390
+ /* NOBARRIER: The GCudata is new (marked white). */
391
+ setgcref(ud->metatable, obj2gco(mt));
392
+ setudataV(L, L->top++, ud);
393
+ return cl;
394
+ }
395
+
396
+ /* Load a C library. */
397
+ void lj_clib_load(lua_State *L, GCtab *mt, GCstr *name, int global)
398
+ {
399
+ void *handle = clib_loadlib(L, strdata(name), global);
400
+ CLibrary *cl = clib_new(L, mt);
401
+ cl->handle = handle;
402
+ }
403
+
404
+ /* Unload a C library. */
405
+ void lj_clib_unload(CLibrary *cl)
406
+ {
407
+ clib_unloadlib(cl);
408
+ cl->handle = NULL;
409
+ }
410
+
411
+ /* Create the default C library object. */
412
+ void lj_clib_default(lua_State *L, GCtab *mt)
413
+ {
414
+ CLibrary *cl = clib_new(L, mt);
415
+ cl->handle = CLIB_DEFHANDLE;
416
+ }
417
+
418
+ #endif