immunio 1.2.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
- }