immunio 1.2.1 → 2.0.2

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 (291) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -5
  3. data/ext/immunio/Rakefile +14 -6
  4. data/lib/immunio/context.rb +2 -0
  5. data/lib/immunio/plugins/action_view.rb +7 -668
  6. data/lib/immunio/plugins/action_view/action_view.rb +22 -0
  7. data/lib/immunio/plugins/action_view/active_support_hash.rb +29 -0
  8. data/lib/immunio/plugins/action_view/cache_store.rb +24 -0
  9. data/lib/immunio/plugins/action_view/erubi.rb +38 -0
  10. data/lib/immunio/plugins/action_view/erubis.rb +39 -0
  11. data/lib/immunio/plugins/action_view/fragment_caching.rb +29 -0
  12. data/lib/immunio/plugins/action_view/haml.rb +46 -0
  13. data/lib/immunio/plugins/action_view/slim.rb +42 -0
  14. data/lib/immunio/plugins/action_view/template.rb +431 -0
  15. data/lib/immunio/plugins/action_view/template_rendering.rb +45 -0
  16. data/lib/immunio/plugins/http_tracker.rb +2 -0
  17. data/lib/immunio/plugins/io.rb +34 -0
  18. data/lib/immunio/version.rb +1 -1
  19. data/lua-hooks/Makefile +36 -9
  20. data/lua-hooks/ext/luajit/COPYRIGHT +1 -1
  21. data/lua-hooks/ext/luajit/Makefile +22 -15
  22. data/lua-hooks/ext/luajit/README +2 -2
  23. data/lua-hooks/ext/luajit/doc/bluequad-print.css +1 -1
  24. data/lua-hooks/ext/luajit/doc/bluequad.css +1 -1
  25. data/lua-hooks/ext/luajit/doc/changes.html +69 -3
  26. data/lua-hooks/ext/luajit/doc/contact.html +10 -3
  27. data/lua-hooks/ext/luajit/doc/ext_c_api.html +2 -2
  28. data/lua-hooks/ext/luajit/doc/ext_ffi.html +2 -2
  29. data/lua-hooks/ext/luajit/doc/ext_ffi_api.html +2 -2
  30. data/lua-hooks/ext/luajit/doc/ext_ffi_semantics.html +3 -4
  31. data/lua-hooks/ext/luajit/doc/ext_ffi_tutorial.html +2 -2
  32. data/lua-hooks/ext/luajit/doc/ext_jit.html +3 -3
  33. data/lua-hooks/ext/luajit/doc/ext_profiler.html +2 -2
  34. data/lua-hooks/ext/luajit/doc/extensions.html +47 -20
  35. data/lua-hooks/ext/luajit/doc/faq.html +2 -2
  36. data/lua-hooks/ext/luajit/doc/install.html +74 -45
  37. data/lua-hooks/ext/luajit/doc/luajit.html +5 -5
  38. data/lua-hooks/ext/luajit/doc/running.html +3 -3
  39. data/lua-hooks/ext/luajit/doc/status.html +13 -8
  40. data/lua-hooks/ext/luajit/dynasm/dasm_arm.h +1 -1
  41. data/lua-hooks/ext/luajit/dynasm/dasm_arm.lua +1 -1
  42. data/lua-hooks/ext/luajit/dynasm/dasm_arm64.h +1 -1
  43. data/lua-hooks/ext/luajit/dynasm/dasm_arm64.lua +1 -1
  44. data/lua-hooks/ext/luajit/dynasm/dasm_mips.h +8 -5
  45. data/lua-hooks/ext/luajit/dynasm/dasm_mips.lua +66 -11
  46. data/lua-hooks/ext/luajit/dynasm/dasm_mips64.lua +12 -0
  47. data/lua-hooks/ext/luajit/dynasm/dasm_ppc.h +1 -1
  48. data/lua-hooks/ext/luajit/dynasm/dasm_ppc.lua +1 -1
  49. data/lua-hooks/ext/luajit/dynasm/dasm_proto.h +1 -1
  50. data/lua-hooks/ext/luajit/dynasm/dasm_x64.lua +1 -1
  51. data/lua-hooks/ext/luajit/dynasm/dasm_x86.h +1 -1
  52. data/lua-hooks/ext/luajit/dynasm/dasm_x86.lua +5 -1
  53. data/lua-hooks/ext/luajit/dynasm/dynasm.lua +2 -2
  54. data/lua-hooks/ext/luajit/etc/luajit.1 +1 -1
  55. data/lua-hooks/ext/luajit/etc/luajit.pc +1 -1
  56. data/lua-hooks/ext/luajit/src/Makefile +15 -11
  57. data/lua-hooks/ext/luajit/src/Makefile.dep +16 -16
  58. data/lua-hooks/ext/luajit/src/host/buildvm.c +2 -2
  59. data/lua-hooks/ext/luajit/src/host/buildvm.h +1 -1
  60. data/lua-hooks/ext/luajit/src/host/buildvm_asm.c +9 -4
  61. data/lua-hooks/ext/luajit/src/host/buildvm_fold.c +2 -2
  62. data/lua-hooks/ext/luajit/src/host/buildvm_lib.c +1 -1
  63. data/lua-hooks/ext/luajit/src/host/buildvm_libbc.h +14 -3
  64. data/lua-hooks/ext/luajit/src/host/buildvm_peobj.c +27 -3
  65. data/lua-hooks/ext/luajit/src/host/genlibbc.lua +1 -1
  66. data/lua-hooks/ext/luajit/src/host/genminilua.lua +6 -5
  67. data/lua-hooks/ext/luajit/src/host/minilua.c +1 -1
  68. data/lua-hooks/ext/luajit/src/jit/bc.lua +1 -1
  69. data/lua-hooks/ext/luajit/src/jit/bcsave.lua +8 -8
  70. data/lua-hooks/ext/luajit/src/jit/dis_arm.lua +2 -2
  71. data/lua-hooks/ext/luajit/src/jit/dis_arm64.lua +1216 -0
  72. data/lua-hooks/ext/luajit/src/jit/dis_arm64be.lua +12 -0
  73. data/lua-hooks/ext/luajit/src/jit/dis_mips.lua +35 -20
  74. data/lua-hooks/ext/luajit/src/jit/dis_mips64.lua +17 -0
  75. data/lua-hooks/ext/luajit/src/jit/dis_mips64el.lua +17 -0
  76. data/lua-hooks/ext/luajit/src/jit/dis_mipsel.lua +1 -1
  77. data/lua-hooks/ext/luajit/src/jit/dis_ppc.lua +2 -2
  78. data/lua-hooks/ext/luajit/src/jit/dis_x64.lua +1 -1
  79. data/lua-hooks/ext/luajit/src/jit/dis_x86.lua +7 -4
  80. data/lua-hooks/ext/luajit/src/jit/dump.lua +17 -12
  81. data/lua-hooks/ext/luajit/src/jit/p.lua +3 -2
  82. data/lua-hooks/ext/luajit/src/jit/v.lua +2 -2
  83. data/lua-hooks/ext/luajit/src/jit/zone.lua +1 -1
  84. data/lua-hooks/ext/luajit/src/lauxlib.h +14 -20
  85. data/lua-hooks/ext/luajit/src/lib_aux.c +38 -27
  86. data/lua-hooks/ext/luajit/src/lib_base.c +12 -5
  87. data/lua-hooks/ext/luajit/src/lib_bit.c +1 -1
  88. data/lua-hooks/ext/luajit/src/lib_debug.c +5 -5
  89. data/lua-hooks/ext/luajit/src/lib_ffi.c +2 -2
  90. data/lua-hooks/ext/luajit/src/lib_init.c +16 -16
  91. data/lua-hooks/ext/luajit/src/lib_io.c +6 -7
  92. data/lua-hooks/ext/luajit/src/lib_jit.c +14 -4
  93. data/lua-hooks/ext/luajit/src/lib_math.c +1 -5
  94. data/lua-hooks/ext/luajit/src/lib_os.c +1 -1
  95. data/lua-hooks/ext/luajit/src/lib_package.c +14 -23
  96. data/lua-hooks/ext/luajit/src/lib_string.c +1 -5
  97. data/lua-hooks/ext/luajit/src/lib_table.c +21 -1
  98. data/lua-hooks/ext/luajit/src/lj.supp +3 -3
  99. data/lua-hooks/ext/luajit/src/lj_alloc.c +174 -83
  100. data/lua-hooks/ext/luajit/src/lj_api.c +97 -18
  101. data/lua-hooks/ext/luajit/src/lj_arch.h +54 -22
  102. data/lua-hooks/ext/luajit/src/lj_asm.c +172 -53
  103. data/lua-hooks/ext/luajit/src/lj_asm.h +1 -1
  104. data/lua-hooks/ext/luajit/src/lj_asm_arm.h +19 -16
  105. data/lua-hooks/ext/luajit/src/lj_asm_arm64.h +2022 -0
  106. data/lua-hooks/ext/luajit/src/lj_asm_mips.h +564 -158
  107. data/lua-hooks/ext/luajit/src/lj_asm_ppc.h +19 -18
  108. data/lua-hooks/ext/luajit/src/lj_asm_x86.h +578 -92
  109. data/lua-hooks/ext/luajit/src/lj_bc.c +1 -1
  110. data/lua-hooks/ext/luajit/src/lj_bc.h +1 -1
  111. data/lua-hooks/ext/luajit/src/lj_bcdump.h +1 -1
  112. data/lua-hooks/ext/luajit/src/lj_bcread.c +1 -1
  113. data/lua-hooks/ext/luajit/src/lj_bcwrite.c +1 -1
  114. data/lua-hooks/ext/luajit/src/lj_buf.c +1 -1
  115. data/lua-hooks/ext/luajit/src/lj_buf.h +1 -1
  116. data/lua-hooks/ext/luajit/src/lj_carith.c +1 -1
  117. data/lua-hooks/ext/luajit/src/lj_carith.h +1 -1
  118. data/lua-hooks/ext/luajit/src/lj_ccall.c +172 -7
  119. data/lua-hooks/ext/luajit/src/lj_ccall.h +21 -5
  120. data/lua-hooks/ext/luajit/src/lj_ccallback.c +71 -17
  121. data/lua-hooks/ext/luajit/src/lj_ccallback.h +1 -1
  122. data/lua-hooks/ext/luajit/src/lj_cconv.c +4 -2
  123. data/lua-hooks/ext/luajit/src/lj_cconv.h +1 -1
  124. data/lua-hooks/ext/luajit/src/lj_cdata.c +7 -5
  125. data/lua-hooks/ext/luajit/src/lj_cdata.h +1 -1
  126. data/lua-hooks/ext/luajit/src/lj_clib.c +5 -5
  127. data/lua-hooks/ext/luajit/src/lj_clib.h +1 -1
  128. data/lua-hooks/ext/luajit/src/lj_cparse.c +11 -6
  129. data/lua-hooks/ext/luajit/src/lj_cparse.h +1 -1
  130. data/lua-hooks/ext/luajit/src/lj_crecord.c +70 -14
  131. data/lua-hooks/ext/luajit/src/lj_crecord.h +1 -1
  132. data/lua-hooks/ext/luajit/src/lj_ctype.c +1 -1
  133. data/lua-hooks/ext/luajit/src/lj_ctype.h +8 -8
  134. data/lua-hooks/ext/luajit/src/lj_debug.c +1 -1
  135. data/lua-hooks/ext/luajit/src/lj_debug.h +1 -1
  136. data/lua-hooks/ext/luajit/src/lj_def.h +6 -9
  137. data/lua-hooks/ext/luajit/src/lj_dispatch.c +3 -3
  138. data/lua-hooks/ext/luajit/src/lj_dispatch.h +2 -1
  139. data/lua-hooks/ext/luajit/src/lj_emit_arm.h +5 -4
  140. data/lua-hooks/ext/luajit/src/lj_emit_arm64.h +419 -0
  141. data/lua-hooks/ext/luajit/src/lj_emit_mips.h +100 -20
  142. data/lua-hooks/ext/luajit/src/lj_emit_ppc.h +4 -4
  143. data/lua-hooks/ext/luajit/src/lj_emit_x86.h +116 -25
  144. data/lua-hooks/ext/luajit/src/lj_err.c +34 -13
  145. data/lua-hooks/ext/luajit/src/lj_err.h +1 -1
  146. data/lua-hooks/ext/luajit/src/lj_errmsg.h +1 -1
  147. data/lua-hooks/ext/luajit/src/lj_ff.h +1 -1
  148. data/lua-hooks/ext/luajit/src/lj_ffrecord.c +58 -49
  149. data/lua-hooks/ext/luajit/src/lj_ffrecord.h +1 -1
  150. data/lua-hooks/ext/luajit/src/lj_frame.h +33 -6
  151. data/lua-hooks/ext/luajit/src/lj_func.c +4 -2
  152. data/lua-hooks/ext/luajit/src/lj_func.h +1 -1
  153. data/lua-hooks/ext/luajit/src/lj_gc.c +16 -7
  154. data/lua-hooks/ext/luajit/src/lj_gc.h +1 -1
  155. data/lua-hooks/ext/luajit/src/lj_gdbjit.c +31 -1
  156. data/lua-hooks/ext/luajit/src/lj_gdbjit.h +1 -1
  157. data/lua-hooks/ext/luajit/src/lj_ir.c +69 -96
  158. data/lua-hooks/ext/luajit/src/lj_ir.h +29 -18
  159. data/lua-hooks/ext/luajit/src/lj_ircall.h +24 -30
  160. data/lua-hooks/ext/luajit/src/lj_iropt.h +9 -9
  161. data/lua-hooks/ext/luajit/src/lj_jit.h +67 -9
  162. data/lua-hooks/ext/luajit/src/lj_lex.c +1 -1
  163. data/lua-hooks/ext/luajit/src/lj_lex.h +1 -1
  164. data/lua-hooks/ext/luajit/src/lj_lib.c +1 -1
  165. data/lua-hooks/ext/luajit/src/lj_lib.h +1 -1
  166. data/lua-hooks/ext/luajit/src/lj_load.c +1 -1
  167. data/lua-hooks/ext/luajit/src/lj_mcode.c +11 -10
  168. data/lua-hooks/ext/luajit/src/lj_mcode.h +1 -1
  169. data/lua-hooks/ext/luajit/src/lj_meta.c +1 -1
  170. data/lua-hooks/ext/luajit/src/lj_meta.h +1 -1
  171. data/lua-hooks/ext/luajit/src/lj_obj.c +1 -1
  172. data/lua-hooks/ext/luajit/src/lj_obj.h +7 -3
  173. data/lua-hooks/ext/luajit/src/lj_opt_dce.c +1 -1
  174. data/lua-hooks/ext/luajit/src/lj_opt_fold.c +84 -17
  175. data/lua-hooks/ext/luajit/src/lj_opt_loop.c +1 -1
  176. data/lua-hooks/ext/luajit/src/lj_opt_mem.c +3 -3
  177. data/lua-hooks/ext/luajit/src/lj_opt_narrow.c +24 -22
  178. data/lua-hooks/ext/luajit/src/lj_opt_sink.c +11 -6
  179. data/lua-hooks/ext/luajit/src/lj_opt_split.c +11 -2
  180. data/lua-hooks/ext/luajit/src/lj_parse.c +9 -7
  181. data/lua-hooks/ext/luajit/src/lj_parse.h +1 -1
  182. data/lua-hooks/ext/luajit/src/lj_profile.c +1 -1
  183. data/lua-hooks/ext/luajit/src/lj_profile.h +1 -1
  184. data/lua-hooks/ext/luajit/src/lj_record.c +201 -117
  185. data/lua-hooks/ext/luajit/src/lj_record.h +1 -1
  186. data/lua-hooks/ext/luajit/src/lj_snap.c +72 -26
  187. data/lua-hooks/ext/luajit/src/lj_snap.h +1 -1
  188. data/lua-hooks/ext/luajit/src/lj_state.c +6 -6
  189. data/lua-hooks/ext/luajit/src/lj_state.h +2 -2
  190. data/lua-hooks/ext/luajit/src/lj_str.c +1 -1
  191. data/lua-hooks/ext/luajit/src/lj_str.h +1 -1
  192. data/lua-hooks/ext/luajit/src/lj_strfmt.c +7 -3
  193. data/lua-hooks/ext/luajit/src/lj_strfmt.h +1 -1
  194. data/lua-hooks/ext/luajit/src/lj_strfmt_num.c +4 -3
  195. data/lua-hooks/ext/luajit/src/lj_strscan.c +1 -1
  196. data/lua-hooks/ext/luajit/src/lj_strscan.h +1 -1
  197. data/lua-hooks/ext/luajit/src/lj_tab.c +1 -2
  198. data/lua-hooks/ext/luajit/src/lj_tab.h +1 -1
  199. data/lua-hooks/ext/luajit/src/lj_target.h +3 -3
  200. data/lua-hooks/ext/luajit/src/lj_target_arm.h +1 -1
  201. data/lua-hooks/ext/luajit/src/lj_target_arm64.h +239 -7
  202. data/lua-hooks/ext/luajit/src/lj_target_mips.h +111 -22
  203. data/lua-hooks/ext/luajit/src/lj_target_ppc.h +1 -1
  204. data/lua-hooks/ext/luajit/src/lj_target_x86.h +21 -4
  205. data/lua-hooks/ext/luajit/src/lj_trace.c +63 -18
  206. data/lua-hooks/ext/luajit/src/lj_trace.h +2 -1
  207. data/lua-hooks/ext/luajit/src/lj_traceerr.h +1 -1
  208. data/lua-hooks/ext/luajit/src/lj_udata.c +1 -1
  209. data/lua-hooks/ext/luajit/src/lj_udata.h +1 -1
  210. data/lua-hooks/ext/luajit/src/lj_vm.h +5 -1
  211. data/lua-hooks/ext/luajit/src/lj_vmevent.c +1 -1
  212. data/lua-hooks/ext/luajit/src/lj_vmevent.h +1 -1
  213. data/lua-hooks/ext/luajit/src/lj_vmmath.c +1 -1
  214. data/lua-hooks/ext/luajit/src/ljamalg.c +1 -1
  215. data/lua-hooks/ext/luajit/src/lua.h +9 -1
  216. data/lua-hooks/ext/luajit/src/luaconf.h +3 -7
  217. data/lua-hooks/ext/luajit/src/luajit.c +69 -54
  218. data/lua-hooks/ext/luajit/src/luajit.h +4 -4
  219. data/lua-hooks/ext/luajit/src/lualib.h +1 -1
  220. data/lua-hooks/ext/luajit/src/msvcbuild.bat +12 -4
  221. data/lua-hooks/ext/luajit/src/vm_arm.dasc +1 -1
  222. data/lua-hooks/ext/luajit/src/vm_arm64.dasc +255 -32
  223. data/lua-hooks/ext/luajit/src/vm_mips.dasc +26 -23
  224. data/lua-hooks/ext/luajit/src/vm_mips64.dasc +5062 -0
  225. data/lua-hooks/ext/luajit/src/vm_ppc.dasc +1 -1
  226. data/lua-hooks/ext/luajit/src/vm_x64.dasc +24 -25
  227. data/lua-hooks/ext/luajit/src/vm_x86.dasc +77 -4
  228. data/lua-hooks/libluahooks.darwin.a +0 -0
  229. data/lua-hooks/libluahooks.linux.a +0 -0
  230. data/lua-hooks/options.mk +1 -1
  231. metadata +37 -77
  232. data/lua-hooks/ext/all.c +0 -69
  233. data/lua-hooks/ext/libinjection/COPYING +0 -37
  234. data/lua-hooks/ext/libinjection/libinjection.h +0 -65
  235. data/lua-hooks/ext/libinjection/libinjection_html5.c +0 -847
  236. data/lua-hooks/ext/libinjection/libinjection_html5.h +0 -54
  237. data/lua-hooks/ext/libinjection/libinjection_sqli.c +0 -2301
  238. data/lua-hooks/ext/libinjection/libinjection_sqli.h +0 -295
  239. data/lua-hooks/ext/libinjection/libinjection_sqli_data.h +0 -9349
  240. data/lua-hooks/ext/libinjection/libinjection_xss.c +0 -531
  241. data/lua-hooks/ext/libinjection/libinjection_xss.h +0 -21
  242. data/lua-hooks/ext/libinjection/lualib.c +0 -145
  243. data/lua-hooks/ext/libinjection/module.mk +0 -5
  244. data/lua-hooks/ext/lpeg/HISTORY +0 -96
  245. data/lua-hooks/ext/lpeg/lpcap.c +0 -537
  246. data/lua-hooks/ext/lpeg/lpcap.h +0 -56
  247. data/lua-hooks/ext/lpeg/lpcode.c +0 -1014
  248. data/lua-hooks/ext/lpeg/lpcode.h +0 -40
  249. data/lua-hooks/ext/lpeg/lpeg-128.gif +0 -0
  250. data/lua-hooks/ext/lpeg/lpeg.html +0 -1445
  251. data/lua-hooks/ext/lpeg/lpprint.c +0 -244
  252. data/lua-hooks/ext/lpeg/lpprint.h +0 -36
  253. data/lua-hooks/ext/lpeg/lptree.c +0 -1303
  254. data/lua-hooks/ext/lpeg/lptree.h +0 -82
  255. data/lua-hooks/ext/lpeg/lptypes.h +0 -149
  256. data/lua-hooks/ext/lpeg/lpvm.c +0 -364
  257. data/lua-hooks/ext/lpeg/lpvm.h +0 -58
  258. data/lua-hooks/ext/lpeg/makefile +0 -55
  259. data/lua-hooks/ext/lpeg/module.mk +0 -6
  260. data/lua-hooks/ext/lpeg/re.html +0 -498
  261. data/lua-hooks/ext/lua-cmsgpack/.gitignore +0 -13
  262. data/lua-hooks/ext/lua-cmsgpack/CMakeLists.txt +0 -45
  263. data/lua-hooks/ext/lua-cmsgpack/README.md +0 -115
  264. data/lua-hooks/ext/lua-cmsgpack/lua_cmsgpack.c +0 -970
  265. data/lua-hooks/ext/lua-cmsgpack/module.mk +0 -2
  266. data/lua-hooks/ext/lua-cmsgpack/test.lua +0 -570
  267. data/lua-hooks/ext/lua-snapshot/LICENSE +0 -7
  268. data/lua-hooks/ext/lua-snapshot/Makefile +0 -12
  269. data/lua-hooks/ext/lua-snapshot/README.md +0 -18
  270. data/lua-hooks/ext/lua-snapshot/dump.lua +0 -15
  271. data/lua-hooks/ext/lua-snapshot/module.mk +0 -2
  272. data/lua-hooks/ext/lua-snapshot/snapshot.c +0 -462
  273. data/lua-hooks/ext/luautf8/README.md +0 -152
  274. data/lua-hooks/ext/luautf8/lutf8lib.c +0 -1274
  275. data/lua-hooks/ext/luautf8/module.mk +0 -2
  276. data/lua-hooks/ext/luautf8/unidata.h +0 -3064
  277. data/lua-hooks/ext/module.mk +0 -15
  278. data/lua-hooks/ext/modules.h +0 -17
  279. data/lua-hooks/ext/perf/luacpu.c +0 -114
  280. data/lua-hooks/ext/perf/lualoadavg.c +0 -40
  281. data/lua-hooks/ext/perf/luameminfo.c +0 -38
  282. data/lua-hooks/ext/perf/luaoslib.c +0 -203
  283. data/lua-hooks/ext/perf/module.mk +0 -5
  284. data/lua-hooks/ext/sha1/luasha1.c +0 -74
  285. data/lua-hooks/ext/sha1/module.mk +0 -5
  286. data/lua-hooks/ext/sha1/sha1.c +0 -145
  287. data/lua-hooks/ext/sha2/luasha256.c +0 -77
  288. data/lua-hooks/ext/sha2/module.mk +0 -5
  289. data/lua-hooks/ext/sha2/sha256.c +0 -196
  290. data/lua-hooks/ext/sysutils/lua_utils.c +0 -56
  291. data/lua-hooks/ext/sysutils/module.mk +0 -2
@@ -1,69 +0,0 @@
1
- /*
2
- * Based on Lua's all.c -- Lua core & libraries in a single file.
3
- */
4
-
5
- #define luaall_c
6
-
7
- #include "lua.h"
8
- #include "lauxlib.h"
9
- #include "lualib.h"
10
-
11
- #include "modules.h"
12
-
13
-
14
- static const luaL_Reg lj_lib_load[] = {
15
- // Default Lua modules
16
- //
17
- // SECURITY NOTE:
18
- // Some of the following modules are unsafe according to http://lua-users.org/wiki/SandBoxes.
19
- // They are loaded, but never exposed to the sandbox used to run the hook handlers.
20
- // See lib/boot.lua for more details.
21
- { "", luaopen_base },
22
- { LUA_LOADLIBNAME, luaopen_package },
23
- { LUA_TABLIBNAME, luaopen_table },
24
- #if defined(LUA_UNSAFE_MODE)
25
- { LUA_IOLIBNAME, luaopen_io },
26
- { LUA_OSLIBNAME, luaopen_os },
27
- #endif
28
- { LUA_STRLIBNAME, luaopen_string },
29
- { LUA_MATHLIBNAME, luaopen_math },
30
- { LUA_DBLIBNAME, luaopen_debug },
31
- { LUA_BITLIBNAME, luaopen_bit },
32
- { LUA_JITLIBNAME, luaopen_jit },
33
-
34
- // Our custom modules
35
- {"libinjection", luaopen_libinjection},
36
- {"utf8", luaopen_utf8},
37
- {"lpeg", luaopen_lpeg},
38
- {"cmsgpack", luaopen_cmsgpack},
39
- {"snapshot", luaopen_snapshot},
40
- {"sha1", luaopen_sha1},
41
- {"sha2", luaopen_sha256},
42
- {"perf", luaopen_cpuload},
43
- {"perf", luaopen_loadavg},
44
- {"perf", luaopen_meminfo},
45
- {"perf", luaopen_luaos},
46
- {"sysutils", luaopen_sysutils},
47
-
48
- { NULL, NULL }
49
- };
50
-
51
- // Ruby agent requires these functions to be present.
52
- // In safe mode, where they are not, we provide a noop.
53
- #if !defined(LUA_UNSAFE_MODE) && !defined(LUA_NO_MOCK_UNSAFE)
54
- LUALIB_API int luaopen_io(lua_State *L) {
55
- return 0;
56
- }
57
- LUALIB_API int luaopen_os(lua_State *L) {
58
- return 0;
59
- }
60
- #endif
61
-
62
- LUALIB_API void luaL_openlibs(lua_State *L) {
63
- const luaL_Reg *lib;
64
- for (lib = lj_lib_load; lib->func; lib++) {
65
- lua_pushcfunction(L, lib->func);
66
- lua_pushstring(L, lib->name);
67
- lua_call(L, 1, 0);
68
- }
69
- }
@@ -1,37 +0,0 @@
1
- /*
2
- * Copyright 2012, 2013, 2014
3
- * Nick Galbreath -- nickg [at] client9 [dot] com
4
- * http://www.client9.com/projects/libinjection/
5
- *
6
- * All rights reserved.
7
- *
8
- * Redistribution and use in source and binary forms, with or without
9
- * modification, are permitted provided that the following conditions are
10
- * met:
11
- *
12
- * Redistributions of source code must retain the above copyright
13
- * notice, this list of conditions and the following disclaimer.
14
- *
15
- * Redistributions in binary form must reproduce the above copyright
16
- * notice, this list of conditions and the following disclaimer in the
17
- * documentation and/or other materials provided with the distribution.
18
- *
19
- * Neither the name of libinjection nor the names of its
20
- * contributors may be used to endorse or promote products derived from
21
- * this software without specific prior written permission.
22
- *
23
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
- *
35
- * This is the standard "new" BSD license:
36
- * http://www.opensource.org/licenses/bsd-license.php
37
- */
@@ -1,65 +0,0 @@
1
- /**
2
- * Copyright 2012, 2013 Nick Galbreath
3
- * nickg@client9.com
4
- * BSD License -- see COPYING.txt for details
5
- *
6
- * https://libinjection.client9.com/
7
- *
8
- */
9
-
10
- #ifndef _LIBINJECTION_H
11
- #define _LIBINJECTION_H
12
-
13
- #ifdef __cplusplus
14
- # define LIBINJECTION_BEGIN_DECLS extern "C" {
15
- # define LIBINJECTION_END_DECLS }
16
- #else
17
- # define LIBINJECTION_BEGIN_DECLS
18
- # define LIBINJECTION_END_DECLS
19
- #endif
20
-
21
- LIBINJECTION_BEGIN_DECLS
22
-
23
- /*
24
- * Pull in size_t
25
- */
26
- #include <string.h>
27
-
28
- /*
29
- * Version info.
30
- *
31
- * This is moved into a function to allow SWIG and other auto-generated
32
- * binding to not be modified during minor release changes. We change
33
- * change the version number in the c source file, and not regenerated
34
- * the binding
35
- *
36
- * See python's normalized version
37
- * http://www.python.org/dev/peps/pep-0386/#normalizedversion
38
- */
39
- const char* libinjection_version(void);
40
-
41
- /**
42
- * Simple API for SQLi detection - returns a SQLi fingerprint or NULL
43
- * is benign input
44
- *
45
- * \param[in] s input string, may contain nulls, does not need to be null-terminated
46
- * \param[in] slen input string length
47
- * \param[out] fingerprint buffer of 8+ characters. c-string,
48
- * \return 1 if SQLi, 0 if benign. fingerprint will be set or set to empty string.
49
- */
50
- int libinjection_sqli(const char* s, size_t slen, char fingerprint[]);
51
-
52
- /** ALPHA version of xss detector.
53
- *
54
- * NOT DONE.
55
- *
56
- * \param[in] s input string, may contain nulls, does not need to be null-terminated
57
- * \param[in] slen input string length
58
- * \return 1 if XSS found, 0 if benign
59
- *
60
- */
61
- int libinjection_xss(const char* s, size_t slen);
62
-
63
- LIBINJECTION_END_DECLS
64
-
65
- #endif /* _LIBINJECTION_H */
@@ -1,847 +0,0 @@
1
- #include "libinjection_html5.h"
2
-
3
- #include <string.h>
4
- #include <assert.h>
5
-
6
- #ifdef DEBUG
7
- #include <stdio.h>
8
- #define TRACE() printf("%s:%d\n", __FUNCTION__, __LINE__)
9
- #else
10
- #define TRACE()
11
- #endif
12
-
13
-
14
- #define CHAR_EOF -1
15
- #define CHAR_NULL 0
16
- #define CHAR_BANG 33
17
- #define CHAR_DOUBLE 34
18
- #define CHAR_PERCENT 37
19
- #define CHAR_SINGLE 39
20
- #define CHAR_DASH 45
21
- #define CHAR_SLASH 47
22
- #define CHAR_LT 60
23
- #define CHAR_EQUALS 61
24
- #define CHAR_GT 62
25
- #define CHAR_QUESTION 63
26
- #define CHAR_RIGHTB 93
27
- #define CHAR_TICK 96
28
-
29
- /* prototypes */
30
-
31
- static int h5_skip_white(h5_state_t* hs);
32
- static int h5_is_white(char c);
33
- static int h5_state_eof(h5_state_t* hs);
34
- static int h5_state_data(h5_state_t* hs);
35
- static int h5_state_tag_open(h5_state_t* hs);
36
- static int h5_state_tag_name(h5_state_t* hs);
37
- static int h5_state_tag_name_close(h5_state_t* hs);
38
- static int h5_state_end_tag_open(h5_state_t* hs);
39
- static int h5_state_self_closing_start_tag(h5_state_t* hs);
40
- static int h5_state_attribute_name(h5_state_t* hs);
41
- static int h5_state_after_attribute_name(h5_state_t* hs);
42
- static int h5_state_before_attribute_name(h5_state_t* hs);
43
- static int h5_state_before_attribute_value(h5_state_t* hs);
44
- static int h5_state_attribute_value_double_quote(h5_state_t* hs);
45
- static int h5_state_attribute_value_single_quote(h5_state_t* hs);
46
- static int h5_state_attribute_value_back_quote(h5_state_t* hs);
47
- static int h5_state_attribute_value_no_quote(h5_state_t* hs);
48
- static int h5_state_after_attribute_value_quoted_state(h5_state_t* hs);
49
- static int h5_state_comment(h5_state_t* hs);
50
- static int h5_state_cdata(h5_state_t* hs);
51
-
52
-
53
- /* 12.2.4.44 */
54
- static int h5_state_bogus_comment(h5_state_t* hs);
55
- static int h5_state_bogus_comment2(h5_state_t* hs);
56
-
57
- /* 12.2.4.45 */
58
- static int h5_state_markup_declaration_open(h5_state_t* hs);
59
-
60
- /* 8.2.4.52 */
61
- static int h5_state_doctype(h5_state_t* hs);
62
-
63
- /**
64
- * public function
65
- */
66
- void libinjection_h5_init(h5_state_t* hs, const char* s, size_t len, enum html5_flags flags)
67
- {
68
- memset(hs, 0, sizeof(h5_state_t));
69
- hs->s = s;
70
- hs->len = len;
71
-
72
- switch (flags) {
73
- case DATA_STATE:
74
- hs->state = h5_state_data;
75
- break;
76
- case VALUE_NO_QUOTE:
77
- hs->state = h5_state_before_attribute_name;
78
- break;
79
- case VALUE_SINGLE_QUOTE:
80
- hs->state = h5_state_attribute_value_single_quote;
81
- break;
82
- case VALUE_DOUBLE_QUOTE:
83
- hs->state = h5_state_attribute_value_double_quote;
84
- break;
85
- case VALUE_BACK_QUOTE:
86
- hs->state = h5_state_attribute_value_back_quote;
87
- break;
88
- }
89
- }
90
-
91
- /**
92
- * public function
93
- */
94
- int libinjection_h5_next(h5_state_t* hs)
95
- {
96
- assert(hs->state != NULL);
97
- return (*hs->state)(hs);
98
- }
99
-
100
- /**
101
- * Everything below here is private
102
- *
103
- */
104
-
105
-
106
- static int h5_is_white(char ch)
107
- {
108
- /*
109
- * \t = htab = 0x09
110
- * \n = newline = 0x0A
111
- * \v = vtab = 0x0B
112
- * \f = form feed = 0x0C
113
- * \r = cr = 0x0D
114
- */
115
- return strchr(" \t\n\v\f\r", ch) != NULL;
116
- }
117
-
118
- static int h5_skip_white(h5_state_t* hs)
119
- {
120
- char ch;
121
- while (hs->pos < hs->len) {
122
- ch = hs->s[hs->pos];
123
- switch (ch) {
124
- case 0x00: /* IE only */
125
- case 0x20:
126
- case 0x09:
127
- case 0x0A:
128
- case 0x0B: /* IE only */
129
- case 0x0C:
130
- case 0x0D: /* IE only */
131
- hs->pos += 1;
132
- break;
133
- default:
134
- return ch;
135
- }
136
- }
137
- return CHAR_EOF;
138
- }
139
-
140
- static int h5_state_eof(h5_state_t* hs)
141
- {
142
- /* eliminate unused function argument warning */
143
- (void)hs;
144
- return 0;
145
- }
146
-
147
- static int h5_state_data(h5_state_t* hs)
148
- {
149
- const char* idx;
150
-
151
- TRACE();
152
- assert(hs->len >= hs->pos);
153
- idx = (const char*) memchr(hs->s + hs->pos, CHAR_LT, hs->len - hs->pos);
154
- if (idx == NULL) {
155
- hs->token_start = hs->s + hs->pos;
156
- hs->token_len = hs->len - hs->pos;
157
- hs->token_type = DATA_TEXT;
158
- hs->state = h5_state_eof;
159
- if (hs->token_len == 0) {
160
- return 0;
161
- }
162
- } else {
163
- hs->token_start = hs->s + hs->pos;
164
- hs->token_type = DATA_TEXT;
165
- hs->token_len = (size_t)(idx - hs->s) - hs->pos;
166
- hs->pos = (size_t)(idx - hs->s) + 1;
167
- hs->state = h5_state_tag_open;
168
- if (hs->token_len == 0) {
169
- return h5_state_tag_open(hs);
170
- }
171
- }
172
- return 1;
173
- }
174
-
175
- /**
176
- * 12 2.4.8
177
- */
178
- static int h5_state_tag_open(h5_state_t* hs)
179
- {
180
- char ch;
181
-
182
- TRACE();
183
- ch = hs->s[hs->pos];
184
- if (ch == CHAR_BANG) {
185
- hs->pos += 1;
186
- return h5_state_markup_declaration_open(hs);
187
- } else if (ch == CHAR_SLASH) {
188
- hs->pos += 1;
189
- hs->is_close = 1;
190
- return h5_state_end_tag_open(hs);
191
- } else if (ch == CHAR_QUESTION) {
192
- hs->pos += 1;
193
- return h5_state_bogus_comment(hs);
194
- } else if (ch == CHAR_PERCENT) {
195
- /* this is not in spec.. alternative comment format used
196
- by IE <= 9 and Safari < 4.0.3 */
197
- hs->pos += 1;
198
- return h5_state_bogus_comment2(hs);
199
- } else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
200
- return h5_state_tag_name(hs);
201
- } else if (ch == CHAR_NULL) {
202
- /* IE-ism NULL characters are ignored */
203
- return h5_state_tag_name(hs);
204
- } else {
205
- /* user input mistake in configuring state */
206
- if (hs->pos == 0) {
207
- return h5_state_data(hs);
208
- }
209
- hs->token_start = hs->s + hs->pos - 1;
210
- hs->token_len = 1;
211
- hs->token_type = DATA_TEXT;
212
- hs->state = h5_state_data;
213
- return 1;
214
- }
215
- }
216
- /**
217
- * 12.2.4.9
218
- */
219
- static int h5_state_end_tag_open(h5_state_t* hs)
220
- {
221
- char ch;
222
-
223
- TRACE();
224
-
225
- if (hs->pos >= hs->len) {
226
- return 0;
227
- }
228
- ch = hs->s[hs->pos];
229
- if (ch == CHAR_GT) {
230
- return h5_state_data(hs);
231
- } else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
232
- return h5_state_tag_name(hs);
233
- }
234
-
235
- hs->is_close = 0;
236
- return h5_state_bogus_comment(hs);
237
- }
238
- /*
239
- *
240
- */
241
- static int h5_state_tag_name_close(h5_state_t* hs)
242
- {
243
- TRACE();
244
- hs->is_close = 0;
245
- hs->token_start = hs->s + hs->pos;
246
- hs->token_len = 1;
247
- hs->token_type = TAG_NAME_CLOSE;
248
- hs->pos += 1;
249
- if (hs->pos < hs->len) {
250
- hs->state = h5_state_data;
251
- } else {
252
- hs->state = h5_state_eof;
253
- }
254
-
255
- return 1;
256
- }
257
-
258
- /**
259
- * 12.2.4.10
260
- */
261
- static int h5_state_tag_name(h5_state_t* hs)
262
- {
263
- char ch;
264
- size_t pos;
265
-
266
- TRACE();
267
- pos = hs->pos;
268
- while (pos < hs->len) {
269
- ch = hs->s[pos];
270
- if (ch == 0) {
271
- /* special non-standard case */
272
- /* allow nulls in tag name */
273
- /* some old browsers apparently allow and ignore them */
274
- pos += 1;
275
- } else if (h5_is_white(ch)) {
276
- hs->token_start = hs->s + hs->pos;
277
- hs->token_len = pos - hs->pos;
278
- hs->token_type = TAG_NAME_OPEN;
279
- hs->pos = pos + 1;
280
- hs->state = h5_state_before_attribute_name;
281
- return 1;
282
- } else if (ch == CHAR_SLASH) {
283
- hs->token_start = hs->s + hs->pos;
284
- hs->token_len = pos - hs->pos;
285
- hs->token_type = TAG_NAME_OPEN;
286
- hs->pos = pos + 1;
287
- hs->state = h5_state_self_closing_start_tag;
288
- return 1;
289
- } else if (ch == CHAR_GT) {
290
- hs->token_start = hs->s + hs->pos;
291
- hs->token_len = pos - hs->pos;
292
- if (hs->is_close) {
293
- hs->pos = pos + 1;
294
- hs->is_close = 0;
295
- hs->token_type = TAG_CLOSE;
296
- hs->state = h5_state_data;
297
- } else {
298
- hs->pos = pos;
299
- hs->token_type = TAG_NAME_OPEN;
300
- hs->state = h5_state_tag_name_close;
301
- }
302
- return 1;
303
- } else {
304
- pos += 1;
305
- }
306
- }
307
-
308
- hs->token_start = hs->s + hs->pos;
309
- hs->token_len = hs->len - hs->pos;
310
- hs->token_type = TAG_NAME_OPEN;
311
- hs->state = h5_state_eof;
312
- return 1;
313
- }
314
-
315
- /**
316
- * 12.2.4.34
317
- */
318
- static int h5_state_before_attribute_name(h5_state_t* hs)
319
- {
320
- int ch;
321
-
322
- TRACE();
323
- ch = h5_skip_white(hs);
324
- switch (ch) {
325
- case CHAR_EOF: {
326
- return 0;
327
- }
328
- case CHAR_SLASH: {
329
- hs->pos += 1;
330
- return h5_state_self_closing_start_tag(hs);
331
- }
332
- case CHAR_GT: {
333
- hs->state = h5_state_data;
334
- hs->token_start = hs->s + hs->pos;
335
- hs->token_len = 1;
336
- hs->token_type = TAG_NAME_CLOSE;
337
- hs->pos += 1;
338
- return 1;
339
- }
340
- default: {
341
- return h5_state_attribute_name(hs);
342
- }
343
- }
344
- }
345
-
346
- static int h5_state_attribute_name(h5_state_t* hs)
347
- {
348
- char ch;
349
- size_t pos;
350
-
351
- TRACE();
352
- pos = hs->pos + 1;
353
- while (pos < hs->len) {
354
- ch = hs->s[pos];
355
- if (h5_is_white(ch)) {
356
- hs->token_start = hs->s + hs->pos;
357
- hs->token_len = pos - hs->pos;
358
- hs->token_type = ATTR_NAME;
359
- hs->state = h5_state_after_attribute_name;
360
- hs->pos = pos + 1;
361
- return 1;
362
- } else if (ch == CHAR_SLASH) {
363
- hs->token_start = hs->s + hs->pos;
364
- hs->token_len = pos - hs->pos;
365
- hs->token_type = ATTR_NAME;
366
- hs->state = h5_state_self_closing_start_tag;
367
- hs->pos = pos + 1;
368
- return 1;
369
- } else if (ch == CHAR_EQUALS) {
370
- hs->token_start = hs->s + hs->pos;
371
- hs->token_len = pos - hs->pos;
372
- hs->token_type = ATTR_NAME;
373
- hs->state = h5_state_before_attribute_value;
374
- hs->pos = pos + 1;
375
- return 1;
376
- } else if (ch == CHAR_GT) {
377
- hs->token_start = hs->s + hs->pos;
378
- hs->token_len = pos - hs->pos;
379
- hs->token_type = ATTR_NAME;
380
- hs->state = h5_state_tag_name_close;
381
- hs->pos = pos;
382
- return 1;
383
- } else {
384
- pos += 1;
385
- }
386
- }
387
- /* EOF */
388
- hs->token_start = hs->s + hs->pos;
389
- hs->token_len = hs->len - hs->pos;
390
- hs->token_type = ATTR_NAME;
391
- hs->state = h5_state_eof;
392
- hs->pos = hs->len;
393
- return 1;
394
- }
395
-
396
- /**
397
- * 12.2.4.36
398
- */
399
- static int h5_state_after_attribute_name(h5_state_t* hs)
400
- {
401
- int c;
402
-
403
- TRACE();
404
- c = h5_skip_white(hs);
405
- switch (c) {
406
- case CHAR_EOF: {
407
- return 0;
408
- }
409
- case CHAR_SLASH: {
410
- hs->pos += 1;
411
- return h5_state_self_closing_start_tag(hs);
412
- }
413
- case CHAR_EQUALS: {
414
- hs->pos += 1;
415
- return h5_state_before_attribute_value(hs);
416
- }
417
- case CHAR_GT: {
418
- return h5_state_tag_name_close(hs);
419
- }
420
- default: {
421
- return h5_state_attribute_name(hs);
422
- }
423
- }
424
- }
425
-
426
- /**
427
- * 12.2.4.37
428
- */
429
- static int h5_state_before_attribute_value(h5_state_t* hs)
430
- {
431
- int c;
432
- TRACE();
433
-
434
- c = h5_skip_white(hs);
435
-
436
- if (c == CHAR_EOF) {
437
- hs->state = h5_state_eof;
438
- return 0;
439
- }
440
-
441
- if (c == CHAR_DOUBLE) {
442
- return h5_state_attribute_value_double_quote(hs);
443
- } else if (c == CHAR_SINGLE) {
444
- return h5_state_attribute_value_single_quote(hs);
445
- } else if (c == CHAR_TICK) {
446
- /* NON STANDARD IE */
447
- return h5_state_attribute_value_back_quote(hs);
448
- } else {
449
- return h5_state_attribute_value_no_quote(hs);
450
- }
451
- }
452
-
453
-
454
- static int h5_state_attribute_value_quote(h5_state_t* hs, char qchar)
455
- {
456
- const char* idx;
457
-
458
- TRACE();
459
-
460
- /* skip initial quote in normal case.
461
- * dont do this is pos == 0 since it means we have started
462
- * in a non-data state. given an input of '><foo
463
- * we want to make 0-length attribute name
464
- */
465
- if (hs->pos > 0) {
466
- hs->pos += 1;
467
- }
468
-
469
-
470
- idx = (const char*) memchr(hs->s + hs->pos, qchar, hs->len - hs->pos);
471
- if (idx == NULL) {
472
- hs->token_start = hs->s + hs->pos;
473
- hs->token_len = hs->len - hs->pos;
474
- hs->token_type = ATTR_VALUE;
475
- hs->state = h5_state_eof;
476
- } else {
477
- hs->token_start = hs->s + hs->pos;
478
- hs->token_len = (size_t)(idx - hs->s) - hs->pos;
479
- hs->token_type = ATTR_VALUE;
480
- hs->state = h5_state_after_attribute_value_quoted_state;
481
- hs->pos += hs->token_len + 1;
482
- }
483
- return 1;
484
- }
485
-
486
- static
487
- int h5_state_attribute_value_double_quote(h5_state_t* hs)
488
- {
489
- TRACE();
490
- return h5_state_attribute_value_quote(hs, CHAR_DOUBLE);
491
- }
492
-
493
- static
494
- int h5_state_attribute_value_single_quote(h5_state_t* hs)
495
- {
496
- TRACE();
497
- return h5_state_attribute_value_quote(hs, CHAR_SINGLE);
498
- }
499
-
500
- static
501
- int h5_state_attribute_value_back_quote(h5_state_t* hs)
502
- {
503
- TRACE();
504
- return h5_state_attribute_value_quote(hs, CHAR_TICK);
505
- }
506
-
507
- static int h5_state_attribute_value_no_quote(h5_state_t* hs)
508
- {
509
- char ch;
510
- size_t pos;
511
-
512
- TRACE();
513
- pos = hs->pos;
514
- while (pos < hs->len) {
515
- ch = hs->s[pos];
516
- if (h5_is_white(ch)) {
517
- hs->token_type = ATTR_VALUE;
518
- hs->token_start = hs->s + hs->pos;
519
- hs->token_len = pos - hs->pos;
520
- hs->pos = pos + 1;
521
- hs->state = h5_state_before_attribute_name;
522
- return 1;
523
- } else if (ch == CHAR_GT) {
524
- hs->token_type = ATTR_VALUE;
525
- hs->token_start = hs->s + hs->pos;
526
- hs->token_len = pos - hs->pos;
527
- hs->pos = pos;
528
- hs->state = h5_state_tag_name_close;
529
- return 1;
530
- }
531
- pos += 1;
532
- }
533
- TRACE();
534
- /* EOF */
535
- hs->state = h5_state_eof;
536
- hs->token_start = hs->s + hs->pos;
537
- hs->token_len = hs->len - hs->pos;
538
- hs->token_type = ATTR_VALUE;
539
- return 1;
540
- }
541
-
542
- /**
543
- * 12.2.4.41
544
- */
545
- static int h5_state_after_attribute_value_quoted_state(h5_state_t* hs)
546
- {
547
- char ch;
548
-
549
- TRACE();
550
- if (hs->pos >= hs->len) {
551
- return 0;
552
- }
553
- ch = hs->s[hs->pos];
554
- if (h5_is_white(ch)) {
555
- hs->pos += 1;
556
- return h5_state_before_attribute_name(hs);
557
- } else if (ch == CHAR_SLASH) {
558
- hs->pos += 1;
559
- return h5_state_self_closing_start_tag(hs);
560
- } else if (ch == CHAR_GT) {
561
- hs->token_start = hs->s + hs->pos;
562
- hs->token_len = 1;
563
- hs->token_type = TAG_NAME_CLOSE;
564
- hs->pos += 1;
565
- hs->state = h5_state_data;
566
- return 1;
567
- } else {
568
- return h5_state_before_attribute_name(hs);
569
- }
570
- }
571
-
572
- /**
573
- * 12.2.4.43
574
- */
575
- static int h5_state_self_closing_start_tag(h5_state_t* hs)
576
- {
577
- char ch;
578
-
579
- TRACE();
580
- if (hs->pos >= hs->len) {
581
- return 0;
582
- }
583
- ch = hs->s[hs->pos];
584
- if (ch == CHAR_GT) {
585
- assert(hs->pos > 0);
586
- hs->token_start = hs->s + hs->pos -1;
587
- hs->token_len = 2;
588
- hs->token_type = TAG_NAME_SELFCLOSE;
589
- hs->state = h5_state_data;
590
- hs->pos += 1;
591
- return 1;
592
- } else {
593
- return h5_state_before_attribute_name(hs);
594
- }
595
- }
596
-
597
- /**
598
- * 12.2.4.44
599
- */
600
- static int h5_state_bogus_comment(h5_state_t* hs)
601
- {
602
- const char* idx;
603
-
604
- TRACE();
605
- idx = (const char*) memchr(hs->s + hs->pos, CHAR_GT, hs->len - hs->pos);
606
- if (idx == NULL) {
607
- hs->token_start = hs->s + hs->pos;
608
- hs->token_len = hs->len - hs->pos;
609
- hs->pos = hs->len;
610
- hs->state = h5_state_eof;
611
- } else {
612
- hs->token_start = hs->s + hs->pos;
613
- hs->token_len = (size_t)(idx - hs->s) - hs->pos;
614
- hs->pos = (size_t)(idx - hs->s) + 1;
615
- hs->state = h5_state_data;
616
- }
617
-
618
- hs->token_type = TAG_COMMENT;
619
- return 1;
620
- }
621
-
622
- /**
623
- * 12.2.4.44 ALT
624
- */
625
- static int h5_state_bogus_comment2(h5_state_t* hs)
626
- {
627
- const char* idx;
628
- size_t pos;
629
-
630
- TRACE();
631
- pos = hs->pos;
632
- while (1) {
633
- idx = (const char*) memchr(hs->s + pos, CHAR_PERCENT, hs->len - pos);
634
- if (idx == NULL || (idx + 1 >= hs->s + hs->len)) {
635
- hs->token_start = hs->s + hs->pos;
636
- hs->token_len = hs->len - hs->pos;
637
- hs->pos = hs->len;
638
- hs->token_type = TAG_COMMENT;
639
- hs->state = h5_state_eof;
640
- return 1;
641
- }
642
-
643
- if (*(idx +1) != CHAR_GT) {
644
- pos = (size_t)(idx - hs->s) + 1;
645
- continue;
646
- }
647
-
648
- /* ends in %> */
649
- hs->token_start = hs->s + hs->pos;
650
- hs->token_len = (size_t)(idx - hs->s) - hs->pos;
651
- hs->pos = (size_t)(idx - hs->s) + 2;
652
- hs->state = h5_state_data;
653
- hs->token_type = TAG_COMMENT;
654
- return 1;
655
- }
656
- }
657
-
658
- /**
659
- * 8.2.4.45
660
- */
661
- static int h5_state_markup_declaration_open(h5_state_t* hs)
662
- {
663
- size_t remaining;
664
-
665
- TRACE();
666
- remaining = hs->len - hs->pos;
667
- if (remaining >= 7 &&
668
- /* case insensitive */
669
- (hs->s[hs->pos + 0] == 'D' || hs->s[hs->pos + 0] == 'd') &&
670
- (hs->s[hs->pos + 1] == 'O' || hs->s[hs->pos + 1] == 'o') &&
671
- (hs->s[hs->pos + 2] == 'C' || hs->s[hs->pos + 2] == 'c') &&
672
- (hs->s[hs->pos + 3] == 'T' || hs->s[hs->pos + 3] == 't') &&
673
- (hs->s[hs->pos + 4] == 'Y' || hs->s[hs->pos + 4] == 'y') &&
674
- (hs->s[hs->pos + 5] == 'P' || hs->s[hs->pos + 5] == 'p') &&
675
- (hs->s[hs->pos + 6] == 'E' || hs->s[hs->pos + 6] == 'e')
676
- ) {
677
- return h5_state_doctype(hs);
678
- } else if (remaining >= 7 &&
679
- /* upper case required */
680
- hs->s[hs->pos + 0] == '[' &&
681
- hs->s[hs->pos + 1] == 'C' &&
682
- hs->s[hs->pos + 2] == 'D' &&
683
- hs->s[hs->pos + 3] == 'A' &&
684
- hs->s[hs->pos + 4] == 'T' &&
685
- hs->s[hs->pos + 5] == 'A' &&
686
- hs->s[hs->pos + 6] == '['
687
- ) {
688
- hs->pos += 7;
689
- return h5_state_cdata(hs);
690
- } else if (remaining >= 2 &&
691
- hs->s[hs->pos + 0] == '-' &&
692
- hs->s[hs->pos + 1] == '-') {
693
- hs->pos += 2;
694
- return h5_state_comment(hs);
695
- }
696
-
697
- return h5_state_bogus_comment(hs);
698
- }
699
-
700
- /**
701
- * 12.2.4.48
702
- * 12.2.4.49
703
- * 12.2.4.50
704
- * 12.2.4.51
705
- * state machine spec is confusing since it can only look
706
- * at one character at a time but simply it's comments end by:
707
- * 1) EOF
708
- * 2) ending in -->
709
- * 3) ending in -!>
710
- */
711
- static int h5_state_comment(h5_state_t* hs)
712
- {
713
- char ch;
714
- const char* idx;
715
- size_t pos;
716
- size_t offset;
717
- const char* end = hs->s + hs->len;
718
-
719
- TRACE();
720
- pos = hs->pos;
721
- while (1) {
722
-
723
- idx = (const char*) memchr(hs->s + pos, CHAR_DASH, hs->len - pos);
724
-
725
- /* did not find anything or has less than 3 chars left */
726
- if (idx == NULL || idx > hs->s + hs->len - 3) {
727
- hs->state = h5_state_eof;
728
- hs->token_start = hs->s + hs->pos;
729
- hs->token_len = hs->len - hs->pos;
730
- hs->token_type = TAG_COMMENT;
731
- return 1;
732
- }
733
- offset = 1;
734
-
735
- /* skip all nulls */
736
- while (idx + offset < end && *(idx + offset) == 0) {
737
- offset += 1;
738
- }
739
- if (idx + offset == end) {
740
- hs->state = h5_state_eof;
741
- hs->token_start = hs->s + hs->pos;
742
- hs->token_len = hs->len - hs->pos;
743
- hs->token_type = TAG_COMMENT;
744
- return 1;
745
- }
746
-
747
- ch = *(idx + offset);
748
- if (ch != CHAR_DASH && ch != CHAR_BANG) {
749
- pos = (size_t)(idx - hs->s) + 1;
750
- continue;
751
- }
752
-
753
- /* need to test */
754
- #if 0
755
- /* skip all nulls */
756
- while (idx + offset < end && *(idx + offset) == 0) {
757
- offset += 1;
758
- }
759
- if (idx + offset == end) {
760
- hs->state = h5_state_eof;
761
- hs->token_start = hs->s + hs->pos;
762
- hs->token_len = hs->len - hs->pos;
763
- hs->token_type = TAG_COMMENT;
764
- return 1;
765
- }
766
- #endif
767
-
768
- offset += 1;
769
- if (idx + offset == end) {
770
- hs->state = h5_state_eof;
771
- hs->token_start = hs->s + hs->pos;
772
- hs->token_len = hs->len - hs->pos;
773
- hs->token_type = TAG_COMMENT;
774
- return 1;
775
- }
776
-
777
-
778
- ch = *(idx + offset);
779
- if (ch != CHAR_GT) {
780
- pos = (size_t)(idx - hs->s) + 1;
781
- continue;
782
- }
783
- offset += 1;
784
-
785
- /* ends in --> or -!> */
786
- hs->token_start = hs->s + hs->pos;
787
- hs->token_len = (size_t)(idx - hs->s) - hs->pos;
788
- hs->pos = (size_t)(idx + offset - hs->s);
789
- hs->state = h5_state_data;
790
- hs->token_type = TAG_COMMENT;
791
- return 1;
792
- }
793
- }
794
-
795
- static int h5_state_cdata(h5_state_t* hs)
796
- {
797
- const char* idx;
798
- size_t pos;
799
-
800
- TRACE();
801
- pos = hs->pos;
802
- while (1) {
803
- idx = (const char*) memchr(hs->s + pos, CHAR_RIGHTB, hs->len - pos);
804
-
805
- /* did not find anything or has less than 3 chars left */
806
- if (idx == NULL || idx > hs->s + hs->len - 3) {
807
- hs->state = h5_state_eof;
808
- hs->token_start = hs->s + hs->pos;
809
- hs->token_len = hs->len - hs->pos;
810
- hs->token_type = DATA_TEXT;
811
- return 1;
812
- } else if ( *(idx+1) == CHAR_RIGHTB && *(idx+2) == CHAR_GT) {
813
- hs->state = h5_state_data;
814
- hs->token_start = hs->s + hs->pos;
815
- hs->token_len = (size_t)(idx - hs->s) - hs->pos;
816
- hs->pos = (size_t)(idx - hs->s) + 3;
817
- hs->token_type = DATA_TEXT;
818
- return 1;
819
- } else {
820
- pos = (size_t)(idx - hs->s) + 1;
821
- }
822
- }
823
- }
824
-
825
- /**
826
- * 8.2.4.52
827
- * http://www.w3.org/html/wg/drafts/html/master/syntax.html#doctype-state
828
- */
829
- static int h5_state_doctype(h5_state_t* hs)
830
- {
831
- const char* idx;
832
-
833
- TRACE();
834
- hs->token_start = hs->s + hs->pos;
835
- hs->token_type = DOCTYPE;
836
-
837
- idx = (const char*) memchr(hs->s + hs->pos, CHAR_GT, hs->len - hs->pos);
838
- if (idx == NULL) {
839
- hs->state = h5_state_eof;
840
- hs->token_len = hs->len - hs->pos;
841
- } else {
842
- hs->state = h5_state_data;
843
- hs->token_len = (size_t)(idx - hs->s) - hs->pos;
844
- hs->pos = (size_t)(idx - hs->s) + 1;
845
- }
846
- return 1;
847
- }