libmspack 0.10.1 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (391) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +37 -0
  3. data/.gitignore +2 -0
  4. data/Rakefile +1 -1
  5. data/ext/Rakefile +1 -1
  6. data/ext/libmspack/ChangeLog +145 -0
  7. data/ext/libmspack/INSTALL +3 -3
  8. data/ext/libmspack/Makefile.am +7 -4
  9. data/ext/libmspack/Makefile.in +265 -147
  10. data/ext/libmspack/README +3 -2
  11. data/ext/libmspack/aclocal.m4 +111 -113
  12. data/ext/libmspack/ar-lib +10 -9
  13. data/ext/libmspack/compile +9 -8
  14. data/ext/libmspack/config.guess +887 -613
  15. data/ext/libmspack/config.h.in +6 -9
  16. data/ext/libmspack/config.sub +1349 -1260
  17. data/ext/libmspack/configure +3035 -2490
  18. data/ext/libmspack/configure.ac +3 -3
  19. data/ext/libmspack/depcomp +4 -4
  20. data/ext/libmspack/install-sh +107 -74
  21. data/ext/libmspack/libmscabd.la +1 -1
  22. data/ext/libmspack/libmschmd.la +1 -1
  23. data/ext/libmspack/libmspack.la +1 -1
  24. data/ext/libmspack/ltmain.sh +156 -61
  25. data/ext/libmspack/m4/libtool.m4 +19 -12
  26. data/ext/libmspack/missing +8 -8
  27. data/ext/libmspack/mspack/cabd.c +21 -19
  28. data/ext/libmspack/mspack/chm.h +3 -2
  29. data/ext/libmspack/mspack/chmd.c +137 -57
  30. data/ext/libmspack/mspack/kwajd.c +29 -29
  31. data/ext/libmspack/mspack/lzx.h +0 -1
  32. data/ext/libmspack/mspack/lzxd.c +30 -154
  33. data/ext/libmspack/mspack/macros.h +64 -0
  34. data/ext/libmspack/mspack/mszipd.c +7 -18
  35. data/ext/libmspack/mspack/qtmd.c +3 -5
  36. data/ext/libmspack/mspack/readbits.h +14 -5
  37. data/ext/libmspack/mspack/readhuff.h +26 -21
  38. data/ext/libmspack/mspack/system.c +0 -5
  39. data/ext/libmspack/mspack/system.h +20 -67
  40. data/ext/libmspack/test-driver +16 -11
  41. data/ext/x86_64-linux/libmspack.so +0 -0
  42. data/ext/x86_64-windows/mspack.dll +0 -0
  43. data/lib/libmspack/version.rb +1 -1
  44. data/lib/libmspack.rb +1 -1
  45. data/libmspack.gemspec +1 -1
  46. metadata +7 -348
  47. data/.travis.yml +0 -5
  48. data/ext/i386-windows/libmspack.dll +0 -0
  49. data/ext/libmspack/doc/Doxyfile +0 -9
  50. data/ext/libmspack/doc/Makefile +0 -8
  51. data/ext/libmspack/doc/html/annotated.html +0 -104
  52. data/ext/libmspack/doc/html/bc_s.png +0 -0
  53. data/ext/libmspack/doc/html/bdwn.png +0 -0
  54. data/ext/libmspack/doc/html/classes.html +0 -85
  55. data/ext/libmspack/doc/html/closed.png +0 -0
  56. data/ext/libmspack/doc/html/dir_f4d90282fe865f947a460986b93b960a.html +0 -83
  57. data/ext/libmspack/doc/html/doc.png +0 -0
  58. data/ext/libmspack/doc/html/doxygen.css +0 -1596
  59. data/ext/libmspack/doc/html/doxygen.png +0 -0
  60. data/ext/libmspack/doc/html/dynsections.js +0 -97
  61. data/ext/libmspack/doc/html/files.html +0 -78
  62. data/ext/libmspack/doc/html/folderclosed.png +0 -0
  63. data/ext/libmspack/doc/html/folderopen.png +0 -0
  64. data/ext/libmspack/doc/html/functions.html +0 -454
  65. data/ext/libmspack/doc/html/functions_vars.html +0 -454
  66. data/ext/libmspack/doc/html/globals.html +0 -406
  67. data/ext/libmspack/doc/html/globals_defs.html +0 -316
  68. data/ext/libmspack/doc/html/globals_func.html +0 -161
  69. data/ext/libmspack/doc/html/graph_legend.html +0 -102
  70. data/ext/libmspack/doc/html/graph_legend.md5 +0 -1
  71. data/ext/libmspack/doc/html/graph_legend.png +0 -0
  72. data/ext/libmspack/doc/html/index.html +0 -167
  73. data/ext/libmspack/doc/html/jquery.js +0 -87
  74. data/ext/libmspack/doc/html/menu.js +0 -26
  75. data/ext/libmspack/doc/html/menudata.js +0 -56
  76. data/ext/libmspack/doc/html/mspack_8h.html +0 -2664
  77. data/ext/libmspack/doc/html/mspack_8h__incl.map +0 -2
  78. data/ext/libmspack/doc/html/mspack_8h__incl.md5 +0 -1
  79. data/ext/libmspack/doc/html/mspack_8h__incl.png +0 -0
  80. data/ext/libmspack/doc/html/mspack_8h_source.html +0 -238
  81. data/ext/libmspack/doc/html/nav_f.png +0 -0
  82. data/ext/libmspack/doc/html/nav_g.png +0 -0
  83. data/ext/libmspack/doc/html/nav_h.png +0 -0
  84. data/ext/libmspack/doc/html/open.png +0 -0
  85. data/ext/libmspack/doc/html/search/all_0.html +0 -26
  86. data/ext/libmspack/doc/html/search/all_0.js +0 -6
  87. data/ext/libmspack/doc/html/search/all_1.html +0 -26
  88. data/ext/libmspack/doc/html/search/all_1.js +0 -5
  89. data/ext/libmspack/doc/html/search/all_10.html +0 -26
  90. data/ext/libmspack/doc/html/search/all_10.js +0 -8
  91. data/ext/libmspack/doc/html/search/all_11.html +0 -26
  92. data/ext/libmspack/doc/html/search/all_11.js +0 -4
  93. data/ext/libmspack/doc/html/search/all_12.html +0 -26
  94. data/ext/libmspack/doc/html/search/all_12.js +0 -4
  95. data/ext/libmspack/doc/html/search/all_13.html +0 -26
  96. data/ext/libmspack/doc/html/search/all_13.js +0 -4
  97. data/ext/libmspack/doc/html/search/all_2.html +0 -26
  98. data/ext/libmspack/doc/html/search/all_2.js +0 -14
  99. data/ext/libmspack/doc/html/search/all_3.html +0 -26
  100. data/ext/libmspack/doc/html/search/all_3.js +0 -13
  101. data/ext/libmspack/doc/html/search/all_4.html +0 -26
  102. data/ext/libmspack/doc/html/search/all_4.js +0 -6
  103. data/ext/libmspack/doc/html/search/all_5.html +0 -26
  104. data/ext/libmspack/doc/html/search/all_5.js +0 -13
  105. data/ext/libmspack/doc/html/search/all_6.html +0 -26
  106. data/ext/libmspack/doc/html/search/all_6.js +0 -4
  107. data/ext/libmspack/doc/html/search/all_7.html +0 -26
  108. data/ext/libmspack/doc/html/search/all_7.js +0 -5
  109. data/ext/libmspack/doc/html/search/all_8.html +0 -26
  110. data/ext/libmspack/doc/html/search/all_8.js +0 -5
  111. data/ext/libmspack/doc/html/search/all_9.html +0 -26
  112. data/ext/libmspack/doc/html/search/all_9.js +0 -7
  113. data/ext/libmspack/doc/html/search/all_a.html +0 -26
  114. data/ext/libmspack/doc/html/search/all_a.js +0 -144
  115. data/ext/libmspack/doc/html/search/all_b.html +0 -26
  116. data/ext/libmspack/doc/html/search/all_b.js +0 -10
  117. data/ext/libmspack/doc/html/search/all_c.html +0 -26
  118. data/ext/libmspack/doc/html/search/all_c.js +0 -5
  119. data/ext/libmspack/doc/html/search/all_d.html +0 -26
  120. data/ext/libmspack/doc/html/search/all_d.js +0 -7
  121. data/ext/libmspack/doc/html/search/all_e.html +0 -26
  122. data/ext/libmspack/doc/html/search/all_e.js +0 -5
  123. data/ext/libmspack/doc/html/search/all_f.html +0 -26
  124. data/ext/libmspack/doc/html/search/all_f.js +0 -15
  125. data/ext/libmspack/doc/html/search/classes_0.html +0 -26
  126. data/ext/libmspack/doc/html/search/classes_0.js +0 -30
  127. data/ext/libmspack/doc/html/search/close.png +0 -0
  128. data/ext/libmspack/doc/html/search/defines_0.html +0 -26
  129. data/ext/libmspack/doc/html/search/defines_0.js +0 -84
  130. data/ext/libmspack/doc/html/search/files_0.html +0 -26
  131. data/ext/libmspack/doc/html/search/files_0.js +0 -4
  132. data/ext/libmspack/doc/html/search/functions_0.html +0 -26
  133. data/ext/libmspack/doc/html/search/functions_0.js +0 -33
  134. data/ext/libmspack/doc/html/search/mag_sel.png +0 -0
  135. data/ext/libmspack/doc/html/search/nomatches.html +0 -12
  136. data/ext/libmspack/doc/html/search/search.css +0 -271
  137. data/ext/libmspack/doc/html/search/search.js +0 -791
  138. data/ext/libmspack/doc/html/search/search_l.png +0 -0
  139. data/ext/libmspack/doc/html/search/search_m.png +0 -0
  140. data/ext/libmspack/doc/html/search/search_r.png +0 -0
  141. data/ext/libmspack/doc/html/search/searchdata.js +0 -30
  142. data/ext/libmspack/doc/html/search/variables_0.html +0 -26
  143. data/ext/libmspack/doc/html/search/variables_0.js +0 -6
  144. data/ext/libmspack/doc/html/search/variables_1.html +0 -26
  145. data/ext/libmspack/doc/html/search/variables_1.js +0 -5
  146. data/ext/libmspack/doc/html/search/variables_10.html +0 -26
  147. data/ext/libmspack/doc/html/search/variables_10.js +0 -8
  148. data/ext/libmspack/doc/html/search/variables_11.html +0 -26
  149. data/ext/libmspack/doc/html/search/variables_11.js +0 -4
  150. data/ext/libmspack/doc/html/search/variables_12.html +0 -26
  151. data/ext/libmspack/doc/html/search/variables_12.js +0 -4
  152. data/ext/libmspack/doc/html/search/variables_13.html +0 -26
  153. data/ext/libmspack/doc/html/search/variables_13.js +0 -4
  154. data/ext/libmspack/doc/html/search/variables_2.html +0 -26
  155. data/ext/libmspack/doc/html/search/variables_2.js +0 -14
  156. data/ext/libmspack/doc/html/search/variables_3.html +0 -26
  157. data/ext/libmspack/doc/html/search/variables_3.js +0 -13
  158. data/ext/libmspack/doc/html/search/variables_4.html +0 -26
  159. data/ext/libmspack/doc/html/search/variables_4.js +0 -6
  160. data/ext/libmspack/doc/html/search/variables_5.html +0 -26
  161. data/ext/libmspack/doc/html/search/variables_5.js +0 -13
  162. data/ext/libmspack/doc/html/search/variables_6.html +0 -26
  163. data/ext/libmspack/doc/html/search/variables_6.js +0 -4
  164. data/ext/libmspack/doc/html/search/variables_7.html +0 -26
  165. data/ext/libmspack/doc/html/search/variables_7.js +0 -5
  166. data/ext/libmspack/doc/html/search/variables_8.html +0 -26
  167. data/ext/libmspack/doc/html/search/variables_8.js +0 -5
  168. data/ext/libmspack/doc/html/search/variables_9.html +0 -26
  169. data/ext/libmspack/doc/html/search/variables_9.js +0 -7
  170. data/ext/libmspack/doc/html/search/variables_a.html +0 -26
  171. data/ext/libmspack/doc/html/search/variables_a.js +0 -5
  172. data/ext/libmspack/doc/html/search/variables_b.html +0 -26
  173. data/ext/libmspack/doc/html/search/variables_b.js +0 -10
  174. data/ext/libmspack/doc/html/search/variables_c.html +0 -26
  175. data/ext/libmspack/doc/html/search/variables_c.js +0 -5
  176. data/ext/libmspack/doc/html/search/variables_d.html +0 -26
  177. data/ext/libmspack/doc/html/search/variables_d.js +0 -7
  178. data/ext/libmspack/doc/html/search/variables_e.html +0 -26
  179. data/ext/libmspack/doc/html/search/variables_e.js +0 -5
  180. data/ext/libmspack/doc/html/search/variables_f.html +0 -26
  181. data/ext/libmspack/doc/html/search/variables_f.js +0 -15
  182. data/ext/libmspack/doc/html/splitbar.png +0 -0
  183. data/ext/libmspack/doc/html/structmscab__compressor.html +0 -106
  184. data/ext/libmspack/doc/html/structmscab__decompressor.html +0 -361
  185. data/ext/libmspack/doc/html/structmscab__decompressor__coll__graph.map +0 -5
  186. data/ext/libmspack/doc/html/structmscab__decompressor__coll__graph.md5 +0 -1
  187. data/ext/libmspack/doc/html/structmscab__decompressor__coll__graph.png +0 -0
  188. data/ext/libmspack/doc/html/structmscabd__cabinet.html +0 -418
  189. data/ext/libmspack/doc/html/structmscabd__cabinet__coll__graph.map +0 -4
  190. data/ext/libmspack/doc/html/structmscabd__cabinet__coll__graph.md5 +0 -1
  191. data/ext/libmspack/doc/html/structmscabd__cabinet__coll__graph.png +0 -0
  192. data/ext/libmspack/doc/html/structmscabd__file.html +0 -337
  193. data/ext/libmspack/doc/html/structmscabd__file__coll__graph.map +0 -3
  194. data/ext/libmspack/doc/html/structmscabd__file__coll__graph.md5 +0 -1
  195. data/ext/libmspack/doc/html/structmscabd__file__coll__graph.png +0 -0
  196. data/ext/libmspack/doc/html/structmscabd__folder.html +0 -159
  197. data/ext/libmspack/doc/html/structmscabd__folder__coll__graph.map +0 -2
  198. data/ext/libmspack/doc/html/structmscabd__folder__coll__graph.md5 +0 -1
  199. data/ext/libmspack/doc/html/structmscabd__folder__coll__graph.png +0 -0
  200. data/ext/libmspack/doc/html/structmschm__compressor.html +0 -226
  201. data/ext/libmspack/doc/html/structmschm__decompressor.html +0 -299
  202. data/ext/libmspack/doc/html/structmschm__decompressor__coll__graph.map +0 -7
  203. data/ext/libmspack/doc/html/structmschm__decompressor__coll__graph.md5 +0 -1
  204. data/ext/libmspack/doc/html/structmschm__decompressor__coll__graph.png +0 -0
  205. data/ext/libmspack/doc/html/structmschmc__file.html +0 -169
  206. data/ext/libmspack/doc/html/structmschmd__file.html +0 -198
  207. data/ext/libmspack/doc/html/structmschmd__file__coll__graph.map +0 -6
  208. data/ext/libmspack/doc/html/structmschmd__file__coll__graph.md5 +0 -1
  209. data/ext/libmspack/doc/html/structmschmd__file__coll__graph.png +0 -0
  210. data/ext/libmspack/doc/html/structmschmd__header.html +0 -458
  211. data/ext/libmspack/doc/html/structmschmd__header__coll__graph.map +0 -6
  212. data/ext/libmspack/doc/html/structmschmd__header__coll__graph.md5 +0 -1
  213. data/ext/libmspack/doc/html/structmschmd__header__coll__graph.png +0 -0
  214. data/ext/libmspack/doc/html/structmschmd__sec__mscompressed.html +0 -198
  215. data/ext/libmspack/doc/html/structmschmd__sec__mscompressed__coll__graph.map +0 -6
  216. data/ext/libmspack/doc/html/structmschmd__sec__mscompressed__coll__graph.md5 +0 -1
  217. data/ext/libmspack/doc/html/structmschmd__sec__mscompressed__coll__graph.png +0 -0
  218. data/ext/libmspack/doc/html/structmschmd__sec__uncompressed.html +0 -140
  219. data/ext/libmspack/doc/html/structmschmd__sec__uncompressed__coll__graph.map +0 -6
  220. data/ext/libmspack/doc/html/structmschmd__sec__uncompressed__coll__graph.md5 +0 -1
  221. data/ext/libmspack/doc/html/structmschmd__sec__uncompressed__coll__graph.png +0 -0
  222. data/ext/libmspack/doc/html/structmschmd__section.html +0 -142
  223. data/ext/libmspack/doc/html/structmschmd__section__coll__graph.map +0 -6
  224. data/ext/libmspack/doc/html/structmschmd__section__coll__graph.md5 +0 -1
  225. data/ext/libmspack/doc/html/structmschmd__section__coll__graph.png +0 -0
  226. data/ext/libmspack/doc/html/structmshlp__compressor.html +0 -106
  227. data/ext/libmspack/doc/html/structmshlp__decompressor.html +0 -106
  228. data/ext/libmspack/doc/html/structmskwaj__compressor.html +0 -243
  229. data/ext/libmspack/doc/html/structmskwaj__decompressor.html +0 -245
  230. data/ext/libmspack/doc/html/structmskwaj__decompressor__coll__graph.map +0 -3
  231. data/ext/libmspack/doc/html/structmskwaj__decompressor__coll__graph.md5 +0 -1
  232. data/ext/libmspack/doc/html/structmskwaj__decompressor__coll__graph.png +0 -0
  233. data/ext/libmspack/doc/html/structmskwajd__header.html +0 -225
  234. data/ext/libmspack/doc/html/structmslit__compressor.html +0 -106
  235. data/ext/libmspack/doc/html/structmslit__decompressor.html +0 -106
  236. data/ext/libmspack/doc/html/structmsoab__compressor.html +0 -151
  237. data/ext/libmspack/doc/html/structmsoab__decompressor.html +0 -184
  238. data/ext/libmspack/doc/html/structmspack__file.html +0 -107
  239. data/ext/libmspack/doc/html/structmspack__system.html +0 -404
  240. data/ext/libmspack/doc/html/structmspack__system__coll__graph.map +0 -3
  241. data/ext/libmspack/doc/html/structmspack__system__coll__graph.md5 +0 -1
  242. data/ext/libmspack/doc/html/structmspack__system__coll__graph.png +0 -0
  243. data/ext/libmspack/doc/html/structmsszdd__compressor.html +0 -186
  244. data/ext/libmspack/doc/html/structmsszdd__decompressor.html +0 -246
  245. data/ext/libmspack/doc/html/structmsszdd__decompressor__coll__graph.map +0 -3
  246. data/ext/libmspack/doc/html/structmsszdd__decompressor__coll__graph.md5 +0 -1
  247. data/ext/libmspack/doc/html/structmsszdd__decompressor__coll__graph.png +0 -0
  248. data/ext/libmspack/doc/html/structmsszddd__header.html +0 -149
  249. data/ext/libmspack/doc/html/sync_off.png +0 -0
  250. data/ext/libmspack/doc/html/sync_on.png +0 -0
  251. data/ext/libmspack/doc/html/szdd_kwaj_format.html +0 -331
  252. data/ext/libmspack/doc/html/tab_a.png +0 -0
  253. data/ext/libmspack/doc/html/tab_b.png +0 -0
  254. data/ext/libmspack/doc/html/tab_h.png +0 -0
  255. data/ext/libmspack/doc/html/tab_s.png +0 -0
  256. data/ext/libmspack/doc/html/tabs.css +0 -1
  257. data/ext/libmspack/doc/szdd_kwaj_format.html +0 -331
  258. data/ext/libmspack/examples/cabd_memory.c +0 -179
  259. data/ext/libmspack/examples/cabrip.c +0 -85
  260. data/ext/libmspack/examples/chmextract.c +0 -121
  261. data/ext/libmspack/examples/msexpand.c +0 -48
  262. data/ext/libmspack/examples/multifh.c +0 -435
  263. data/ext/libmspack/examples/oabextract.c +0 -41
  264. data/ext/libmspack/test/cabd_md5.c +0 -161
  265. data/ext/libmspack/test/cabd_test.c +0 -468
  266. data/ext/libmspack/test/chmd_find.c +0 -95
  267. data/ext/libmspack/test/chmd_md5.c +0 -67
  268. data/ext/libmspack/test/chmd_order.c +0 -144
  269. data/ext/libmspack/test/chmd_test.c +0 -134
  270. data/ext/libmspack/test/chminfo.c +0 -285
  271. data/ext/libmspack/test/error.h +0 -22
  272. data/ext/libmspack/test/kwajd_test.c +0 -119
  273. data/ext/libmspack/test/md5.c +0 -450
  274. data/ext/libmspack/test/md5.h +0 -166
  275. data/ext/libmspack/test/md5_fh.h +0 -123
  276. data/ext/libmspack/test/test_files/cabd/1.pl +0 -84
  277. data/ext/libmspack/test/test_files/cabd/2.pl +0 -75
  278. data/ext/libmspack/test/test_files/cabd/bad_folderindex.cab +0 -0
  279. data/ext/libmspack/test/test_files/cabd/bad_nofiles.cab +0 -0
  280. data/ext/libmspack/test/test_files/cabd/bad_nofolders.cab +0 -0
  281. data/ext/libmspack/test/test_files/cabd/bad_signature.cab +0 -0
  282. data/ext/libmspack/test/test_files/cabd/cve-2010-2800-mszip-infinite-loop.cab +0 -0
  283. data/ext/libmspack/test/test_files/cabd/cve-2014-9556-qtm-infinite-loop.cab +0 -0
  284. data/ext/libmspack/test/test_files/cabd/cve-2014-9732-folders-segfault.cab +0 -0
  285. data/ext/libmspack/test/test_files/cabd/cve-2015-4470-mszip-over-read.cab +0 -0
  286. data/ext/libmspack/test/test_files/cabd/cve-2015-4471-lzx-under-read.cab +0 -0
  287. data/ext/libmspack/test/test_files/cabd/filename-read-violation-1.cab +0 -0
  288. data/ext/libmspack/test/test_files/cabd/filename-read-violation-2.cab +0 -0
  289. data/ext/libmspack/test/test_files/cabd/filename-read-violation-3.cab +0 -0
  290. data/ext/libmspack/test/test_files/cabd/filename-read-violation-4.cab +0 -0
  291. data/ext/libmspack/test/test_files/cabd/lzx-main-tree-no-lengths.cab +0 -0
  292. data/ext/libmspack/test/test_files/cabd/lzx-premature-matches.cab +0 -0
  293. data/ext/libmspack/test/test_files/cabd/mszip_lzx_qtm.cab +0 -0
  294. data/ext/libmspack/test/test_files/cabd/multi_basic_pt1.cab +0 -0
  295. data/ext/libmspack/test/test_files/cabd/multi_basic_pt2.cab +0 -0
  296. data/ext/libmspack/test/test_files/cabd/multi_basic_pt3.cab +0 -0
  297. data/ext/libmspack/test/test_files/cabd/multi_basic_pt4.cab +0 -0
  298. data/ext/libmspack/test/test_files/cabd/multi_basic_pt5.cab +0 -0
  299. data/ext/libmspack/test/test_files/cabd/normal_255c_filename.cab +0 -0
  300. data/ext/libmspack/test/test_files/cabd/normal_2files_1folder.cab +0 -0
  301. data/ext/libmspack/test/test_files/cabd/normal_2files_2folders.cab +0 -0
  302. data/ext/libmspack/test/test_files/cabd/partial_nodata.cab +0 -0
  303. data/ext/libmspack/test/test_files/cabd/partial_nofiles.cab +0 -0
  304. data/ext/libmspack/test/test_files/cabd/partial_nofolder.cab +0 -0
  305. data/ext/libmspack/test/test_files/cabd/partial_shortextheader.cab +0 -0
  306. data/ext/libmspack/test/test_files/cabd/partial_shortfile1.cab +0 -0
  307. data/ext/libmspack/test/test_files/cabd/partial_shortfile2.cab +0 -0
  308. data/ext/libmspack/test/test_files/cabd/partial_shortfolder.cab +0 -0
  309. data/ext/libmspack/test/test_files/cabd/partial_shortheader.cab +0 -0
  310. data/ext/libmspack/test/test_files/cabd/partial_str_nofname.cab +0 -0
  311. data/ext/libmspack/test/test_files/cabd/partial_str_noninfo.cab +0 -0
  312. data/ext/libmspack/test/test_files/cabd/partial_str_nonname.cab +0 -0
  313. data/ext/libmspack/test/test_files/cabd/partial_str_nopinfo.cab +0 -0
  314. data/ext/libmspack/test/test_files/cabd/partial_str_nopname.cab +0 -0
  315. data/ext/libmspack/test/test_files/cabd/partial_str_shortfname.cab +0 -0
  316. data/ext/libmspack/test/test_files/cabd/partial_str_shortninfo.cab +0 -0
  317. data/ext/libmspack/test/test_files/cabd/partial_str_shortnname.cab +0 -0
  318. data/ext/libmspack/test/test_files/cabd/partial_str_shortpinfo.cab +0 -0
  319. data/ext/libmspack/test/test_files/cabd/partial_str_shortpname.cab +0 -0
  320. data/ext/libmspack/test/test_files/cabd/qtm-max-size-block.cab +0 -0
  321. data/ext/libmspack/test/test_files/cabd/reserve_---.cab +0 -0
  322. data/ext/libmspack/test/test_files/cabd/reserve_--D.cab +0 -0
  323. data/ext/libmspack/test/test_files/cabd/reserve_-F-.cab +0 -0
  324. data/ext/libmspack/test/test_files/cabd/reserve_-FD.cab +0 -0
  325. data/ext/libmspack/test/test_files/cabd/reserve_H--.cab +0 -0
  326. data/ext/libmspack/test/test_files/cabd/reserve_H-D.cab +0 -0
  327. data/ext/libmspack/test/test_files/cabd/reserve_HF-.cab +0 -0
  328. data/ext/libmspack/test/test_files/cabd/reserve_HFD.cab +0 -0
  329. data/ext/libmspack/test/test_files/cabd/search_basic.cab +0 -0
  330. data/ext/libmspack/test/test_files/cabd/search_tricky1.cab +0 -0
  331. data/ext/libmspack/test/test_files/chmd/blank-filenames.chm +0 -0
  332. data/ext/libmspack/test/test_files/chmd/cve-2015-4467-reset-interval-zero.chm.xor +0 -0
  333. data/ext/libmspack/test/test_files/chmd/cve-2015-4468-namelen-bounds.chm +0 -0
  334. data/ext/libmspack/test/test_files/chmd/cve-2015-4469-namelen-bounds.chm +0 -0
  335. data/ext/libmspack/test/test_files/chmd/cve-2015-4472-namelen-bounds.chm +0 -0
  336. data/ext/libmspack/test/test_files/chmd/cve-2017-6419-lzx-negative-spaninfo.chm +0 -0
  337. data/ext/libmspack/test/test_files/chmd/short-system-filenames.chm +0 -0
  338. data/ext/libmspack/test/test_files/kwajd/f00.kwj +0 -0
  339. data/ext/libmspack/test/test_files/kwajd/f01.kwj +0 -0
  340. data/ext/libmspack/test/test_files/kwajd/f02.kwj +0 -0
  341. data/ext/libmspack/test/test_files/kwajd/f03.kwj +0 -0
  342. data/ext/libmspack/test/test_files/kwajd/f04.kwj +0 -0
  343. data/ext/libmspack/test/test_files/kwajd/f10.kwj +0 -0
  344. data/ext/libmspack/test/test_files/kwajd/f11.kwj +0 -0
  345. data/ext/libmspack/test/test_files/kwajd/f12.kwj +0 -0
  346. data/ext/libmspack/test/test_files/kwajd/f13.kwj +0 -0
  347. data/ext/libmspack/test/test_files/kwajd/f14.kwj +0 -0
  348. data/ext/libmspack/test/test_files/kwajd/f20.kwj +0 -0
  349. data/ext/libmspack/test/test_files/kwajd/f21.kwj +0 -0
  350. data/ext/libmspack/test/test_files/kwajd/f22.kwj +0 -0
  351. data/ext/libmspack/test/test_files/kwajd/f23.kwj +0 -0
  352. data/ext/libmspack/test/test_files/kwajd/f24.kwj +0 -0
  353. data/ext/libmspack/test/test_files/kwajd/f30.kwj +0 -0
  354. data/ext/libmspack/test/test_files/kwajd/f31.kwj +0 -0
  355. data/ext/libmspack/test/test_files/kwajd/f32.kwj +0 -0
  356. data/ext/libmspack/test/test_files/kwajd/f33.kwj +0 -0
  357. data/ext/libmspack/test/test_files/kwajd/f34.kwj +0 -0
  358. data/ext/libmspack/test/test_files/kwajd/f40.kwj +0 -0
  359. data/ext/libmspack/test/test_files/kwajd/f41.kwj +0 -0
  360. data/ext/libmspack/test/test_files/kwajd/f42.kwj +0 -0
  361. data/ext/libmspack/test/test_files/kwajd/f43.kwj +0 -0
  362. data/ext/libmspack/test/test_files/kwajd/f44.kwj +0 -0
  363. data/ext/libmspack/test/test_files/kwajd/f50.kwj +0 -0
  364. data/ext/libmspack/test/test_files/kwajd/f51.kwj +0 -0
  365. data/ext/libmspack/test/test_files/kwajd/f52.kwj +0 -0
  366. data/ext/libmspack/test/test_files/kwajd/f53.kwj +0 -0
  367. data/ext/libmspack/test/test_files/kwajd/f54.kwj +0 -0
  368. data/ext/libmspack/test/test_files/kwajd/f60.kwj +0 -0
  369. data/ext/libmspack/test/test_files/kwajd/f61.kwj +0 -0
  370. data/ext/libmspack/test/test_files/kwajd/f62.kwj +0 -0
  371. data/ext/libmspack/test/test_files/kwajd/f63.kwj +0 -0
  372. data/ext/libmspack/test/test_files/kwajd/f64.kwj +0 -0
  373. data/ext/libmspack/test/test_files/kwajd/f70.kwj +0 -0
  374. data/ext/libmspack/test/test_files/kwajd/f71.kwj +0 -0
  375. data/ext/libmspack/test/test_files/kwajd/f72.kwj +0 -0
  376. data/ext/libmspack/test/test_files/kwajd/f73.kwj +0 -0
  377. data/ext/libmspack/test/test_files/kwajd/f74.kwj +0 -0
  378. data/ext/libmspack/test/test_files/kwajd/f80.kwj +0 -0
  379. data/ext/libmspack/test/test_files/kwajd/f81.kwj +0 -0
  380. data/ext/libmspack/test/test_files/kwajd/f82.kwj +0 -0
  381. data/ext/libmspack/test/test_files/kwajd/f83.kwj +0 -0
  382. data/ext/libmspack/test/test_files/kwajd/f84.kwj +0 -0
  383. data/ext/libmspack/test/test_files/kwajd/f90.kwj +0 -0
  384. data/ext/libmspack/test/test_files/kwajd/f91.kwj +0 -0
  385. data/ext/libmspack/test/test_files/kwajd/f92.kwj +0 -0
  386. data/ext/libmspack/test/test_files/kwajd/f93.kwj +0 -0
  387. data/ext/libmspack/test/test_files/kwajd/f94.kwj +0 -0
  388. data/ext/libmspack/test/test_files/kwajd/make.pl +0 -17
  389. data/ext/x86_64-linux/liblibmspack.so +0 -0
  390. data/ext/x86_64-windows/libmspack.dll +0 -0
  391. data/ext/x86_64-windows-msys/libmspack.dll +0 -0
@@ -1,331 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="eng">
5
- <head>
6
- <style type="text/css">
7
- dt {
8
- font-weight:bold;
9
- }
10
- pre {
11
- background-color:#F9F9F9;
12
- border:1px dashed #2F6FAB;
13
- color:black;
14
- padding:1em;
15
- }
16
- table.wikitable {
17
- background:none repeat scroll 0 0 #F9F9F9;
18
- border:1px solid #AAAAAA;
19
- border-collapse:collapse;
20
- margin:1em 1em 1em 0;
21
- }
22
- .wikitable th, .wikitable td {
23
- border:1px solid #AAAAAA;
24
- padding:0.2em;
25
- }
26
- .wikitable th {
27
- background:none repeat scroll 0 0 #F2F2F2;
28
- text-align:center;
29
- }
30
- .wikitable caption {
31
- font-weight:bold;
32
- }
33
- .c.source-c .de1, .c.source-c .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
34
- .c.source-c {font-family:monospace;}
35
- .c.source-c .imp {font-weight: bold; color: red;}
36
- .c.source-c li, .c.source-c .li1 {font-weight: normal; vertical-align:top;}
37
- .c.source-c .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
38
- .c.source-c .li2 {font-weight: bold; vertical-align:top;}
39
- .c.source-c .kw1 {color: #b1b100;}
40
- .c.source-c .kw2 {color: #000000; font-weight: bold;}
41
- .c.source-c .kw3 {color: #000066;}
42
- .c.source-c .kw4 {color: #993333;}
43
- .c.source-c .co1 {color: #666666; font-style: italic;}
44
- .c.source-c .co2 {color: #339933;}
45
- .c.source-c .coMULTI {color: #808080; font-style: italic;}
46
- .c.source-c .es0 {color: #000099; font-weight: bold;}
47
- .c.source-c .es1 {color: #000099; font-weight: bold;}
48
- .c.source-c .es2 {color: #660099; font-weight: bold;}
49
- .c.source-c .es3 {color: #660099; font-weight: bold;}
50
- .c.source-c .es4 {color: #660099; font-weight: bold;}
51
- .c.source-c .es5 {color: #006699; font-weight: bold;}
52
- .c.source-c .br0 {color: #009900;}
53
- .c.source-c .sy0 {color: #339933;}
54
- .c.source-c .st0 {color: #ff0000;}
55
- .c.source-c .nu0 {color: #0000dd;}
56
- .c.source-c .nu6 {color: #208080;}
57
- .c.source-c .nu8 {color: #208080;}
58
- .c.source-c .nu12 {color: #208080;}
59
- .c.source-c .nu16 {color:#800080;}
60
- .c.source-c .nu17 {color:#800080;}
61
- .c.source-c .nu18 {color:#800080;}
62
- .c.source-c .nu19 {color:#800080;}
63
- .c.source-c .me1 {color: #202020;}
64
- .c.source-c .me2 {color: #202020;}
65
- .c.source-c .ln-xtra, .c.source-c li.ln-xtra, .c.source-c div.ln-xtra {background-color: #ffc;}
66
- .c.source-c span.xtra { display:block; }
67
- </style>
68
- <meta name="author" content="Stuart Caie" />
69
- <title>COMPRESS.EXE file formats: SZDD and KWAJ</title>
70
- </head>
71
- <body>
72
- <h1>COMPRESS.EXE file formats: SZDD and KWAJ</h1>
73
-
74
- <p>This document describes the <b>SZDD</b> and <b>KWAJ</b> file
75
- formats which are implemented in the MS-DOS commands
76
- <tt>COMPRESS.EXE</tt> and <tt>EXPAND.EXE</tt>.</p>
77
-
78
- <p>Both formats compress a single file to another single file,
79
- replacing the last character in the filename with an underscore or
80
- dollar character, e.g. <tt>README.TXT</tt> becomes <tt>README.TX_</tt>
81
- or <tt>README.TX$</tt>.</p>
82
-
83
- <a name="SZDD_file_format"><h2>SZDD file format</h2></a>
84
-
85
- <p>An SZDD file begins with this fixed header:</p>
86
-
87
- <table class="wikitable">
88
- <caption>SZDD header format</caption>
89
- <tr><th>Offset</th><th>Length</th><th>Description</th></tr>
90
- <tr><td>0x00</td><td>8</td><td>"SZDD" signature: 0x53,0x5A,0x44,0x44,0x88,0xF0,0x27,0x33</td></tr>
91
- <tr><td>0x08</td><td>1</td><td>Compression mode: only "A" (0x41) is valid here</td></tr>
92
- <tr><td>0x09</td><td>1</td><td>The character missing from the end of the filename (0=unknown)</td></tr>
93
- <tr><td>0x0A</td><td>4</td><td>The integer length of the file when unpacked</td></tr>
94
- </table>
95
-
96
- <p>The header is immediately followed by the compressed data. The
97
- following pseudocode explains how to unpack this data; it's a form of
98
- the LZSS algorithm.</p>
99
-
100
- <table class="wikitable">
101
- <caption>SZDD decompression pseudocode</caption>
102
- <tr><td>
103
- <div dir="ltr" style="text-align: left;"><div class="c source-c" style="font-family:monospace;"><pre class="de1"><span class="kw4">char</span> window<span class="br0">&#91;</span><span class="nu0">4096</span><span class="br0">&#93;</span><span class="sy0">;</span>
104
- <span class="kw4">int</span> pos <span class="sy0">=</span> <span class="nu0">4096</span> <span class="sy0">-</span> <span class="nu0">16</span><span class="sy0">;</span>
105
- memset<span class="br0">&#40;</span>window<span class="sy0">,</span> <span class="nu12">0x20</span><span class="sy0">,</span> <span class="nu0">4096</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="coMULTI">/* window initially full of spaces */</span>
106
- <span class="kw1">for</span> <span class="br0">&#40;</span><span class="sy0">;;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
107
- <span class="kw4">int</span> control <span class="sy0">=</span> GETBYTE<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
108
- <span class="kw1">if</span> <span class="br0">&#40;</span>control <span class="sy0">==</span> EOF<span class="br0">&#41;</span> <span class="kw2">break</span><span class="sy0">;</span> <span class="coMULTI">/* exit if no more to read */</span>
109
- <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> cbit <span class="sy0">=</span> <span class="nu12">0x01</span><span class="sy0">;</span> cbit <span class="sy0">&amp;</span> <span class="nu12">0xFF</span><span class="sy0">;</span> cbit <span class="sy0">&lt;&lt;=</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
110
- <span class="kw1">if</span> <span class="br0">&#40;</span>control <span class="sy0">&amp;</span> cbit<span class="br0">&#41;</span> <span class="br0">&#123;</span>
111
- <span class="coMULTI">/* literal */</span>
112
- PUTBYTE<span class="br0">&#40;</span>window<span class="br0">&#91;</span>pos<span class="sy0">++</span><span class="br0">&#93;</span> <span class="sy0">=</span> GETBYTE<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
113
- <span class="br0">&#125;</span>
114
- <span class="kw1">else</span> <span class="br0">&#123;</span>
115
- <span class="coMULTI">/* match */</span>
116
- <span class="kw4">int</span> matchpos <span class="sy0">=</span> GETBYTE<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
117
- <span class="kw4">int</span> matchlen <span class="sy0">=</span> GETBYTE<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
118
- matchpos <span class="sy0">|=</span> <span class="br0">&#40;</span>matchlen <span class="sy0">&amp;</span> <span class="nu12">0xF0</span><span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span> <span class="nu0">4</span><span class="sy0">;</span>
119
- matchlen <span class="sy0">=</span> <span class="br0">&#40;</span>matchlen <span class="sy0">&amp;</span> <span class="nu12">0x0F</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="nu0">3</span><span class="sy0">;</span>
120
- <span class="kw1">while</span> <span class="br0">&#40;</span>matchlen<span class="sy0">--</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
121
- PUTBYTE<span class="br0">&#40;</span>window<span class="br0">&#91;</span>pos<span class="sy0">++</span><span class="br0">&#93;</span> <span class="sy0">=</span> window<span class="br0">&#91;</span>matchpos<span class="sy0">++</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
122
- pos <span class="sy0">&amp;=</span> <span class="nu0">4095</span><span class="sy0">;</span> matchpos <span class="sy0">&amp;=</span> <span class="nu0">4095</span><span class="sy0">;</span>
123
- <span class="br0">&#125;</span>
124
- <span class="br0">&#125;</span>
125
- <span class="br0">&#125;</span>
126
- <span class="br0">&#125;</span></pre></div></div>
127
- </td></tr></table>
128
-
129
- <p>There is also a variant SZDD format seen in the installation
130
- package for QBasic 4.5, so I call it the QBasic variant. It has a
131
- different header and the <tt>pos</tt> variable in the pseudocode above
132
- is set to <tt>4096-18</tt> instead of <tt>4096-16</tt>.</p>
133
-
134
- <table class="wikitable">
135
- <caption>QBasic SZDD variant header format</caption>
136
- <tr><th>Offset</th><th>Length</th><th>Description</th></tr>
137
- <tr><td>0x00</td><td>8</td><td>"SZ" signature: 0x53,0x5A,0x20,0x88,0xF0,0x27,0x33,0xD1</td></tr>
138
- <tr><td>0x08</td><td>4</td><td>The integer length of the file when unpacked</td></tr></table>
139
-
140
- <a name="KWAJ_file_format"><h2>KWAJ file format</h2></a>
141
-
142
- <p>A KWAJ file begins with this fixed header:</p>
143
-
144
- <table class="wikitable">
145
- <caption>KWAJ header format</caption>
146
- <tr><th>Offset</th><th>Length</th><th>Description</th></tr>
147
- <tr><td>0x00</td><td>8</td><td>"KWAJ" signature: 0x4B,0x57,0x41,0x4A,0x88,0xF0,0x27,0xD1</td></tr>
148
- <tr><td>0x08</td><td>2</td><td>compression method (0-4)</td></tr>
149
- <tr><td>0x0A</td><td>2</td><td>file offset of compressed data</td></tr>
150
- <tr><td>0x0C</td><td>2</td><td>header flags to mark header extensions</td></tr>
151
- </table>
152
-
153
- <a name="Compression_methods"><h3>Compression methods</h3></a>
154
-
155
- <p>The "compression method" field indicates the type of data
156
- compression used:</p>
157
-
158
- <ol start="0">
159
- <li>No compression</li>
160
- <li>No compression, data is XORed with byte 0xFF</li>
161
- <li>The same compression method as regular SZDD</li>
162
- <li>LZ + Huffman "Jeff Johnson" compression</li>
163
- <li>MS-ZIP</li>
164
- </ol>
165
-
166
- <a name="Header_extensions"><h3>Header extensions</h3></a>
167
-
168
- <p>Header extensions immediately follow the header.</p>
169
-
170
- <p>If you don't care about the header extensions, use the file offset
171
- to skip to the compressed data.</p>
172
-
173
- <p>The header extensions appear in this order:</p>
174
-
175
- <dl>
176
- <dt>When header flags bit 0 is set</dt><dd>4 bytes: decompressed length of file</dd>
177
- <dt>When header flags bit 1 is set</dt><dd>2 bytes: unknown purpose</dd>
178
- <dt>When header flags bit 2 is set</dt><dd>2 bytes: length of data, followed by that many bytes of (unknown purpose) data</dd>
179
- <dt>When header flags bit 3 is set</dt><dd>1-9 bytes: null-terminated string with max length 8: file name</dd>
180
- <dt>When header flags bit 4 is set</dt><dd>1-4 bytes: null-terminated string with max length 3: file extension</dd>
181
- <dt>When header flags bit 5 is set</dt><dd>2 bytes: length of data, followed by that many bytes of (arbitrary text) data</dd>
182
- </dl>
183
-
184
- <a name="KWAJ_compression_method_3"><h3>KWAJ compression method 3</h3></a>
185
-
186
- <p>Compression method 3 is unique to the KWAJ format. It's an
187
- LZ+Huffman algorithm created by Jeff Johnson.</p>
188
-
189
- <p>Bits are always read from MSB to LSB, one byte at a time.</p>
190
-
191
- <p>There are three parts:</p>
192
-
193
- <ol>
194
- <li>The data starts off with 6 nybbles; 4 bits each. Each nybble is
195
- between 0-3 and is the encoding type of the 5 huffman length lists to
196
- follow. The 6th nybble is just padding.</li>
197
- <li>Then follow 5 huffman code length lists.</li>
198
- <li>Then follows the compressed data, which is a mix of huffman
199
- symbols and raw bits.</li>
200
- </ol>
201
-
202
- <a name="Huffman_code_length_lists"><h4>Huffman code length lists</h4></a>
203
-
204
- <p>KWAJ uses 5 huffman trees. They always have the same number of
205
- symbols in them. They are, in order:</p>
206
-
207
- <ol>
208
- <li>16 symbol tree (0-15) to store match run lengths (MATCHLEN)</li>
209
- <li>16 symbol tree (0-15) to store match run lengths immediately following a short literal run (MATCHLEN2)</li>
210
- <li>32 symbol tree (0-31) to store literal run lengths (LITLEN)</li>
211
- <li>64 symbol tree (0-63) to store the upper 6 bits of match distances (OFFSET)</li>
212
- <li>256 symbol tree (0-255) to store literals (LITERAL)</li>
213
- </ol>
214
-
215
- <p>Canonical huffman codes are used, which means you simply need to
216
- know how many symbols in each huffman tree (given above), and how long
217
- each huffman symbol is</p>
218
-
219
- <p>How the symbol lengths are encoded depends on the encoding type, as
220
- given by the 6 nybbles at the start of the compressed data.</p>
221
-
222
- <p>Symbol lengths are read in ascending order, and the number of
223
- symbols to read is implied by which tree you're defining.</p>
224
-
225
- <dl>
226
- <dt>Huffman code length list, encoding type 0</dt>
227
- <dd>All symbol have the same length, implied by the number of symbols in the tree:
228
- <ul>
229
- <li>16 symbols -&gt; all symbols are length 4</li>
230
- <li>32 symbols -&gt; all symbols are length 5</li>
231
- <li>64 symbols -&gt; all symbols are length 6</li>
232
- <li>256 symbols -&gt; all symbols are length 8</li>
233
- </ul>
234
- </dd>
235
- <dd>You don't need to read anything.</dd>
236
- </dl>
237
-
238
- <dl>
239
- <dt>Huffman code length list, encoding type 1</dt>
240
- <dd>A run-length encoding is used:
241
- <ul>
242
- <li>read 4 bits for the first symbol length (0-15)</li>
243
- <li>LOOP:
244
- <ul>
245
- <li>read 1 bit == 0 if symbol length is the same as the previous, OTHERWISE:</li>
246
- <li>read 1 bit == 0 if symbol length is previous + 1, OTHERWISE:</li>
247
- <li>read 4 bits for symbol length (0-15)</li>
248
- </ul>
249
- </li>
250
- </ul>
251
- </dd>
252
- </dl>
253
-
254
- <dl>
255
- <dt>Huffman code length list, encoding type 2</dt>
256
- <dd>Another run-length encoding is used:
257
- <ul>
258
- <li>read 4 bits for the first symbol length (0-15)</li>
259
- <li>LOOP:
260
- <ul>
261
- <li> read 2 bits as selector (0-3):
262
- <ul>
263
- <li> selector == 3: read 4 bits for symbol length, OTHERWISE:</li>
264
- <li> symbol length is previous symbol + (selector-1), i.e. -1, 0 or +1</li>
265
- </ul>
266
- </li>
267
- </ul>
268
- </li>
269
- </ul>
270
- </dd>
271
- </dl>
272
-
273
- <dl>
274
- <dt>Huffman code length list, encoding type 3</dt>
275
- <dd>There is no compression. Read 4 bits per symbol (0-15).</dd>
276
- </dl>
277
-
278
- <a name="Compressed_data"><h4>Compressed data</h4></a>
279
-
280
- <p>At this point, the compressed data begins.</p>
281
-
282
- <p>We have a 4096 byte ring buffer, initially filled with byte 0x20
283
- (ASCII space). Unlike the SZDD format, the starting position in the
284
- buffer is irrelevant, as match positions are stored relative to the
285
- current position in the window, not as absolute positions in the
286
- window.</p>
287
-
288
- <p>Pseudo-code:</p>
289
- <pre>
290
- ring buffer position = 4096-17
291
- selected table = MATCHLEN
292
- LOOP:
293
- code = read huffman code using selected table (MATCHLEN or MATCHLEN2)
294
- if EOF reached, exit loop
295
- if code &gt; 0, this is a match:
296
- match length = code + 2
297
- x = read huffman code using OFFSET table
298
- y = read 6 bits
299
- match offset = current ring buffer position - (x&lt;&lt;6 | y)
300
- copy match as output and into the ring buffer
301
- selected table = MATCHLEN
302
- if code == 0, this is a run of literals:
303
- x = read huffman code using LITLEN table
304
- if x != 31, selected table = MATCHLEN2
305
- read {x+1} literals using LITERAL huffman table, copy as output and into the ring buffer
306
- </pre>
307
-
308
- <a name="MSZIP"><h2>MS-ZIP</h2></a>
309
-
310
- KWAJ type 4 compression is called MS-ZIP, because it is almost
311
- identical to the MS-ZIP compression found in Microsoft Cabinet files.
312
-
313
- Each 32768 bytes of data is compressed independently using Phil
314
- Katz's DEFLATE algorithm. However, the history window is shared
315
- between blocks, so they must be unpacked in order.
316
- The format of each block is as follows:
317
-
318
- <table class="wikitable">
319
- <caption>KWAJ MS-ZIP block format</caption>
320
- <tr><th>Offset</th><th>Length</th><th>Description</th></tr>
321
- <tr><td>0</td><td>2</td><td>Compressed length of this block (n).
322
- Stored in Intel byte order.
323
- Doesn't include these two bytes.</td></tr>
324
- <tr><td>2</td><td>2</td><td>"CK" in ASCII (0x43, 0x4B)</td></tr>
325
- <tr><td>4</td><td>n-2</td><td>Data compressed in DEFLATE format</td></tr>
326
- </table>
327
-
328
- The final block will unpack to 1-32768 bytes. It will be followed by two
329
- zero bytes.
330
-
331
- </body></html>
@@ -1,179 +0,0 @@
1
- /* An implementation of the mspack_system interface using only memory */
2
-
3
- #ifdef HAVE_CONFIG_H
4
- #include <config.h>
5
- #endif
6
-
7
- #include <stdio.h>
8
- #include <stdlib.h>
9
- #include <string.h>
10
- #include <mspack.h>
11
-
12
- /* use a pointer to a mem_buf structure as "filenames" */
13
- struct mem_buf {
14
- void *data;
15
- size_t length;
16
- };
17
-
18
- struct mem_file {
19
- char *data;
20
- size_t length, posn;
21
- };
22
-
23
- static void *mem_alloc(struct mspack_system *self, size_t bytes) {
24
- /* put your memory allocator here */
25
- return malloc(bytes);
26
- }
27
-
28
- static void mem_free(void *buffer) {
29
- /* put your memory deallocator here */
30
- free(buffer);
31
- }
32
-
33
- static void mem_copy(void *src, void *dest, size_t bytes) {
34
- /* put your own memory copy routine here */
35
- memcpy(dest, src, bytes);
36
- }
37
-
38
- static void mem_msg(struct mem_file *file, const char *format, ...) {
39
- /* put your own printf-type routine here, or leave it empty */
40
- }
41
-
42
- static struct mem_file *mem_open(struct mspack_system *self,
43
- struct mem_buf *fn, int mode)
44
- {
45
- struct mem_file *fh;
46
- if (!fn || !fn->data || !fn->length) return NULL;
47
- if ((fh = (struct mem_file *) mem_alloc(self, sizeof(struct mem_file)))) {
48
- fh->data = (char *) fn->data;
49
- fh->length = fn->length;
50
- fh->posn = (mode == MSPACK_SYS_OPEN_APPEND) ? fn->length : 0;
51
- }
52
- return fh;
53
- }
54
-
55
- static void mem_close(struct mem_file *fh) {
56
- if (fh) mem_free(fh);
57
- }
58
-
59
- static int mem_read(struct mem_file *fh, void *buffer, int bytes) {
60
- int todo;
61
- if (!fh || !buffer || bytes < 0) return -1;
62
- todo = fh->length - fh->posn;
63
- if (todo > bytes) todo = bytes;
64
- if (todo > 0) mem_copy(&fh->data[fh->posn], buffer, (size_t) todo);
65
- fh->posn += todo; return todo;
66
- }
67
-
68
- static int mem_write(struct mem_file *fh, void *buffer, int bytes) {
69
- int todo;
70
- if (!fh || !buffer || bytes < 0) return -1;
71
- todo = fh->length - fh->posn;
72
- if (todo > bytes) todo = bytes;
73
- if (todo > 0) mem_copy(buffer, &fh->data[fh->posn], (size_t) todo);
74
- fh->posn += todo; return todo;
75
- }
76
-
77
- static int mem_seek(struct mem_file *fh, off_t offset, int mode) {
78
- if (!fh) return 1;
79
- switch (mode) {
80
- case MSPACK_SYS_SEEK_START: break;
81
- case MSPACK_SYS_SEEK_CUR: offset += (off_t) fh->posn; break;
82
- case MSPACK_SYS_SEEK_END: offset += (off_t) fh->length; break;
83
- default: return 1;
84
- }
85
- if ((offset < 0) || (offset > (off_t) fh->length)) return 1;
86
- fh->posn = (size_t) offset;
87
- return 0;
88
- }
89
-
90
- static off_t mem_tell(struct mem_file *fh) {
91
- return (fh) ? (off_t) fh->posn : -1;
92
- }
93
-
94
- static struct mspack_system mem_system = {
95
- (struct mspack_file * (*)(struct mspack_system *, const char *, int)) &mem_open,
96
- (void (*)(struct mspack_file *)) &mem_close,
97
- (int (*)(struct mspack_file *, void *, int)) &mem_read,
98
- (int (*)(struct mspack_file *, void *, int)) &mem_write,
99
- (int (*)(struct mspack_file *, off_t, int)) &mem_seek,
100
- (off_t (*)(struct mspack_file *)) &mem_tell,
101
- (void (*)(struct mspack_file *, const char *, ...)) &mem_msg,
102
- &mem_alloc,
103
- &mem_free,
104
- &mem_copy,
105
- NULL
106
- };
107
-
108
- /* example of usage with mscab_decompressor */
109
-
110
- /* a simple cabinet */
111
- static unsigned char embedded_cab[] = {
112
- 0x4D,0x53,0x43,0x46,0x00,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x00,0x00,0x00,
113
- 0x00,0x2C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x01,0x00,0x02,0x00,
114
- 0x00,0x00,0x22,0x06,0x00,0x00,0x5E,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x4D,
115
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x22,0xBA,0x59,0x20,0x00,
116
- 0x68,0x65,0x6C,0x6C,0x6F,0x2E,0x63,0x00,0x4A,0x00,0x00,0x00,0x4D,0x00,0x00,
117
- 0x00,0x00,0x00,0x6C,0x22,0xE7,0x59,0x20,0x00,0x77,0x65,0x6C,0x63,0x6F,0x6D,
118
- 0x65,0x2E,0x63,0x00,0xBD,0x5A,0xA6,0x30,0x97,0x00,0x97,0x00,0x23,0x69,0x6E,
119
- 0x63,0x6C,0x75,0x64,0x65,0x20,0x3C,0x73,0x74,0x64,0x69,0x6F,0x2E,0x68,0x3E,
120
- 0x0D,0x0A,0x0D,0x0A,0x76,0x6F,0x69,0x64,0x20,0x6D,0x61,0x69,0x6E,0x28,0x76,
121
- 0x6F,0x69,0x64,0x29,0x0D,0x0A,0x7B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x70,0x72,
122
- 0x69,0x6E,0x74,0x66,0x28,0x22,0x48,0x65,0x6C,0x6C,0x6F,0x2C,0x20,0x77,0x6F,
123
- 0x72,0x6C,0x64,0x21,0x5C,0x6E,0x22,0x29,0x3B,0x0D,0x0A,0x7D,0x0D,0x0A,0x23,
124
- 0x69,0x6E,0x63,0x6C,0x75,0x64,0x65,0x20,0x3C,0x73,0x74,0x64,0x69,0x6F,0x2E,
125
- 0x68,0x3E,0x0D,0x0A,0x0D,0x0A,0x76,0x6F,0x69,0x64,0x20,0x6D,0x61,0x69,0x6E,
126
- 0x28,0x76,0x6F,0x69,0x64,0x29,0x0D,0x0A,0x7B,0x0D,0x0A,0x20,0x20,0x20,0x20,
127
- 0x70,0x72,0x69,0x6E,0x74,0x66,0x28,0x22,0x57,0x65,0x6C,0x63,0x6F,0x6D,0x65,
128
- 0x21,0x5C,0x6E,0x22,0x29,0x3B,0x0D,0x0A,0x7D,0x0D,0x0A,0x0D,0x0A
129
- };
130
-
131
- int main() {
132
- struct mscab_decompressor *cabd;
133
- struct mscabd_cabinet *cab;
134
- struct mscabd_file *file;
135
- struct mem_buf source = { &embedded_cab[0], sizeof(embedded_cab) };
136
- struct mem_buf output;
137
- int err;
138
-
139
- /* if self-test reveals an error */
140
- MSPACK_SYS_SELFTEST(err);
141
- if (err) return 1;
142
-
143
- /* create a cab decompressor using our custom mspack_system interface */
144
- if ((cabd = mspack_create_cab_decompressor(&mem_system))) {
145
-
146
- /* open a cab file direct from memory */
147
- if ((cab = cabd->open(cabd, (char *) &source))) {
148
-
149
- /* for all files */
150
- for (file = cab->files; file; file = file->next) {
151
- /* fill out our "filename" (memory pointer and length) */
152
- output.data = (char *) malloc(file->length);
153
- output.length = file->length;
154
-
155
- /* let cabd extract this file to our memory buffer */
156
- if (output.data && cabd->extract(cabd, file, (char *) &output)) {
157
- exit(1);
158
- }
159
-
160
- /* dump the memory buffer to stdout (for display purposes) */
161
- printf("Filename: %s\nContents:\n", file->filename);
162
- fwrite(output.data, 1, output.length, stdout);
163
-
164
- /* free our buffer */
165
- free(output.data);
166
- }
167
- cabd->close(cabd, cab);
168
- }
169
- else {
170
- fprintf(stderr, "can't open cabinet (%d)\n", cabd->last_error(cabd));
171
- }
172
- mspack_destroy_cab_decompressor(cabd);
173
- }
174
- else {
175
- fprintf(stderr, "can't make decompressor\n");
176
- }
177
- return 0;
178
-
179
- }
@@ -1,85 +0,0 @@
1
- #ifdef HAVE_CONFIG_H
2
- #include <config.h>
3
- #endif
4
-
5
- #include <stdio.h>
6
- #include <stdlib.h>
7
- #include <sys/stat.h>
8
- #include <mspack.h>
9
- #include <system.h>
10
-
11
- #if HAVE_FSEEKO
12
- # define fseek fseeko
13
- #endif
14
-
15
- #define BUF_SIZE (1024*4096)
16
- char buf[BUF_SIZE];
17
-
18
- void rip(char *fname, off_t offset, unsigned int length) {
19
- static unsigned int counter = 1;
20
- struct stat st_buf;
21
- char outname[13];
22
- FILE *in = NULL, *out = NULL;
23
-
24
- /* find an unused output filename */
25
- do {
26
- snprintf(outname, 13, "%08u.cab", counter++);
27
- } while (stat(outname, &st_buf) == 0);
28
-
29
- printf("ripping %s offset %" LD " length %u to %s\n",
30
- fname, offset, length, outname);
31
-
32
- if (!(in = fopen(fname, "rb"))) {
33
- perror(fname);
34
- goto cleanup;
35
- }
36
- if (!(out = fopen(outname, "wb"))) {
37
- perror(outname);
38
- goto cleanup;
39
- }
40
- if (fseek(in, offset, SEEK_SET)) {
41
- fprintf(stderr, "%s: can't seek to cab offset %"LD"\n", fname, offset);
42
- goto cleanup;
43
- }
44
- while (length) {
45
- size_t run = (length > BUF_SIZE) ? BUF_SIZE : length;
46
- size_t actual = fread(&buf[0], 1, run, in);
47
- if (actual < run) {
48
- fprintf(stderr, "%s: file %u bytes shorter than expected\n",
49
- fname, length - (unsigned int)(run - actual));
50
- length = run = actual;
51
- }
52
- if (fwrite(&buf[0], 1, run, out) != run) {
53
- perror(outname);
54
- break;
55
- }
56
- length -= run;
57
- }
58
-
59
- cleanup:
60
- if (in) fclose(in);
61
- if (out) fclose(out);
62
- }
63
-
64
- int main(int argc, char *argv[]) {
65
- struct mscab_decompressor *cabd;
66
- struct mscabd_cabinet *cab, *c;
67
- int err;
68
-
69
- MSPACK_SYS_SELFTEST(err);
70
- if (err) return 0;
71
-
72
- if ((cabd = mspack_create_cab_decompressor(NULL))) {
73
- cabd->set_param(cabd, MSCABD_PARAM_SALVAGE, 1);
74
- for (argv++; *argv; argv++) {
75
- if ((cab = cabd->search(cabd, *argv))) {
76
- for (c = cab; c; c = c->next) {
77
- rip(*argv, c->base_offset, c->length);
78
- }
79
- cabd->close(cabd, cab);
80
- }
81
- }
82
- mspack_destroy_cab_decompressor(cabd);
83
- }
84
- return 0;
85
- }