seven-zip 1.4.2 → 1.7.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (887) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +49 -0
  3. data/.github/workflows/release.yml +21 -0
  4. data/README.md +13 -2
  5. data/Rakefile +2 -0
  6. data/ext/p7zip/C/7zBuf.h +4 -8
  7. data/ext/p7zip/C/7zBuf2.c +9 -3
  8. data/ext/p7zip/C/7zCrc.c +84 -32
  9. data/ext/p7zip/C/7zCrc.h +2 -2
  10. data/ext/p7zip/C/7zCrcOpt.c +89 -8
  11. data/ext/p7zip/C/7zStream.c +4 -2
  12. data/ext/p7zip/C/{Types.h → 7zTypes.h} +8 -6
  13. data/ext/p7zip/C/7zVersion.h +21 -6
  14. data/ext/p7zip/C/Aes.c +28 -15
  15. data/ext/p7zip/C/Aes.h +2 -2
  16. data/ext/p7zip/C/Alloc.c +60 -12
  17. data/ext/p7zip/C/Alloc.h +6 -7
  18. data/ext/p7zip/C/Bcj2.c +256 -0
  19. data/ext/p7zip/C/Bcj2.h +146 -0
  20. data/ext/p7zip/C/Bcj2Enc.c +312 -0
  21. data/ext/p7zip/C/Blake2.h +48 -0
  22. data/ext/p7zip/C/Blake2s.c +244 -0
  23. data/ext/p7zip/C/Bra.c +2 -0
  24. data/ext/p7zip/C/Bra.h +4 -8
  25. data/ext/p7zip/C/Bra86.c +48 -51
  26. data/ext/p7zip/C/BraIA64.c +3 -1
  27. data/ext/p7zip/C/BwtSort.c +3 -4
  28. data/ext/p7zip/C/BwtSort.h +4 -8
  29. data/ext/p7zip/C/Compiler.h +32 -0
  30. data/ext/p7zip/C/CpuArch.c +50 -7
  31. data/ext/p7zip/C/CpuArch.h +112 -41
  32. data/ext/p7zip/C/Delta.c +2 -0
  33. data/ext/p7zip/C/Delta.h +4 -8
  34. data/ext/p7zip/C/HuffEnc.c +8 -6
  35. data/ext/p7zip/C/HuffEnc.h +4 -8
  36. data/ext/p7zip/C/LzFind.c +391 -108
  37. data/ext/p7zip/C/LzFind.h +20 -18
  38. data/ext/p7zip/C/LzFindMt.c +100 -90
  39. data/ext/p7zip/C/LzFindMt.h +4 -8
  40. data/ext/p7zip/C/LzHash.h +23 -20
  41. data/ext/p7zip/C/Lzma2Dec.c +48 -26
  42. data/ext/p7zip/C/Lzma2Dec.h +4 -8
  43. data/ext/p7zip/C/Lzma2Enc.c +58 -15
  44. data/ext/p7zip/C/Lzma2Enc.h +3 -7
  45. data/ext/p7zip/C/{LzmaUtil/Lzma86Enc.h → Lzma86.h} +47 -14
  46. data/ext/p7zip/C/{LzmaUtil/Lzma86Dec.c → Lzma86Dec.c} +6 -13
  47. data/ext/p7zip/C/{LzmaUtil/Lzma86Enc.c → Lzma86Enc.c} +8 -15
  48. data/ext/p7zip/C/LzmaDec.c +180 -79
  49. data/ext/p7zip/C/LzmaDec.h +4 -8
  50. data/ext/p7zip/C/LzmaEnc.c +230 -147
  51. data/ext/p7zip/C/LzmaEnc.h +6 -8
  52. data/ext/p7zip/C/MtCoder.c +3 -3
  53. data/ext/p7zip/C/Ppmd.h +5 -5
  54. data/ext/p7zip/C/Ppmd7.c +9 -7
  55. data/ext/p7zip/C/Ppmd7.h +3 -3
  56. data/ext/p7zip/C/Ppmd7Dec.c +2 -0
  57. data/ext/p7zip/C/Ppmd7Enc.c +4 -2
  58. data/ext/p7zip/C/Ppmd8.c +34 -31
  59. data/ext/p7zip/C/Ppmd8.h +5 -1
  60. data/ext/p7zip/C/Ppmd8Dec.c +2 -0
  61. data/ext/p7zip/C/Ppmd8Enc.c +2 -0
  62. data/ext/p7zip/C/Precomp.h +10 -0
  63. data/ext/p7zip/C/RotateDefs.h +11 -1
  64. data/ext/p7zip/C/Sha1.c +340 -0
  65. data/ext/p7zip/C/Sha1.h +38 -0
  66. data/ext/p7zip/C/Sha256.c +107 -63
  67. data/ext/p7zip/C/Sha256.h +2 -2
  68. data/ext/p7zip/C/Sort.c +59 -11
  69. data/ext/p7zip/C/Sort.h +8 -10
  70. data/ext/p7zip/C/Threads.h +1 -1
  71. data/ext/p7zip/C/Xz.c +7 -5
  72. data/ext/p7zip/C/Xz.h +40 -17
  73. data/ext/p7zip/C/XzCrc64.c +69 -16
  74. data/ext/p7zip/C/XzCrc64.h +2 -2
  75. data/ext/p7zip/C/XzCrc64Opt.c +69 -0
  76. data/ext/p7zip/C/XzDec.c +93 -55
  77. data/ext/p7zip/C/XzEnc.c +206 -165
  78. data/ext/p7zip/C/XzEnc.h +23 -9
  79. data/ext/p7zip/C/XzIn.c +50 -43
  80. data/ext/p7zip/CPP/7zip/Archive/7z/7zCompressionMode.h +37 -13
  81. data/ext/p7zip/CPP/7zip/Archive/7z/7zDecode.cpp +392 -181
  82. data/ext/p7zip/CPP/7zip/Archive/7z/7zDecode.h +29 -29
  83. data/ext/p7zip/CPP/7zip/Archive/7z/7zEncode.cpp +424 -212
  84. data/ext/p7zip/CPP/7zip/Archive/7z/7zEncode.h +53 -16
  85. data/ext/p7zip/CPP/7zip/Archive/7z/7zExtract.cpp +312 -174
  86. data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderInStream.cpp +74 -61
  87. data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderInStream.h +22 -19
  88. data/ext/p7zip/CPP/7zip/Archive/7z/7zHandler.cpp +505 -232
  89. data/ext/p7zip/CPP/7zip/Archive/7z/7zHandler.h +70 -16
  90. data/ext/p7zip/CPP/7zip/Archive/7z/7zHandlerOut.cpp +602 -172
  91. data/ext/p7zip/CPP/7zip/Archive/7z/7zHeader.cpp +5 -0
  92. data/ext/p7zip/CPP/7zip/Archive/7z/7zHeader.h +54 -3
  93. data/ext/p7zip/CPP/7zip/Archive/7z/7zIn.cpp +981 -616
  94. data/ext/p7zip/CPP/7zip/Archive/7z/7zIn.h +275 -89
  95. data/ext/p7zip/CPP/7zip/Archive/7z/7zItem.h +77 -162
  96. data/ext/p7zip/CPP/7zip/Archive/7z/7zOut.cpp +288 -238
  97. data/ext/p7zip/CPP/7zip/Archive/7z/7zOut.h +189 -20
  98. data/ext/p7zip/CPP/7zip/Archive/7z/7zProperties.cpp +59 -49
  99. data/ext/p7zip/CPP/7zip/Archive/7z/7zRegister.cpp +12 -9
  100. data/ext/p7zip/CPP/7zip/Archive/7z/7zSpecStream.cpp +4 -6
  101. data/ext/p7zip/CPP/7zip/Archive/7z/7zSpecStream.h +5 -5
  102. data/ext/p7zip/CPP/7zip/Archive/7z/7zUpdate.cpp +1743 -447
  103. data/ext/p7zip/CPP/7zip/Archive/7z/7zUpdate.h +61 -10
  104. data/ext/p7zip/CPP/7zip/Archive/ApmHandler.cpp +84 -120
  105. data/ext/p7zip/CPP/7zip/Archive/ArHandler.cpp +854 -0
  106. data/ext/p7zip/CPP/7zip/Archive/ArchiveExports.cpp +48 -32
  107. data/ext/p7zip/CPP/7zip/Archive/ArjHandler.cpp +519 -340
  108. data/ext/p7zip/CPP/7zip/Archive/Bz2Handler.cpp +223 -203
  109. data/ext/p7zip/CPP/7zip/Archive/Cab/CabBlockInStream.cpp +50 -139
  110. data/ext/p7zip/CPP/7zip/Archive/Cab/CabBlockInStream.h +17 -18
  111. data/ext/p7zip/CPP/7zip/Archive/Cab/CabHandler.cpp +566 -234
  112. data/ext/p7zip/CPP/7zip/Archive/Cab/CabHandler.h +10 -1
  113. data/ext/p7zip/CPP/7zip/Archive/Cab/CabHeader.cpp +2 -2
  114. data/ext/p7zip/CPP/7zip/Archive/Cab/CabHeader.h +12 -15
  115. data/ext/p7zip/CPP/7zip/Archive/Cab/CabIn.cpp +341 -122
  116. data/ext/p7zip/CPP/7zip/Archive/Cab/CabIn.h +81 -66
  117. data/ext/p7zip/CPP/7zip/Archive/Cab/CabItem.h +17 -14
  118. data/ext/p7zip/CPP/7zip/Archive/Cab/CabRegister.cpp +10 -4
  119. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHandler.cpp +190 -83
  120. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHandler.h +7 -1
  121. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmIn.cpp +292 -174
  122. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmIn.h +73 -47
  123. data/ext/p7zip/CPP/7zip/Archive/ComHandler.cpp +886 -0
  124. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2.cpp +994 -71
  125. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2.h +364 -101
  126. data/ext/p7zip/CPP/7zip/Archive/Common/DummyOutStream.cpp +7 -12
  127. data/ext/p7zip/CPP/7zip/Archive/Common/DummyOutStream.h +4 -3
  128. data/ext/p7zip/CPP/7zip/Archive/Common/FindSignature.cpp +6 -6
  129. data/ext/p7zip/CPP/7zip/Archive/Common/FindSignature.h +2 -2
  130. data/ext/p7zip/CPP/7zip/Archive/Common/HandlerOut.cpp +77 -543
  131. data/ext/p7zip/CPP/7zip/Archive/Common/HandlerOut.h +31 -51
  132. data/ext/p7zip/CPP/7zip/Archive/Common/InStreamWithCRC.cpp +18 -14
  133. data/ext/p7zip/CPP/7zip/Archive/Common/ItemNameUtils.cpp +34 -7
  134. data/ext/p7zip/CPP/7zip/Archive/Common/ItemNameUtils.h +5 -2
  135. data/ext/p7zip/CPP/7zip/Archive/Common/MultiStream.cpp +25 -24
  136. data/ext/p7zip/CPP/7zip/Archive/Common/MultiStream.h +8 -3
  137. data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithCRC.h +1 -0
  138. data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithSha1.cpp +2 -2
  139. data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithSha1.h +5 -5
  140. data/ext/p7zip/CPP/7zip/Archive/Common/ParseProperties.cpp +0 -174
  141. data/ext/p7zip/CPP/7zip/Archive/Common/ParseProperties.h +2 -14
  142. data/ext/p7zip/CPP/7zip/Archive/CpioHandler.cpp +506 -335
  143. data/ext/p7zip/CPP/7zip/Archive/CramfsHandler.cpp +227 -84
  144. data/ext/p7zip/CPP/7zip/Archive/DeflateProps.cpp +0 -115
  145. data/ext/p7zip/CPP/7zip/Archive/DeflateProps.h +0 -29
  146. data/ext/p7zip/CPP/7zip/Archive/DllExports2.cpp +63 -17
  147. data/ext/p7zip/CPP/7zip/Archive/DmgHandler.cpp +1007 -339
  148. data/ext/p7zip/CPP/7zip/Archive/ElfHandler.cpp +618 -177
  149. data/ext/p7zip/CPP/7zip/Archive/ExtHandler.cpp +2867 -0
  150. data/ext/p7zip/CPP/7zip/Archive/FatHandler.cpp +136 -76
  151. data/ext/p7zip/CPP/7zip/Archive/FlvHandler.cpp +132 -150
  152. data/ext/p7zip/CPP/7zip/Archive/GptHandler.cpp +405 -0
  153. data/ext/p7zip/CPP/7zip/Archive/GzHandler.cpp +560 -214
  154. data/ext/p7zip/CPP/7zip/Archive/HandlerCont.cpp +288 -0
  155. data/ext/p7zip/CPP/7zip/Archive/HandlerCont.h +116 -0
  156. data/ext/p7zip/CPP/7zip/Archive/HfsHandler.cpp +1880 -0
  157. data/ext/p7zip/CPP/7zip/Archive/IArchive.h +415 -51
  158. data/ext/p7zip/CPP/7zip/Archive/IhexHandler.cpp +497 -0
  159. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHandler.cpp +158 -71
  160. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHandler.h +2 -1
  161. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHeader.cpp +0 -9
  162. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHeader.h +8 -5
  163. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoIn.cpp +311 -91
  164. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoIn.h +101 -83
  165. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoItem.h +48 -39
  166. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoRegister.cpp +12 -4
  167. data/ext/p7zip/CPP/7zip/Archive/LzhHandler.cpp +127 -114
  168. data/ext/p7zip/CPP/7zip/Archive/LzmaHandler.cpp +264 -121
  169. data/ext/p7zip/CPP/7zip/Archive/MachoHandler.cpp +402 -242
  170. data/ext/p7zip/CPP/7zip/Archive/MbrHandler.cpp +56 -114
  171. data/ext/p7zip/CPP/7zip/Archive/MslzHandler.cpp +230 -90
  172. data/ext/p7zip/CPP/7zip/Archive/MubHandler.cpp +129 -153
  173. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisDecode.cpp +179 -58
  174. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisDecode.h +36 -7
  175. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisHandler.cpp +407 -237
  176. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisHandler.h +9 -16
  177. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisIn.cpp +5535 -1098
  178. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisIn.h +345 -81
  179. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisRegister.cpp +11 -4
  180. data/ext/p7zip/CPP/7zip/Archive/NtfsHandler.cpp +1424 -434
  181. data/ext/p7zip/CPP/7zip/Archive/PeHandler.cpp +1831 -521
  182. data/ext/p7zip/CPP/7zip/Archive/PpmdHandler.cpp +50 -35
  183. data/ext/p7zip/CPP/7zip/Archive/QcowHandler.cpp +615 -0
  184. data/ext/p7zip/CPP/7zip/Archive/Rar/Rar5Handler.cpp +2746 -0
  185. data/ext/p7zip/CPP/7zip/Archive/Rar/Rar5Handler.h +411 -0
  186. data/ext/p7zip/CPP/7zip/Archive/Rar/RarHandler.cpp +1241 -355
  187. data/ext/p7zip/CPP/7zip/Archive/Rar/RarHandler.h +70 -20
  188. data/ext/p7zip/CPP/7zip/Archive/Rar/RarHeader.h +38 -34
  189. data/ext/p7zip/CPP/7zip/Archive/Rar/RarItem.h +34 -16
  190. data/ext/p7zip/CPP/7zip/Archive/Rar/RarVol.h +129 -0
  191. data/ext/p7zip/CPP/7zip/Archive/RpmHandler.cpp +641 -194
  192. data/ext/p7zip/CPP/7zip/Archive/SplitHandler.cpp +174 -181
  193. data/ext/p7zip/CPP/7zip/Archive/SquashfsHandler.cpp +237 -174
  194. data/ext/p7zip/CPP/7zip/Archive/SwfHandler.cpp +471 -192
  195. data/ext/p7zip/CPP/7zip/Archive/Tar/TarHandler.cpp +350 -59
  196. data/ext/p7zip/CPP/7zip/Archive/Tar/TarHandler.h +24 -7
  197. data/ext/p7zip/CPP/7zip/Archive/Tar/TarHandlerOut.cpp +79 -27
  198. data/ext/p7zip/CPP/7zip/Archive/Tar/TarHeader.cpp +5 -7
  199. data/ext/p7zip/CPP/7zip/Archive/Tar/TarHeader.h +20 -44
  200. data/ext/p7zip/CPP/7zip/Archive/Tar/TarIn.cpp +279 -64
  201. data/ext/p7zip/CPP/7zip/Archive/Tar/TarIn.h +10 -1
  202. data/ext/p7zip/CPP/7zip/Archive/Tar/TarItem.h +34 -8
  203. data/ext/p7zip/CPP/7zip/Archive/Tar/TarOut.cpp +145 -87
  204. data/ext/p7zip/CPP/7zip/Archive/Tar/TarOut.h +13 -5
  205. data/ext/p7zip/CPP/7zip/Archive/Tar/TarRegister.cpp +14 -9
  206. data/ext/p7zip/CPP/7zip/Archive/Tar/TarUpdate.cpp +154 -27
  207. data/ext/p7zip/CPP/7zip/Archive/Tar/TarUpdate.h +10 -6
  208. data/ext/p7zip/CPP/7zip/Archive/Udf/UdfHandler.cpp +53 -128
  209. data/ext/p7zip/CPP/7zip/Archive/Udf/UdfHandler.h +6 -5
  210. data/ext/p7zip/CPP/7zip/Archive/Udf/UdfIn.cpp +384 -119
  211. data/ext/p7zip/CPP/7zip/Archive/Udf/UdfIn.h +40 -21
  212. data/ext/p7zip/CPP/7zip/Archive/UefiHandler.cpp +1618 -0
  213. data/ext/p7zip/CPP/7zip/Archive/VdiHandler.cpp +362 -0
  214. data/ext/p7zip/CPP/7zip/Archive/VhdHandler.cpp +438 -247
  215. data/ext/p7zip/CPP/7zip/Archive/VmdkHandler.cpp +1518 -0
  216. data/ext/p7zip/CPP/7zip/Archive/Wim/WimHandler.cpp +837 -249
  217. data/ext/p7zip/CPP/7zip/Archive/Wim/WimHandler.h +73 -47
  218. data/ext/p7zip/CPP/7zip/Archive/Wim/WimHandlerOut.cpp +1614 -351
  219. data/ext/p7zip/CPP/7zip/Archive/Wim/WimIn.cpp +1519 -513
  220. data/ext/p7zip/CPP/7zip/Archive/Wim/WimIn.h +498 -139
  221. data/ext/p7zip/CPP/7zip/Archive/Wim/WimRegister.cpp +13 -9
  222. data/ext/p7zip/CPP/7zip/Archive/XarHandler.cpp +272 -128
  223. data/ext/p7zip/CPP/7zip/Archive/XzHandler.cpp +502 -253
  224. data/ext/p7zip/CPP/7zip/Archive/XzHandler.h +65 -0
  225. data/ext/p7zip/CPP/7zip/Archive/ZHandler.cpp +114 -39
  226. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipAddCommon.cpp +118 -134
  227. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipAddCommon.h +6 -0
  228. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipCompressionMode.h +40 -20
  229. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHandler.cpp +541 -274
  230. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHandler.h +13 -40
  231. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHandlerOut.cpp +165 -254
  232. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHeader.h +70 -178
  233. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipIn.cpp +1934 -550
  234. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipIn.h +294 -63
  235. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipItem.cpp +160 -86
  236. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipItem.h +139 -110
  237. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipOut.cpp +177 -154
  238. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipOut.h +50 -18
  239. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipRegister.cpp +18 -9
  240. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipUpdate.cpp +367 -201
  241. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipUpdate.h +11 -10
  242. data/ext/p7zip/CPP/7zip/Bundles/Format7zFree/makefile +2 -319
  243. data/ext/p7zip/CPP/7zip/Bundles/Format7zFree/makefile.depend +0 -4962
  244. data/ext/p7zip/CPP/7zip/Bundles/Format7zFree/makefile.list +1004 -259
  245. data/ext/p7zip/CPP/7zip/Common/CWrappers.cpp +26 -22
  246. data/ext/p7zip/CPP/7zip/Common/CWrappers.h +19 -14
  247. data/ext/p7zip/CPP/7zip/Common/CreateCoder.cpp +298 -130
  248. data/ext/p7zip/CPP/7zip/Common/CreateCoder.h +118 -34
  249. data/ext/p7zip/CPP/7zip/Common/FilePathAutoRename.cpp +24 -28
  250. data/ext/p7zip/CPP/7zip/Common/FilePathAutoRename.h +5 -5
  251. data/ext/p7zip/CPP/7zip/Common/FileStreams.cpp +268 -65
  252. data/ext/p7zip/CPP/7zip/Common/FileStreams.h +70 -33
  253. data/ext/p7zip/CPP/7zip/Common/FilterCoder.cpp +302 -131
  254. data/ext/p7zip/CPP/7zip/Common/FilterCoder.h +141 -43
  255. data/ext/p7zip/CPP/7zip/Common/InBuffer.cpp +87 -35
  256. data/ext/p7zip/CPP/7zip/Common/InBuffer.h +54 -45
  257. data/ext/p7zip/CPP/7zip/Common/InOutTempBuffer.cpp +22 -17
  258. data/ext/p7zip/CPP/7zip/Common/InOutTempBuffer.h +5 -5
  259. data/ext/p7zip/CPP/7zip/Common/LimitedStreams.cpp +256 -43
  260. data/ext/p7zip/CPP/7zip/Common/LimitedStreams.h +135 -8
  261. data/ext/p7zip/CPP/7zip/Common/MemBlocks.cpp +5 -5
  262. data/ext/p7zip/CPP/7zip/Common/MemBlocks.h +3 -3
  263. data/ext/p7zip/CPP/7zip/Common/MethodId.cpp +0 -24
  264. data/ext/p7zip/CPP/7zip/Common/MethodId.h +1 -1
  265. data/ext/p7zip/CPP/7zip/Common/MethodProps.cpp +430 -71
  266. data/ext/p7zip/CPP/7zip/Common/MethodProps.h +170 -17
  267. data/ext/p7zip/CPP/7zip/Common/OffsetStream.cpp +8 -4
  268. data/ext/p7zip/CPP/7zip/Common/OffsetStream.h +4 -3
  269. data/ext/p7zip/CPP/7zip/Common/OutBuffer.cpp +26 -31
  270. data/ext/p7zip/CPP/7zip/Common/OutBuffer.h +17 -18
  271. data/ext/p7zip/CPP/7zip/Common/OutMemStream.cpp +5 -5
  272. data/ext/p7zip/CPP/7zip/Common/OutMemStream.h +5 -4
  273. data/ext/p7zip/CPP/7zip/Common/ProgressUtils.cpp +22 -13
  274. data/ext/p7zip/CPP/7zip/Common/ProgressUtils.h +4 -3
  275. data/ext/p7zip/CPP/7zip/Common/PropId.cpp +108 -0
  276. data/ext/p7zip/CPP/7zip/Common/RegisterArc.h +63 -17
  277. data/ext/p7zip/CPP/7zip/Common/RegisterCodec.h +79 -6
  278. data/ext/p7zip/CPP/7zip/Common/StreamBinder.cpp +95 -90
  279. data/ext/p7zip/CPP/7zip/Common/StreamBinder.h +46 -23
  280. data/ext/p7zip/CPP/7zip/Common/StreamObjects.cpp +88 -24
  281. data/ext/p7zip/CPP/7zip/Common/StreamObjects.h +36 -14
  282. data/ext/p7zip/CPP/7zip/Common/StreamUtils.cpp +4 -4
  283. data/ext/p7zip/CPP/7zip/Common/StreamUtils.h +6 -6
  284. data/ext/p7zip/CPP/7zip/Common/UniqBlocks.cpp +57 -0
  285. data/ext/p7zip/CPP/7zip/Common/UniqBlocks.h +26 -0
  286. data/ext/p7zip/CPP/7zip/Common/VirtThread.cpp +8 -6
  287. data/ext/p7zip/CPP/7zip/Common/VirtThread.h +6 -5
  288. data/ext/p7zip/CPP/7zip/Compress/BZip2Const.h +13 -12
  289. data/ext/p7zip/CPP/7zip/Compress/BZip2Crc.h +1 -1
  290. data/ext/p7zip/CPP/7zip/Compress/BZip2Decoder.cpp +198 -147
  291. data/ext/p7zip/CPP/7zip/Compress/BZip2Decoder.h +60 -27
  292. data/ext/p7zip/CPP/7zip/Compress/BZip2Encoder.cpp +111 -116
  293. data/ext/p7zip/CPP/7zip/Compress/BZip2Encoder.h +53 -59
  294. data/ext/p7zip/CPP/7zip/Compress/BZip2Register.cpp +12 -7
  295. data/ext/p7zip/CPP/7zip/Compress/Bcj2Coder.cpp +554 -282
  296. data/ext/p7zip/CPP/7zip/Compress/Bcj2Coder.h +73 -71
  297. data/ext/p7zip/CPP/7zip/Compress/Bcj2Register.cpp +10 -5
  298. data/ext/p7zip/CPP/7zip/Compress/BcjCoder.cpp +13 -4
  299. data/ext/p7zip/CPP/7zip/Compress/BcjCoder.h +17 -5
  300. data/ext/p7zip/CPP/7zip/Compress/BcjRegister.cpp +7 -9
  301. data/ext/p7zip/CPP/7zip/Compress/BitlDecoder.cpp +2 -2
  302. data/ext/p7zip/CPP/7zip/Compress/BitlDecoder.h +58 -61
  303. data/ext/p7zip/CPP/7zip/Compress/BitlEncoder.h +24 -25
  304. data/ext/p7zip/CPP/7zip/Compress/BitmDecoder.h +46 -17
  305. data/ext/p7zip/CPP/7zip/Compress/BitmEncoder.h +18 -19
  306. data/ext/p7zip/CPP/7zip/Compress/BranchMisc.cpp +14 -28
  307. data/ext/p7zip/CPP/7zip/Compress/BranchMisc.h +27 -6
  308. data/ext/p7zip/CPP/7zip/Compress/BranchRegister.cpp +26 -15
  309. data/ext/p7zip/CPP/7zip/Compress/ByteSwap.cpp +45 -26
  310. data/ext/p7zip/CPP/7zip/Compress/CodecExports.cpp +254 -70
  311. data/ext/p7zip/CPP/7zip/Compress/CopyCoder.cpp +65 -17
  312. data/ext/p7zip/CPP/7zip/Compress/CopyCoder.h +15 -3
  313. data/ext/p7zip/CPP/7zip/Compress/CopyRegister.cpp +5 -4
  314. data/ext/p7zip/CPP/7zip/Compress/Deflate64Register.cpp +12 -6
  315. data/ext/p7zip/CPP/7zip/Compress/DeflateConst.h +43 -46
  316. data/ext/p7zip/CPP/7zip/Compress/DeflateDecoder.cpp +145 -81
  317. data/ext/p7zip/CPP/7zip/Compress/DeflateDecoder.h +31 -33
  318. data/ext/p7zip/CPP/7zip/Compress/DeflateEncoder.cpp +179 -162
  319. data/ext/p7zip/CPP/7zip/Compress/DeflateEncoder.h +35 -30
  320. data/ext/p7zip/CPP/7zip/Compress/DeflateRegister.cpp +11 -7
  321. data/ext/p7zip/CPP/7zip/Compress/DeltaFilter.cpp +55 -39
  322. data/ext/p7zip/CPP/7zip/Compress/{DllExports2.cpp → DllExports2Compress.cpp} +8 -8
  323. data/ext/p7zip/CPP/7zip/Compress/DllExportsCompress.cpp +48 -0
  324. data/ext/p7zip/CPP/7zip/Compress/HuffmanDecoder.h +220 -49
  325. data/ext/p7zip/CPP/7zip/Compress/ImplodeDecoder.cpp +14 -9
  326. data/ext/p7zip/CPP/7zip/Compress/ImplodeDecoder.h +2 -3
  327. data/ext/p7zip/CPP/7zip/Compress/ImplodeHuffmanDecoder.cpp +7 -7
  328. data/ext/p7zip/CPP/7zip/Compress/ImplodeHuffmanDecoder.h +1 -1
  329. data/ext/p7zip/CPP/7zip/Compress/LzOutWindow.cpp +1 -1
  330. data/ext/p7zip/CPP/7zip/Compress/LzOutWindow.h +21 -18
  331. data/ext/p7zip/CPP/7zip/Compress/LzhDecoder.cpp +171 -141
  332. data/ext/p7zip/CPP/7zip/Compress/LzhDecoder.h +32 -64
  333. data/ext/p7zip/CPP/7zip/Compress/Lzham/LICENSE +22 -0
  334. data/ext/p7zip/CPP/7zip/Compress/Lzham/LzhamRegister.cpp +783 -0
  335. data/ext/p7zip/CPP/7zip/Compress/Lzham/README.md +211 -0
  336. data/ext/p7zip/CPP/7zip/Compress/Lzham/include/lzham.h +803 -0
  337. data/ext/p7zip/CPP/7zip/Compress/Lzham/include/lzham_dynamic_lib.h +156 -0
  338. data/ext/p7zip/CPP/7zip/Compress/Lzham/include/lzham_exports.inc +31 -0
  339. data/ext/p7zip/CPP/7zip/Compress/Lzham/include/lzham_static_lib.h +59 -0
  340. data/ext/p7zip/CPP/7zip/Compress/Lzham/include/zlib.h +2 -0
  341. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/CMakeLists.txt +69 -0
  342. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_comp.h +38 -0
  343. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzbase.cpp +244 -0
  344. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzbase.h +46 -0
  345. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzcomp.cpp +750 -0
  346. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzcomp_internal.cpp +2240 -0
  347. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzcomp_internal.h +503 -0
  348. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzcomp_state.cpp +1684 -0
  349. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_match_accel.cpp +947 -0
  350. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_match_accel.h +164 -0
  351. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_null_threading.h +98 -0
  352. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_pthreads_threading.cpp +214 -0
  353. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_pthreads_threading.h +535 -0
  354. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_threading.h +12 -0
  355. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_win32_threading.cpp +232 -0
  356. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_win32_threading.h +387 -0
  357. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzhamcomp.vcxproj +208 -0
  358. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/CMakeLists.txt +86 -0
  359. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_assert.cpp +80 -0
  360. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_assert.h +58 -0
  361. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_checksum.cpp +73 -0
  362. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_checksum.h +13 -0
  363. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_config.h +25 -0
  364. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_core.h +303 -0
  365. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_decomp.h +37 -0
  366. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_helpers.h +54 -0
  367. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_huffman_codes.cpp +286 -0
  368. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_huffman_codes.h +32 -0
  369. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_lzdecomp.cpp +1586 -0
  370. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_lzdecompbase.cpp +131 -0
  371. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_lzdecompbase.h +89 -0
  372. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_math.h +142 -0
  373. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_mem.cpp +463 -0
  374. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_mem.h +115 -0
  375. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_platform.cpp +159 -0
  376. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_platform.h +284 -0
  377. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_prefix_coding.cpp +431 -0
  378. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_prefix_coding.h +157 -0
  379. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_symbol_codec.cpp +1527 -0
  380. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_symbol_codec.h +494 -0
  381. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_timer.cpp +147 -0
  382. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_timer.h +99 -0
  383. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_traits.h +141 -0
  384. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_types.h +72 -0
  385. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_utils.h +58 -0
  386. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_vector.cpp +83 -0
  387. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_vector.h +628 -0
  388. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzhamdecomp.vcxproj +224 -0
  389. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamlib/lzham_lib.cpp +179 -0
  390. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamlib/lzhamlib.vcxproj +187 -0
  391. data/ext/p7zip/CPP/7zip/Compress/Lzham/makefile +10 -0
  392. data/ext/p7zip/CPP/7zip/Compress/Lzham/makefile.depend +0 -0
  393. data/ext/p7zip/CPP/7zip/Compress/Lzham/makefile.list +129 -0
  394. data/ext/p7zip/CPP/7zip/Compress/Lzma2Decoder.cpp +123 -46
  395. data/ext/p7zip/CPP/7zip/Compress/Lzma2Decoder.h +29 -14
  396. data/ext/p7zip/CPP/7zip/Compress/Lzma2Encoder.cpp +14 -9
  397. data/ext/p7zip/CPP/7zip/Compress/Lzma2Encoder.h +1 -1
  398. data/ext/p7zip/CPP/7zip/Compress/Lzma2Register.cpp +9 -7
  399. data/ext/p7zip/CPP/7zip/Compress/LzmaDecoder.cpp +24 -8
  400. data/ext/p7zip/CPP/7zip/Compress/LzmaDecoder.h +8 -1
  401. data/ext/p7zip/CPP/7zip/Compress/LzmaEncoder.cpp +30 -27
  402. data/ext/p7zip/CPP/7zip/Compress/LzmaEncoder.h +3 -1
  403. data/ext/p7zip/CPP/7zip/Compress/LzmaRegister.cpp +9 -7
  404. data/ext/p7zip/CPP/7zip/Compress/LzmsDecoder.cpp +576 -0
  405. data/ext/p7zip/CPP/7zip/Compress/LzmsDecoder.h +271 -0
  406. data/ext/p7zip/CPP/7zip/Compress/Lzx.h +32 -36
  407. data/ext/p7zip/CPP/7zip/Compress/LzxDecoder.cpp +380 -238
  408. data/ext/p7zip/CPP/7zip/Compress/LzxDecoder.h +170 -83
  409. data/ext/p7zip/CPP/7zip/Compress/Mtf8.h +7 -9
  410. data/ext/p7zip/CPP/7zip/Compress/PpmdDecoder.cpp +1 -5
  411. data/ext/p7zip/CPP/7zip/Compress/PpmdEncoder.cpp +51 -18
  412. data/ext/p7zip/CPP/7zip/Compress/PpmdEncoder.h +18 -8
  413. data/ext/p7zip/CPP/7zip/Compress/PpmdRegister.cpp +9 -8
  414. data/ext/p7zip/CPP/7zip/Compress/PpmdZip.cpp +61 -25
  415. data/ext/p7zip/CPP/7zip/Compress/PpmdZip.h +21 -6
  416. data/ext/p7zip/CPP/7zip/Compress/QuantumDecoder.cpp +122 -102
  417. data/ext/p7zip/CPP/7zip/Compress/QuantumDecoder.h +68 -157
  418. data/ext/p7zip/CPP/7zip/Compress/Rar/makefile +33 -18
  419. data/ext/p7zip/CPP/7zip/Compress/Rar/makefile.depend +0 -158
  420. data/ext/p7zip/CPP/7zip/Compress/Rar/makefile.list +105 -56
  421. data/ext/p7zip/CPP/7zip/Compress/Rar1Decoder.cpp +34 -21
  422. data/ext/p7zip/CPP/7zip/Compress/Rar1Decoder.h +2 -0
  423. data/ext/p7zip/CPP/7zip/Compress/Rar2Decoder.cpp +77 -67
  424. data/ext/p7zip/CPP/7zip/Compress/Rar2Decoder.h +12 -10
  425. data/ext/p7zip/CPP/7zip/Compress/Rar3Decoder.cpp +139 -118
  426. data/ext/p7zip/CPP/7zip/Compress/Rar3Decoder.h +48 -33
  427. data/ext/p7zip/CPP/7zip/Compress/Rar3Vm.cpp +148 -113
  428. data/ext/p7zip/CPP/7zip/Compress/Rar3Vm.h +35 -19
  429. data/ext/p7zip/CPP/7zip/Compress/Rar5Decoder.cpp +961 -0
  430. data/ext/p7zip/CPP/7zip/Compress/Rar5Decoder.h +335 -0
  431. data/ext/p7zip/CPP/7zip/Compress/RarCodecsRegister.cpp +13 -6
  432. data/ext/p7zip/CPP/7zip/Compress/ShrinkDecoder.cpp +91 -71
  433. data/ext/p7zip/CPP/7zip/Compress/ShrinkDecoder.h +2 -4
  434. data/ext/p7zip/CPP/7zip/Compress/XpressDecoder.cpp +129 -0
  435. data/ext/p7zip/CPP/7zip/Compress/XpressDecoder.h +13 -0
  436. data/ext/p7zip/CPP/7zip/Compress/ZDecoder.cpp +98 -20
  437. data/ext/p7zip/CPP/7zip/Compress/ZDecoder.h +19 -7
  438. data/ext/p7zip/CPP/7zip/Compress/ZlibDecoder.cpp +14 -11
  439. data/ext/p7zip/CPP/7zip/Compress/ZlibDecoder.h +32 -1
  440. data/ext/p7zip/CPP/7zip/Crypto/7zAes.cpp +137 -101
  441. data/ext/p7zip/CPP/7zip/Crypto/7zAes.h +31 -30
  442. data/ext/p7zip/CPP/7zip/Crypto/7zAesRegister.cpp +8 -9
  443. data/ext/p7zip/CPP/7zip/Crypto/HmacSha1.cpp +39 -28
  444. data/ext/p7zip/CPP/7zip/Crypto/HmacSha1.h +3 -3
  445. data/ext/p7zip/CPP/7zip/Crypto/HmacSha256.cpp +62 -0
  446. data/ext/p7zip/CPP/7zip/Crypto/HmacSha256.h +27 -0
  447. data/ext/p7zip/CPP/7zip/Crypto/MyAes.cpp +73 -7
  448. data/ext/p7zip/CPP/7zip/Crypto/MyAes.h +25 -8
  449. data/ext/p7zip/CPP/7zip/Crypto/MyAesReg.cpp +16 -0
  450. data/ext/p7zip/CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp +29 -15
  451. data/ext/p7zip/CPP/7zip/Crypto/Pbkdf2HmacSha1.h +2 -1
  452. data/ext/p7zip/CPP/7zip/Crypto/RandGen.cpp +49 -34
  453. data/ext/p7zip/CPP/7zip/Crypto/RandGen.h +2 -2
  454. data/ext/p7zip/CPP/7zip/Crypto/Rar20Crypto.cpp +36 -39
  455. data/ext/p7zip/CPP/7zip/Crypto/Rar20Crypto.h +15 -17
  456. data/ext/p7zip/CPP/7zip/Crypto/Rar5Aes.cpp +257 -0
  457. data/ext/p7zip/CPP/7zip/Crypto/Rar5Aes.h +84 -0
  458. data/ext/p7zip/CPP/7zip/Crypto/RarAes.cpp +70 -71
  459. data/ext/p7zip/CPP/7zip/Crypto/RarAes.h +24 -19
  460. data/ext/p7zip/CPP/7zip/Crypto/Sha1Cls.h +51 -0
  461. data/ext/p7zip/CPP/7zip/Crypto/WzAes.cpp +68 -54
  462. data/ext/p7zip/CPP/7zip/Crypto/WzAes.h +37 -27
  463. data/ext/p7zip/CPP/7zip/Crypto/ZipCrypto.cpp +60 -34
  464. data/ext/p7zip/CPP/7zip/Crypto/ZipCrypto.h +28 -11
  465. data/ext/p7zip/CPP/7zip/Crypto/ZipStrong.cpp +90 -28
  466. data/ext/p7zip/CPP/7zip/Crypto/ZipStrong.h +13 -2
  467. data/ext/p7zip/CPP/7zip/Guid.txt +57 -11
  468. data/ext/p7zip/CPP/7zip/ICoder.h +202 -17
  469. data/ext/p7zip/CPP/7zip/IDecl.h +16 -3
  470. data/ext/p7zip/CPP/7zip/IPassword.h +1 -2
  471. data/ext/p7zip/CPP/7zip/IProgress.h +2 -16
  472. data/ext/p7zip/CPP/7zip/IStream.h +82 -13
  473. data/ext/p7zip/CPP/7zip/MyVersion.h +2 -11
  474. data/ext/p7zip/CPP/7zip/PropID.h +60 -9
  475. data/ext/p7zip/CPP/Common/C_FileIO.cpp +5 -1
  476. data/ext/p7zip/CPP/Common/C_FileIO.h +7 -1
  477. data/ext/p7zip/CPP/Common/CommandLineParser.cpp +122 -148
  478. data/ext/p7zip/CPP/Common/CommandLineParser.h +20 -29
  479. data/ext/p7zip/CPP/Common/Common.h +13 -0
  480. data/ext/p7zip/CPP/Common/CrcReg.cpp +98 -0
  481. data/ext/p7zip/CPP/Common/Defs.h +5 -10
  482. data/ext/p7zip/CPP/Common/DynLimBuf.cpp +93 -0
  483. data/ext/p7zip/CPP/Common/DynLimBuf.h +40 -0
  484. data/ext/p7zip/CPP/Common/DynamicBuffer.h +45 -31
  485. data/ext/p7zip/CPP/Common/IntToString.cpp +109 -40
  486. data/ext/p7zip/CPP/Common/IntToString.h +14 -9
  487. data/ext/p7zip/CPP/Common/Lang.cpp +120 -87
  488. data/ext/p7zip/CPP/Common/Lang.h +10 -15
  489. data/ext/p7zip/CPP/Common/ListFileUtils.cpp +82 -40
  490. data/ext/p7zip/CPP/Common/ListFileUtils.h +7 -4
  491. data/ext/p7zip/CPP/Common/MyBuffer.h +244 -0
  492. data/ext/p7zip/CPP/Common/MyCom.h +65 -28
  493. data/ext/p7zip/CPP/Common/MyGuidDef.h +1 -1
  494. data/ext/p7zip/CPP/Common/MyInitGuid.h +23 -0
  495. data/ext/p7zip/CPP/Common/MyLinux.h +42 -0
  496. data/ext/p7zip/CPP/Common/MyMap.cpp +8 -8
  497. data/ext/p7zip/CPP/Common/MyMap.h +2 -2
  498. data/ext/p7zip/CPP/Common/MyString.cpp +1643 -117
  499. data/ext/p7zip/CPP/Common/MyString.h +677 -486
  500. data/ext/p7zip/CPP/Common/MyTypes.h +38 -0
  501. data/ext/p7zip/CPP/Common/MyUnknown.h +4 -0
  502. data/ext/p7zip/CPP/Common/MyVector.cpp +0 -84
  503. data/ext/p7zip/CPP/Common/MyVector.h +472 -112
  504. data/ext/p7zip/CPP/Common/MyWindows.cpp +18 -1
  505. data/ext/p7zip/CPP/Common/MyWindows.h +8 -0
  506. data/ext/p7zip/CPP/Common/MyXml.cpp +169 -118
  507. data/ext/p7zip/CPP/Common/MyXml.h +14 -11
  508. data/ext/p7zip/CPP/Common/NewHandler.cpp +39 -0
  509. data/ext/p7zip/CPP/Common/NewHandler.h +55 -2
  510. data/ext/p7zip/CPP/Common/Random.h +14 -0
  511. data/ext/p7zip/CPP/Common/Sha1Reg.cpp +40 -0
  512. data/ext/p7zip/CPP/Common/Sha256Reg.cpp +40 -0
  513. data/ext/p7zip/CPP/Common/StdInStream.cpp +46 -27
  514. data/ext/p7zip/CPP/Common/StdInStream.h +11 -10
  515. data/ext/p7zip/CPP/Common/StdOutStream.cpp +48 -35
  516. data/ext/p7zip/CPP/Common/StdOutStream.h +44 -17
  517. data/ext/p7zip/CPP/Common/StringConvert.cpp +56 -17
  518. data/ext/p7zip/CPP/Common/StringConvert.h +7 -3
  519. data/ext/p7zip/CPP/Common/StringToInt.cpp +102 -48
  520. data/ext/p7zip/CPP/Common/StringToInt.h +13 -10
  521. data/ext/p7zip/CPP/Common/TextConfig.cpp +33 -47
  522. data/ext/p7zip/CPP/Common/TextConfig.h +3 -6
  523. data/ext/p7zip/CPP/Common/UTFConvert.cpp +218 -75
  524. data/ext/p7zip/CPP/Common/UTFConvert.h +4 -3
  525. data/ext/p7zip/CPP/Common/Wildcard.cpp +345 -125
  526. data/ext/p7zip/CPP/Common/Wildcard.h +82 -13
  527. data/ext/p7zip/CPP/Common/XzCrc64Reg.cpp +42 -0
  528. data/ext/p7zip/CPP/Windows/FileDir.cpp +427 -475
  529. data/ext/p7zip/CPP/Windows/FileDir.h +94 -72
  530. data/ext/p7zip/CPP/Windows/FileFind.cpp +235 -244
  531. data/ext/p7zip/CPP/Windows/FileFind.h +63 -59
  532. data/ext/p7zip/CPP/Windows/FileIO.cpp +29 -46
  533. data/ext/p7zip/CPP/Windows/FileIO.h +40 -42
  534. data/ext/p7zip/CPP/Windows/FileName.cpp +696 -17
  535. data/ext/p7zip/CPP/Windows/FileName.h +11 -3
  536. data/ext/p7zip/CPP/Windows/NtCheck.h +2 -0
  537. data/ext/p7zip/CPP/Windows/PropVariant.cpp +134 -30
  538. data/ext/p7zip/CPP/Windows/PropVariant.h +80 -24
  539. data/ext/p7zip/CPP/Windows/PropVariantUtils.cpp +89 -18
  540. data/ext/p7zip/CPP/Windows/PropVariantUtils.h +12 -7
  541. data/ext/p7zip/CPP/Windows/System.cpp +20 -15
  542. data/ext/p7zip/CPP/Windows/System.h +3 -2
  543. data/ext/p7zip/CPP/Windows/TimeUtils.cpp +203 -0
  544. data/ext/p7zip/CPP/Windows/TimeUtils.h +24 -0
  545. data/ext/p7zip/CPP/include_windows/basetyps.h +4 -4
  546. data/ext/p7zip/CPP/include_windows/windows.h +17 -11
  547. data/ext/p7zip/CPP/myWindows/StdAfx.h +97 -5
  548. data/ext/p7zip/CPP/myWindows/config.h +20 -5
  549. data/ext/p7zip/CPP/myWindows/myPrivate.h +8 -0
  550. data/ext/p7zip/CPP/myWindows/wine_date_and_time.cpp +34 -0
  551. data/ext/p7zip/ChangeLog +283 -35
  552. data/ext/p7zip/{DOCS → DOC}/7zC.txt +6 -13
  553. data/ext/p7zip/{DOCS → DOC}/License.txt +3 -2
  554. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/add.htm +93 -87
  555. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/bench.htm +88 -79
  556. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/delete.htm +62 -59
  557. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/extract.htm +96 -91
  558. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/extract_full.htm +73 -68
  559. data/ext/p7zip/DOC/MANUAL/cmdline/commands/hash.htm +65 -0
  560. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/index.htm +36 -33
  561. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/list.htm +78 -77
  562. data/ext/p7zip/DOC/MANUAL/cmdline/commands/rename.htm +51 -0
  563. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/style.css +232 -232
  564. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/test.htm +47 -46
  565. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/update.htm +71 -66
  566. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/exit_codes.htm +27 -27
  567. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/index.htm +29 -29
  568. data/ext/p7zip/{DOCS/MANUAL/switches → DOC/MANUAL/cmdline}/style.css +232 -232
  569. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/ar_exclude.htm +56 -56
  570. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/ar_include.htm +80 -83
  571. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/ar_no.htm +52 -52
  572. data/ext/p7zip/DOC/MANUAL/cmdline/switches/bb.htm +61 -0
  573. data/ext/p7zip/DOC/MANUAL/cmdline/switches/bs.htm +67 -0
  574. data/ext/p7zip/DOC/MANUAL/cmdline/switches/charset.htm +61 -0
  575. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/exclude.htm +71 -60
  576. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/include.htm +89 -87
  577. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/index.htm +95 -64
  578. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/large_pages.htm +59 -50
  579. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/list_tech.htm +36 -36
  580. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/method.htm +738 -625
  581. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/output_dir.htm +53 -53
  582. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/overwrite.htm +56 -56
  583. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/password.htm +55 -54
  584. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/recurse.htm +85 -83
  585. data/ext/p7zip/DOC/MANUAL/cmdline/switches/sa.htm +58 -0
  586. data/ext/p7zip/DOC/MANUAL/cmdline/switches/scc.htm +42 -0
  587. data/ext/p7zip/DOC/MANUAL/cmdline/switches/scrc.htm +53 -0
  588. data/ext/p7zip/DOC/MANUAL/cmdline/switches/sdel.htm +39 -0
  589. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/sfx.htm +153 -156
  590. data/ext/p7zip/DOC/MANUAL/cmdline/switches/shared.htm +40 -0
  591. data/ext/p7zip/DOC/MANUAL/cmdline/switches/sni.htm +56 -0
  592. data/ext/p7zip/DOC/MANUAL/cmdline/switches/sns.htm +77 -0
  593. data/ext/p7zip/DOC/MANUAL/cmdline/switches/spf.htm +80 -0
  594. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/ssc.htm +50 -50
  595. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/stdin.htm +56 -55
  596. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/stdout.htm +54 -50
  597. data/ext/p7zip/DOC/MANUAL/cmdline/switches/stl.htm +39 -0
  598. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/stop_switch.htm +31 -31
  599. data/ext/p7zip/DOC/MANUAL/cmdline/switches/stx.htm +50 -0
  600. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline/switches}/style.css +232 -232
  601. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/type.htm +121 -83
  602. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/update.htm +177 -176
  603. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/volume.htm +49 -49
  604. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/working_dir.htm +56 -55
  605. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/yes.htm +48 -48
  606. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/syntax.htm +120 -120
  607. data/ext/p7zip/DOC/MANUAL/fm/about.htm +21 -0
  608. data/ext/p7zip/DOC/MANUAL/fm/benchmark.htm +56 -0
  609. data/ext/p7zip/DOC/MANUAL/fm/index.htm +54 -0
  610. data/ext/p7zip/DOC/MANUAL/fm/menu.htm +154 -0
  611. data/ext/p7zip/DOC/MANUAL/fm/options.htm +152 -0
  612. data/ext/p7zip/DOC/MANUAL/fm/plugins/7-zip/add.htm +311 -0
  613. data/ext/p7zip/DOC/MANUAL/fm/plugins/7-zip/extract.htm +78 -0
  614. data/ext/p7zip/DOC/MANUAL/fm/plugins/7-zip/index.htm +63 -0
  615. data/ext/p7zip/DOC/MANUAL/fm/plugins/7-zip/style.css +232 -0
  616. data/ext/p7zip/DOC/MANUAL/fm/plugins/index.htm +22 -0
  617. data/ext/p7zip/DOC/MANUAL/fm/plugins/style.css +232 -0
  618. data/ext/p7zip/DOC/MANUAL/fm/style.css +232 -0
  619. data/ext/p7zip/DOC/MANUAL/general/7z.htm +117 -0
  620. data/ext/p7zip/DOC/MANUAL/general/faq.htm +125 -0
  621. data/ext/p7zip/DOC/MANUAL/general/formats.htm +100 -0
  622. data/ext/p7zip/DOC/MANUAL/general/index.htm +27 -0
  623. data/ext/p7zip/DOC/MANUAL/general/license.htm +30 -0
  624. data/ext/p7zip/DOC/MANUAL/general/performance.htm +98 -0
  625. data/ext/p7zip/DOC/MANUAL/general/style.css +232 -0
  626. data/ext/p7zip/DOC/MANUAL/general/thanks.htm +43 -0
  627. data/ext/p7zip/DOC/MANUAL/start.htm +37 -0
  628. data/ext/p7zip/DOC/MANUAL/style.css +232 -0
  629. data/ext/p7zip/DOC/Methods.txt +158 -0
  630. data/ext/p7zip/{DOCS → DOC}/copying.txt +9 -11
  631. data/ext/p7zip/DOC/lzma.txt +328 -0
  632. data/ext/p7zip/{DOCS → DOC}/readme.txt +42 -65
  633. data/ext/p7zip/{DOCS/history.txt → DOC/src-history.txt} +88 -2
  634. data/ext/p7zip/README +117 -91
  635. data/ext/p7zip/TODO +0 -2
  636. data/ext/p7zip/install.sh +31 -29
  637. data/ext/p7zip/last_error +1 -0
  638. data/ext/p7zip/makefile +29 -125
  639. data/ext/p7zip/makefile.afl +23 -0
  640. data/ext/p7zip/makefile.aix_gcc +5 -4
  641. data/ext/p7zip/makefile.android_arm +49 -0
  642. data/ext/p7zip/makefile.beos +5 -4
  643. data/ext/p7zip/makefile.common +150 -0
  644. data/ext/p7zip/makefile.crc32 +3 -3
  645. data/ext/p7zip/makefile.cygwin +5 -4
  646. data/ext/p7zip/makefile.cygwin64 +21 -0
  647. data/ext/p7zip/makefile.cygwin64_asm +22 -0
  648. data/ext/p7zip/makefile.cygwin_asm +6 -4
  649. data/ext/p7zip/makefile.cygwin_clang +21 -0
  650. data/ext/p7zip/makefile.cygwin_clang_asm +23 -0
  651. data/ext/p7zip/{makefile.djgpp_old → makefile.djgpp} +5 -4
  652. data/ext/p7zip/makefile.djgpp_watt +7 -5
  653. data/ext/p7zip/makefile.freebsd5 +5 -4
  654. data/ext/p7zip/{makefile.freebsd6 → makefile.freebsd6+} +6 -5
  655. data/ext/p7zip/makefile.glb +27 -18
  656. data/ext/p7zip/makefile.gprof +3 -2
  657. data/ext/p7zip/makefile.haiku +19 -0
  658. data/ext/p7zip/makefile.hpux-acc +3 -2
  659. data/ext/p7zip/makefile.hpux-acc_64 +3 -2
  660. data/ext/p7zip/makefile.hpux-gcc +5 -4
  661. data/ext/p7zip/makefile.linux_amd64 +5 -4
  662. data/ext/p7zip/makefile.linux_amd64_asm +12 -5
  663. data/ext/p7zip/makefile.linux_amd64_asm_icc +5 -3
  664. data/ext/p7zip/makefile.linux_amd64_sanitizer +26 -0
  665. data/ext/p7zip/makefile.linux_any_cpu +5 -4
  666. data/ext/p7zip/makefile.linux_any_cpu_gcc_4.X +7 -4
  667. data/ext/p7zip/makefile.linux_clang_amd64_asm +25 -0
  668. data/ext/p7zip/makefile.linux_clang_amd64_asm_sanitize +27 -0
  669. data/ext/p7zip/makefile.linux_cross_aarch64 +25 -0
  670. data/ext/p7zip/makefile.linux_cross_arm +7 -4
  671. data/ext/p7zip/makefile.linux_cross_djgpp +27 -0
  672. data/ext/p7zip/makefile.linux_cross_m68k +26 -0
  673. data/ext/p7zip/makefile.linux_cross_mipsel +27 -0
  674. data/ext/p7zip/makefile.linux_cross_ppc +25 -0
  675. data/ext/p7zip/makefile.linux_cross_ppc64 +25 -0
  676. data/ext/p7zip/makefile.linux_cross_ppc64le +25 -0
  677. data/ext/p7zip/makefile.linux_cross_s390x +25 -0
  678. data/ext/p7zip/makefile.linux_cross_sparc64 +25 -0
  679. data/ext/p7zip/makefile.linux_gcc6_sanitize +23 -0
  680. data/ext/p7zip/makefile.linux_gcc_2.95_no_need_for_libstdc +6 -4
  681. data/ext/p7zip/makefile.linux_other +6 -5
  682. data/ext/p7zip/makefile.linux_s390x +5 -4
  683. data/ext/p7zip/{makefile.machine_base → makefile.linux_scan-build} +5 -4
  684. data/ext/p7zip/makefile.linux_valgrind +25 -0
  685. data/ext/p7zip/{makefile.linux_clang_amd64 → makefile.linux_x32} +6 -5
  686. data/ext/p7zip/makefile.linux_x86_asm_gcc_4.X +10 -5
  687. data/ext/p7zip/makefile.linux_x86_asm_gcc_4.X_fltk +8 -4
  688. data/ext/p7zip/makefile.linux_x86_asm_gcc_mudflap_4.X +4 -2
  689. data/ext/p7zip/makefile.linux_x86_asm_icc +4 -2
  690. data/ext/p7zip/makefile.linux_x86_icc +3 -2
  691. data/ext/p7zip/makefile.macosx_arm64 +17 -0
  692. data/ext/p7zip/{makefile.macosx_32bits → makefile.macosx_gcc_32bits} +3 -2
  693. data/ext/p7zip/{makefile.macosx_32bits_asm → makefile.macosx_gcc_32bits_asm} +5 -3
  694. data/ext/p7zip/{makefile.macosx_32bits_ppc → makefile.macosx_gcc_32bits_ppc} +3 -2
  695. data/ext/p7zip/{makefile.macosx_64bits → makefile.macosx_gcc_64bits} +3 -2
  696. data/ext/p7zip/makefile.macosx_llvm_64bits +9 -3
  697. data/ext/p7zip/makefile.netbsd +5 -4
  698. data/ext/p7zip/makefile.netware_asm_gcc_3.X +6 -4
  699. data/ext/p7zip/makefile.oldmake +41 -130
  700. data/ext/p7zip/makefile.openbsd +7 -3
  701. data/ext/p7zip/makefile.openbsd_no_port +9 -5
  702. data/ext/p7zip/makefile.qnx_shared.bin +5 -4
  703. data/ext/p7zip/makefile.qnx_static +5 -4
  704. data/ext/p7zip/makefile.solaris_sparc_CC_32 +5 -4
  705. data/ext/p7zip/makefile.solaris_sparc_CC_64 +6 -4
  706. data/ext/p7zip/makefile.solaris_sparc_gcc +7 -6
  707. data/ext/p7zip/makefile.solaris_x86 +5 -4
  708. data/ext/p7zip/makefile.tru64 +5 -4
  709. data/ext/seven_zip_ruby/extconf.rb +92 -6
  710. data/ext/seven_zip_ruby/seven_zip_archive.cpp +40 -17
  711. data/ext/seven_zip_ruby/seven_zip_archive.h +1 -1
  712. data/ext/seven_zip_ruby/utils.cpp +267 -124
  713. data/ext/seven_zip_ruby/utils.h +2 -0
  714. data/lib/seven_zip_ruby/7z.dll +0 -0
  715. data/lib/seven_zip_ruby/7z.sfx +0 -0
  716. data/lib/seven_zip_ruby/7z64.dll +0 -0
  717. data/lib/seven_zip_ruby/7zCon.sfx +0 -0
  718. data/lib/seven_zip_ruby/seven_zip_reader.rb +16 -1
  719. data/lib/seven_zip_ruby/version.rb +1 -1
  720. data/p7zip/.gitignore +7 -0
  721. data/p7zip/README.txt +29 -0
  722. data/p7zip/extract.sh +134 -0
  723. data/spec/seven_zip_ruby_spec.rb +22 -13
  724. data/test/res/The Flying Spaghetti Monster.txt +3 -0
  725. data/test/res/The Three Little Pigs.txt +5 -0
  726. data/test/res/UTF_content.txt +3 -0
  727. data/test/res/test_reader_data.7z +0 -0
  728. data/test/res/test_reader_filename_cp932.7z +0 -0
  729. data/test/res/test_reader_files.7z +0 -0
  730. data/test/test_seven_zip_reader.rb +187 -0
  731. data/test/test_seven_zip_writer.rb +184 -0
  732. metadata +267 -219
  733. data/.github/workflows/test-and-release.yml +0 -43
  734. data/ext/C/Types.h +0 -254
  735. data/ext/CPP/7zip/Archive/IArchive.h +0 -234
  736. data/ext/CPP/7zip/IDecl.h +0 -15
  737. data/ext/CPP/7zip/IPassword.h +0 -24
  738. data/ext/CPP/7zip/IProgress.h +0 -33
  739. data/ext/CPP/7zip/IStream.h +0 -58
  740. data/ext/CPP/7zip/PropID.h +0 -76
  741. data/ext/CPP/Common/MyCom.h +0 -225
  742. data/ext/CPP/Common/MyGuidDef.h +0 -54
  743. data/ext/CPP/Common/MyInitGuid.h +0 -22
  744. data/ext/CPP/Common/MyUnknown.h +0 -13
  745. data/ext/CPP/Common/MyWindows.h +0 -204
  746. data/ext/CPP/Common/Types.h +0 -11
  747. data/ext/CPP/Windows/PropVariant.h +0 -56
  748. data/ext/CPP/include_windows/basetyps.h +0 -19
  749. data/ext/CPP/include_windows/tchar.h +0 -89
  750. data/ext/CPP/include_windows/windows.h +0 -194
  751. data/ext/p7zip/Asm/x64/7zCrcT8U.asm +0 -103
  752. data/ext/p7zip/Asm/x86/7zCrcT8U.asm +0 -101
  753. data/ext/p7zip/C/7zCrcT8.c +0 -43
  754. data/ext/p7zip/C/Alloc.back3 +0 -238
  755. data/ext/p7zip/C/Alloc.c.back +0 -243
  756. data/ext/p7zip/C/Alloc.c.back2 +0 -222
  757. data/ext/p7zip/C/LzmaUtil/Lzma86Dec.h +0 -51
  758. data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderOutStream.cpp +0 -149
  759. data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderOutStream.h +0 -58
  760. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHeader.cpp +0 -24
  761. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHeader.h +0 -28
  762. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmRegister.cpp +0 -13
  763. data/ext/p7zip/CPP/7zip/Archive/Com/ComHandler.cpp +0 -239
  764. data/ext/p7zip/CPP/7zip/Archive/Com/ComHandler.h +0 -28
  765. data/ext/p7zip/CPP/7zip/Archive/Com/ComIn.cpp +0 -389
  766. data/ext/p7zip/CPP/7zip/Archive/Com/ComIn.h +0 -119
  767. data/ext/p7zip/CPP/7zip/Archive/Com/ComRegister.cpp +0 -13
  768. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2MT.cpp +0 -240
  769. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2MT.h +0 -80
  770. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2ST.cpp +0 -239
  771. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2ST.h +0 -88
  772. data/ext/p7zip/CPP/7zip/Archive/Common/CrossThreadProgress.cpp +0 -15
  773. data/ext/p7zip/CPP/7zip/Archive/Common/CrossThreadProgress.h +0 -37
  774. data/ext/p7zip/CPP/7zip/Archive/DebHandler.cpp +0 -413
  775. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsHandler.cpp +0 -243
  776. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsHandler.h +0 -26
  777. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsIn.cpp +0 -480
  778. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsIn.h +0 -154
  779. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsRegister.cpp +0 -13
  780. data/ext/p7zip/CPP/7zip/Archive/Rar/RarHeader.cpp +0 -21
  781. data/ext/p7zip/CPP/7zip/Archive/Rar/RarIn.cpp +0 -478
  782. data/ext/p7zip/CPP/7zip/Archive/Rar/RarIn.h +0 -123
  783. data/ext/p7zip/CPP/7zip/Archive/Rar/RarItem.cpp +0 -55
  784. data/ext/p7zip/CPP/7zip/Archive/Rar/RarRegister.cpp +0 -13
  785. data/ext/p7zip/CPP/7zip/Archive/Rar/RarVolumeInStream.cpp +0 -78
  786. data/ext/p7zip/CPP/7zip/Archive/Rar/RarVolumeInStream.h +0 -49
  787. data/ext/p7zip/CPP/7zip/Archive/Udf/UdfRegister.cpp +0 -13
  788. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHeader.cpp +0 -36
  789. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipItemEx.h +0 -34
  790. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7zFM.txt +0 -163
  791. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7zG.txt +0 -131
  792. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7za.txt +0 -253
  793. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_ALL.txt +0 -32
  794. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_Format7zFree.txt +0 -290
  795. data/ext/p7zip/CPP/7zip/CMAKE/generate.sh +0 -37
  796. data/ext/p7zip/CPP/7zip/CMAKE/generate_xcode.sh +0 -32
  797. data/ext/p7zip/CPP/7zip/Common/LockedStream.cpp +0 -23
  798. data/ext/p7zip/CPP/7zip/Common/LockedStream.h +0 -38
  799. data/ext/p7zip/CPP/7zip/Compress/ArjDecoder1.cpp +0 -309
  800. data/ext/p7zip/CPP/7zip/Compress/ArjDecoder1.h +0 -98
  801. data/ext/p7zip/CPP/7zip/Compress/ArjDecoder2.cpp +0 -90
  802. data/ext/p7zip/CPP/7zip/Compress/ArjDecoder2.h +0 -59
  803. data/ext/p7zip/CPP/7zip/Compress/BranchCoder.cpp +0 -19
  804. data/ext/p7zip/CPP/7zip/Compress/BranchCoder.h +0 -44
  805. data/ext/p7zip/CPP/7zip/Compress/DllExports.cpp +0 -39
  806. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp +0 -531
  807. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBench.cpp +0 -1018
  808. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBench.h +0 -48
  809. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.cpp +0 -311
  810. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.h +0 -20
  811. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/makefile +0 -173
  812. data/ext/p7zip/CPP/7zip/Compress/Lzx86Converter.cpp +0 -90
  813. data/ext/p7zip/CPP/7zip/Compress/Lzx86Converter.h +0 -46
  814. data/ext/p7zip/CPP/7zip/Compress/RangeCoder.h +0 -205
  815. data/ext/p7zip/CPP/7zip/Compress/RangeCoderBit.h +0 -114
  816. data/ext/p7zip/CPP/7zip/Crypto/Sha1.cpp +0 -229
  817. data/ext/p7zip/CPP/7zip/Crypto/Sha1.h +0 -68
  818. data/ext/p7zip/CPP/7zip/PREMAKE/generate.sh +0 -18
  819. data/ext/p7zip/CPP/7zip/PREMAKE/premake4.lua +0 -263
  820. data/ext/p7zip/CPP/7zip/QMAKE/7ZA/7ZA.pro +0 -228
  821. data/ext/p7zip/CPP/7zip/QMAKE/7ZA/7ZA_osx.pro +0 -228
  822. data/ext/p7zip/CPP/7zip/QMAKE/test_emul/test_emul.pro +0 -26
  823. data/ext/p7zip/CPP/7zip/TEST/TestUI/TestUI.cpp +0 -560
  824. data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile +0 -33
  825. data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile.depend +0 -577
  826. data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile.list +0 -16
  827. data/ext/p7zip/CPP/Common/Buffer.h +0 -77
  828. data/ext/p7zip/CPP/Common/Types.h +0 -11
  829. data/ext/p7zip/CPP/Windows/COM.cpp +0 -37
  830. data/ext/p7zip/CPP/Windows/COM.h +0 -69
  831. data/ext/p7zip/CPP/Windows/Clipboard.cpp +0 -160
  832. data/ext/p7zip/CPP/Windows/Clipboard.h +0 -28
  833. data/ext/p7zip/CPP/Windows/CommonDialog.h +0 -19
  834. data/ext/p7zip/CPP/Windows/Control/ComboBox.h +0 -82
  835. data/ext/p7zip/CPP/Windows/Control/Controls.cpp +0 -515
  836. data/ext/p7zip/CPP/Windows/Control/Dialog.cpp +0 -560
  837. data/ext/p7zip/CPP/Windows/Control/Dialog.h +0 -179
  838. data/ext/p7zip/CPP/Windows/Control/DialogImpl.h +0 -73
  839. data/ext/p7zip/CPP/Windows/Control/Edit.h +0 -24
  840. data/ext/p7zip/CPP/Windows/Control/ListView.h +0 -164
  841. data/ext/p7zip/CPP/Windows/Control/ProgressBar.h +0 -34
  842. data/ext/p7zip/CPP/Windows/Control/Static.h +0 -23
  843. data/ext/p7zip/CPP/Windows/Control/StatusBar.h +0 -56
  844. data/ext/p7zip/CPP/Windows/Control/Window2.cpp +0 -211
  845. data/ext/p7zip/CPP/Windows/Control/Window2.h +0 -111
  846. data/ext/p7zip/CPP/Windows/DLL.cpp +0 -193
  847. data/ext/p7zip/CPP/Windows/DLL.h +0 -48
  848. data/ext/p7zip/CPP/Windows/Error.cpp +0 -58
  849. data/ext/p7zip/CPP/Windows/Error.h +0 -33
  850. data/ext/p7zip/CPP/Windows/Menu.h +0 -4
  851. data/ext/p7zip/CPP/Windows/PropVariantConversions.cpp +0 -142
  852. data/ext/p7zip/CPP/Windows/PropVariantConversions.h +0 -14
  853. data/ext/p7zip/CPP/Windows/Registry.cpp +0 -313
  854. data/ext/p7zip/CPP/Windows/Registry.h +0 -113
  855. data/ext/p7zip/CPP/Windows/ResourceString.h +0 -22
  856. data/ext/p7zip/CPP/Windows/Shell.h +0 -21
  857. data/ext/p7zip/CPP/Windows/Time.cpp +0 -88
  858. data/ext/p7zip/CPP/Windows/Time.h +0 -21
  859. data/ext/p7zip/CPP/Windows/Window.cpp +0 -101
  860. data/ext/p7zip/CPP/Windows/Window.h +0 -43
  861. data/ext/p7zip/CPP/myWindows/initguid.h +0 -4
  862. data/ext/p7zip/CPP/myWindows/makefile +0 -21
  863. data/ext/p7zip/CPP/myWindows/makefile.depend +0 -32
  864. data/ext/p7zip/CPP/myWindows/makefile.list +0 -28
  865. data/ext/p7zip/CPP/myWindows/myAddExeFlag.cpp +0 -20
  866. data/ext/p7zip/CPP/myWindows/myGetTickCount.cpp +0 -8
  867. data/ext/p7zip/CPP/myWindows/mySplitCommandLine.cpp +0 -82
  868. data/ext/p7zip/CPP/myWindows/test_emul.cpp +0 -745
  869. data/ext/p7zip/CPP/myWindows/wine_GetXXXDefaultLangID.cpp +0 -741
  870. data/ext/p7zip/DOCS/MANUAL/switches/charset.htm +0 -49
  871. data/ext/p7zip/DOCS/Methods.txt +0 -152
  872. data/ext/p7zip/DOCS/lzma.txt +0 -598
  873. data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/ChangeLog +0 -41
  874. data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/readme +0 -21
  875. data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/readme.u7z +0 -30
  876. data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/u7z +0 -133
  877. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/README +0 -21
  878. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/check/check.sh +0 -117
  879. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/check/files.tar +0 -0
  880. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/man1/p7zip.1 +0 -33
  881. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/p7zip +0 -144
  882. data/ext/p7zip/contrib/qnx630sp3/qnx630sp3-shared +0 -14
  883. data/ext/p7zip/contrib/qnx630sp3/qnx630sp3-static +0 -10
  884. data/ext/p7zip/integration_context_menu.txt +0 -51
  885. data/ext/p7zip/makefile.rules +0 -661
  886. /data/ext/p7zip/{DOCS → DOC}/7zFormat.txt +0 -0
  887. /data/ext/p7zip/{DOCS → DOC}/unRarLicense.txt +0 -0
@@ -2,16 +2,39 @@
2
2
 
3
3
  #include "StdAfx.h"
4
4
 
5
- #include "Common/IntToString.h"
6
- #include "Common/UTFConvert.h"
5
+ // #include <stdio.h>
6
+
7
+ #include "../../../../C/CpuArch.h"
8
+
9
+ #include "../../../Common/IntToString.h"
10
+ #include "../../../Common/UTFConvert.h"
7
11
 
8
12
  #include "../../Common/LimitedStreams.h"
9
13
 
10
14
  #include "ChmIn.h"
11
15
 
16
+ #define Get16(p) GetUi16(p)
17
+ #define Get32(p) GetUi32(p)
18
+ #define Get64(p) GetUi64(p)
19
+
12
20
  namespace NArchive {
13
21
  namespace NChm {
14
22
 
23
+ static const UInt32 kSignature_ITSP = 0x50535449;
24
+ static const UInt32 kSignature_PMGL = 0x4C474D50;
25
+ static const UInt32 kSignature_LZXC = 0x43585A4C;
26
+
27
+ static const UInt32 kSignature_IFCM = 0x4D434649;
28
+ static const UInt32 kSignature_AOLL = 0x4C4C4F41;
29
+ static const UInt32 kSignature_CAOL = 0x4C4F4143;
30
+
31
+ static const UInt32 kSignature_ITSF = 0x46535449;
32
+ static const UInt32 kSignature_ITOL = 0x4C4F5449;
33
+ static const UInt32 kSignature_ITLS = 0x534C5449;
34
+
35
+ struct CEnexpectedEndException {};
36
+ struct CHeaderErrorException {};
37
+
15
38
  // define CHM_LOW, if you want to see low level items
16
39
  // #define CHM_LOW
17
40
 
@@ -31,9 +54,9 @@ static bool AreGuidsEqual(REFGUID g1, REFGUID g2)
31
54
  return true;
32
55
  }
33
56
 
34
- static char GetHex(Byte value)
57
+ static char GetHex(unsigned v)
35
58
  {
36
- return (char)((value < 10) ? ('0' + value) : ('A' + (value - 10)));
59
+ return (char)((v < 10) ? ('0' + v) : ('A' + (v - 10)));
37
60
  }
38
61
 
39
62
  static void PrintByte(Byte b, AString &s)
@@ -90,10 +113,10 @@ UString CMethodInfo::GetName() const
90
113
  UString s;
91
114
  if (IsLzx())
92
115
  {
93
- s = L"LZX:";
94
- wchar_t temp[16];
116
+ s.SetFromAscii("LZX:");
117
+ char temp[16];
95
118
  ConvertUInt32ToString(LzxInfo.GetNumDictBits(), temp);
96
- s += temp;
119
+ s.AddAscii(temp);
97
120
  }
98
121
  else
99
122
  {
@@ -103,10 +126,10 @@ UString CMethodInfo::GetName() const
103
126
  else
104
127
  {
105
128
  s2 = GetGuidString();
106
- if (ControlData.GetCapacity() > 0)
129
+ if (ControlData.Size() > 0)
107
130
  {
108
131
  s2 += ':';
109
- for (size_t i = 0; i < ControlData.GetCapacity(); i++)
132
+ for (size_t i = 0; i < ControlData.Size(); i++)
110
133
  PrintByte(ControlData[i], s2);
111
134
  }
112
135
  }
@@ -130,12 +153,12 @@ UString CSectionInfo::GetMethodName() const
130
153
  UString temp;
131
154
  if (ConvertUTF8ToUnicode(Name, temp))
132
155
  s += temp;
133
- s += L": ";
156
+ s.AddAscii(": ");
134
157
  }
135
- for (int i = 0; i < Methods.Size(); i++)
158
+ FOR_VECTOR (i, Methods)
136
159
  {
137
160
  if (i != 0)
138
- s += L' ';
161
+ s.Add_Space();
139
162
  s += Methods[i].GetName();
140
163
  }
141
164
  return s;
@@ -145,50 +168,48 @@ Byte CInArchive::ReadByte()
145
168
  {
146
169
  Byte b;
147
170
  if (!_inBuffer.ReadByte(b))
148
- throw 1;
171
+ throw CEnexpectedEndException();
149
172
  return b;
150
173
  }
151
174
 
152
175
  void CInArchive::Skip(size_t size)
153
176
  {
154
- while (size-- != 0)
155
- ReadByte();
177
+ if (_inBuffer.Skip(size) != size)
178
+ throw CEnexpectedEndException();
156
179
  }
157
180
 
158
181
  void CInArchive::ReadBytes(Byte *data, UInt32 size)
159
182
  {
160
- for (UInt32 i = 0; i < size; i++)
161
- data[i] = ReadByte();
183
+ if (_inBuffer.ReadBytes(data, size) != size)
184
+ throw CEnexpectedEndException();
162
185
  }
163
186
 
164
187
  UInt16 CInArchive::ReadUInt16()
165
188
  {
166
- UInt16 value = 0;
167
- for (int i = 0; i < 2; i++)
168
- value |= ((UInt16)(ReadByte()) << (8 * i));
169
- return value;
189
+ Byte b0, b1;
190
+ if (!_inBuffer.ReadByte(b0)) throw CEnexpectedEndException();
191
+ if (!_inBuffer.ReadByte(b1)) throw CEnexpectedEndException();
192
+ return (UInt16)(((UInt16)b1 << 8) | b0);
170
193
  }
171
194
 
172
195
  UInt32 CInArchive::ReadUInt32()
173
196
  {
174
- UInt32 value = 0;
175
- for (int i = 0; i < 4; i++)
176
- value |= ((UInt32)(ReadByte()) << (8 * i));
177
- return value;
197
+ Byte p[4];
198
+ ReadBytes(p, 4);
199
+ return Get32(p);
178
200
  }
179
201
 
180
202
  UInt64 CInArchive::ReadUInt64()
181
203
  {
182
- UInt64 value = 0;
183
- for (int i = 0; i < 8; i++)
184
- value |= ((UInt64)(ReadByte()) << (8 * i));
185
- return value;
204
+ Byte p[8];
205
+ ReadBytes(p, 8);
206
+ return Get64(p);
186
207
  }
187
208
 
188
209
  UInt64 CInArchive::ReadEncInt()
189
210
  {
190
- UInt64 val = 0;;
191
- for (int i = 0; i < 10; i++)
211
+ UInt64 val = 0;
212
+ for (int i = 0; i < 9; i++)
192
213
  {
193
214
  Byte b = ReadByte();
194
215
  val |= (b & 0x7F);
@@ -196,7 +217,7 @@ UInt64 CInArchive::ReadEncInt()
196
217
  return val;
197
218
  val <<= 7;
198
219
  }
199
- throw 1;
220
+ throw CHeaderErrorException();
200
221
  }
201
222
 
202
223
  void CInArchive::ReadGUID(GUID &g)
@@ -207,25 +228,20 @@ void CInArchive::ReadGUID(GUID &g)
207
228
  ReadBytes(g.Data4, 8);
208
229
  }
209
230
 
210
- void CInArchive::ReadString(int size, AString &s)
231
+ void CInArchive::ReadString(unsigned size, AString &s)
211
232
  {
212
233
  s.Empty();
213
- while(size-- != 0)
234
+ if (size != 0)
214
235
  {
215
- char c = (char)ReadByte();
216
- if (c == 0)
217
- {
218
- Skip(size);
219
- return;
220
- }
221
- s += c;
236
+ ReadBytes((Byte *)s.GetBuf(size), size);
237
+ s.ReleaseBuf_CalcLen(size);
222
238
  }
223
239
  }
224
240
 
225
- void CInArchive::ReadUString(int size, UString &s)
241
+ void CInArchive::ReadUString(unsigned size, UString &s)
226
242
  {
227
243
  s.Empty();
228
- while(size-- != 0)
244
+ while (size-- != 0)
229
245
  {
230
246
  wchar_t c = ReadUInt16();
231
247
  if (c == 0)
@@ -244,6 +260,7 @@ HRESULT CInArchive::ReadChunk(IInStream *inStream, UInt64 pos, UInt64 size)
244
260
  CMyComPtr<ISequentialInStream> limitedStream(streamSpec);
245
261
  streamSpec->SetStream(inStream);
246
262
  streamSpec->Init(size);
263
+ m_InStreamRef = limitedStream;
247
264
  _inBuffer.SetStream(limitedStream);
248
265
  _inBuffer.Init();
249
266
  return S_OK;
@@ -252,10 +269,10 @@ HRESULT CInArchive::ReadChunk(IInStream *inStream, UInt64 pos, UInt64 size)
252
269
  HRESULT CInArchive::ReadDirEntry(CDatabase &database)
253
270
  {
254
271
  CItem item;
255
- UInt64 nameLength = ReadEncInt();
256
- if (nameLength == 0 || nameLength >= 0x10000000)
272
+ UInt64 nameLen = ReadEncInt();
273
+ if (nameLen == 0 || nameLen > (1 << 13))
257
274
  return S_FALSE;
258
- ReadString((int)nameLength, item.Name);
275
+ ReadString((unsigned)nameLen, item.Name);
259
276
  item.Section = ReadEncInt();
260
277
  item.Offset = ReadEncInt();
261
278
  item.Size = ReadEncInt();
@@ -268,9 +285,14 @@ HRESULT CInArchive::OpenChm(IInStream *inStream, CDatabase &database)
268
285
  UInt32 headerSize = ReadUInt32();
269
286
  if (headerSize != 0x60)
270
287
  return S_FALSE;
288
+ database.PhySize = headerSize;
289
+
271
290
  UInt32 unknown1 = ReadUInt32();
272
291
  if (unknown1 != 0 && unknown1 != 1) // it's 0 in one .sll file
273
292
  return S_FALSE;
293
+
294
+ IsArc = true;
295
+
274
296
  /* UInt32 timeStamp = */ ReadUInt32();
275
297
  // Considered as a big-endian DWORD, it appears to contain seconds (MSB) and
276
298
  // fractional seconds (second byte).
@@ -280,37 +302,39 @@ HRESULT CInArchive::OpenChm(IInStream *inStream, CDatabase &database)
280
302
  GUID g;
281
303
  ReadGUID(g); // {7C01FD10-7BAA-11D0-9E0C-00A0-C922-E6EC}
282
304
  ReadGUID(g); // {7C01FD11-7BAA-11D0-9E0C-00A0-C922-E6EC}
283
- const int kNumSections = 2;
305
+ const unsigned kNumSections = 2;
284
306
  UInt64 sectionOffsets[kNumSections];
285
307
  UInt64 sectionSizes[kNumSections];
286
- int i;
308
+ unsigned i;
287
309
  for (i = 0; i < kNumSections; i++)
288
310
  {
289
311
  sectionOffsets[i] = ReadUInt64();
290
312
  sectionSizes[i] = ReadUInt64();
313
+ UInt64 end = sectionOffsets[i] + sectionSizes[i];
314
+ database.UpdatePhySize(end);
291
315
  }
292
316
  // if (chmVersion == 3)
293
317
  database.ContentOffset = ReadUInt64();
294
318
  /*
295
319
  else
296
- database.ContentOffset = _startPosition + 0x58
320
+ database.ContentOffset = database.StartPosition + 0x58
297
321
  */
298
322
 
299
- /*
300
323
  // Section 0
301
324
  ReadChunk(inStream, sectionOffsets[0], sectionSizes[0]);
302
- if (sectionSizes[0] != 0x18)
325
+ if (sectionSizes[0] < 0x18)
326
+ return S_FALSE;
327
+ if (ReadUInt32() != 0x01FE)
303
328
  return S_FALSE;
304
- ReadUInt32(); // unknown: 01FE
305
329
  ReadUInt32(); // unknown: 0
306
330
  UInt64 fileSize = ReadUInt64();
331
+ database.UpdatePhySize(fileSize);
307
332
  ReadUInt32(); // unknown: 0
308
333
  ReadUInt32(); // unknown: 0
309
- */
310
334
 
311
335
  // Section 1: The Directory Listing
312
336
  ReadChunk(inStream, sectionOffsets[1], sectionSizes[1]);
313
- if (ReadUInt32() != NHeader::kItspSignature)
337
+ if (ReadUInt32() != kSignature_ITSP)
314
338
  return S_FALSE;
315
339
  if (ReadUInt32() != 1) // version
316
340
  return S_FALSE;
@@ -340,13 +364,13 @@ HRESULT CInArchive::OpenChm(IInStream *inStream, CDatabase &database)
340
364
  for (UInt32 ci = 0; ci < numDirChunks; ci++)
341
365
  {
342
366
  UInt64 chunkPos = _inBuffer.GetProcessedSize();
343
- if (ReadUInt32() == NHeader::kPmglSignature)
367
+ if (ReadUInt32() == kSignature_PMGL)
344
368
  {
345
369
  // The quickref area is written backwards from the end of the chunk.
346
370
  // One quickref entry exists for every n entries in the file, where n
347
371
  // is calculated as 1 + (1 << quickref density). So for density = 2, n = 5.
348
372
 
349
- UInt32 quickrefLength = ReadUInt32(); // Length of free space and/or quickref area at end of directory chunk
373
+ UInt32 quickrefLength = ReadUInt32(); // Len of free space and/or quickref area at end of directory chunk
350
374
  if (quickrefLength > dirChunkSize || quickrefLength < 2)
351
375
  return S_FALSE;
352
376
  ReadUInt32(); // Always 0
@@ -354,7 +378,8 @@ HRESULT CInArchive::OpenChm(IInStream *inStream, CDatabase &database)
354
378
  // directory in sequence (-1 if this is the first listing chunk)
355
379
  ReadUInt32(); // Chunk number of next listing chunk when reading
356
380
  // directory in sequence (-1 if this is the last listing chunk)
357
- int numItems = 0;
381
+ unsigned numItems = 0;
382
+
358
383
  for (;;)
359
384
  {
360
385
  UInt64 offset = _inBuffer.GetProcessedSize() - chunkPos;
@@ -366,9 +391,16 @@ HRESULT CInArchive::OpenChm(IInStream *inStream, CDatabase &database)
366
391
  RINOK(ReadDirEntry(database));
367
392
  numItems++;
368
393
  }
394
+
369
395
  Skip(quickrefLength - 2);
370
- if (ReadUInt16() != numItems)
371
- return S_FALSE;
396
+
397
+ unsigned rrr = ReadUInt16();
398
+ if (rrr != numItems)
399
+ {
400
+ // Lazarus 9-26-2 chm contains 0 here.
401
+ if (rrr != 0)
402
+ return S_FALSE;
403
+ }
372
404
  }
373
405
  else
374
406
  Skip(dirChunkSize - 4);
@@ -383,10 +415,13 @@ HRESULT CInArchive::OpenHelp2(IInStream *inStream, CDatabase &database)
383
415
  if (ReadUInt32() != 0x28) // Location of header section table
384
416
  return S_FALSE;
385
417
  UInt32 numHeaderSections = ReadUInt32();
386
- const int kNumHeaderSectionsMax = 5;
418
+ const unsigned kNumHeaderSectionsMax = 5;
387
419
  if (numHeaderSections != kNumHeaderSectionsMax)
388
420
  return S_FALSE;
389
- ReadUInt32(); // Length of post-header table
421
+
422
+ IsArc = true;
423
+
424
+ ReadUInt32(); // Len of post-header table
390
425
  GUID g;
391
426
  ReadGUID(g); // {0A9007C1-4076-11D3-8789-0000F8105754}
392
427
 
@@ -398,6 +433,8 @@ HRESULT CInArchive::OpenHelp2(IInStream *inStream, CDatabase &database)
398
433
  {
399
434
  sectionOffsets[i] = ReadUInt64();
400
435
  sectionSizes[i] = ReadUInt64();
436
+ UInt64 end = sectionOffsets[i] + sectionSizes[i];
437
+ database.UpdatePhySize(end);
401
438
  }
402
439
 
403
440
  // Post-Header
@@ -436,11 +473,11 @@ HRESULT CInArchive::OpenHelp2(IInStream *inStream, CDatabase &database)
436
473
  ReadUInt32(); // $20000 (Same as field following chunk size in directory index)
437
474
 
438
475
  ReadUInt64(); // 0 (unknown)
439
- if (ReadUInt32() != NHeader::kCaolSignature)
476
+ if (ReadUInt32() != kSignature_CAOL)
440
477
  return S_FALSE;
441
478
  if (ReadUInt32() != 2) // (Most likely a version number)
442
479
  return S_FALSE;
443
- UInt32 caolLength = ReadUInt32(); // $50 (Length of the CAOL section, which includes the ITSF section)
480
+ UInt32 caolLength = ReadUInt32(); // $50 (Len of the CAOL section, which includes the ITSF section)
444
481
  if (caolLength >= 0x2C)
445
482
  {
446
483
  /* UInt32 c7 = */ ReadUInt16(); // Unknown. Remains the same when identical files are built.
@@ -458,13 +495,15 @@ HRESULT CInArchive::OpenHelp2(IInStream *inStream, CDatabase &database)
458
495
  ReadUInt32(); // 0 (Unknown)
459
496
  if (caolLength == 0x2C)
460
497
  {
461
- database.ContentOffset = 0;
498
+ // fprintf(stdout, "\n !!!NewFormat\n");
499
+ // fflush(stdout);
500
+ database.ContentOffset = 0; // maybe we must add database.StartPosition here?
462
501
  database.NewFormat = true;
463
502
  }
464
503
  else if (caolLength == 0x50)
465
504
  {
466
505
  ReadUInt32(); // 0 (Unknown)
467
- if (ReadUInt32() != NHeader::kItsfSignature)
506
+ if (ReadUInt32() != kSignature_ITSF)
468
507
  return S_FALSE;
469
508
  if (ReadUInt32() != 4) // $4 (Version number -- CHM uses 3)
470
509
  return S_FALSE;
@@ -473,7 +512,7 @@ HRESULT CInArchive::OpenHelp2(IInStream *inStream, CDatabase &database)
473
512
  UInt32 unknown = ReadUInt32();
474
513
  if (unknown != 0 && unknown != 1) // = 0 for some HxW files, 1 in other cases;
475
514
  return S_FALSE;
476
- database.ContentOffset = _startPosition + ReadUInt64();
515
+ database.ContentOffset = database.StartPosition + ReadUInt64();
477
516
  /* UInt32 timeStamp = */ ReadUInt32();
478
517
  // A timestamp of some sort.
479
518
  // Considered as a big-endian DWORD, it appears to contain
@@ -486,21 +525,21 @@ HRESULT CInArchive::OpenHelp2(IInStream *inStream, CDatabase &database)
486
525
  return S_FALSE;
487
526
  }
488
527
 
489
- /*
490
528
  // Section 0
491
- ReadChunk(inStream, _startPosition + sectionOffsets[0], sectionSizes[0]);
492
- if (sectionSizes[0] != 0x18)
529
+ ReadChunk(inStream, database.StartPosition + sectionOffsets[0], sectionSizes[0]);
530
+ if (sectionSizes[0] < 0x18)
531
+ return S_FALSE;
532
+ if (ReadUInt32() != 0x01FE)
493
533
  return S_FALSE;
494
- ReadUInt32(); // unknown: 01FE
495
534
  ReadUInt32(); // unknown: 0
496
535
  UInt64 fileSize = ReadUInt64();
536
+ database.UpdatePhySize(fileSize);
497
537
  ReadUInt32(); // unknown: 0
498
538
  ReadUInt32(); // unknown: 0
499
- */
500
539
 
501
540
  // Section 1: The Directory Listing
502
- ReadChunk(inStream, _startPosition + sectionOffsets[1], sectionSizes[1]);
503
- if (ReadUInt32() != NHeader::kIfcmSignature)
541
+ ReadChunk(inStream, database.StartPosition + sectionOffsets[1], sectionSizes[1]);
542
+ if (ReadUInt32() != kSignature_IFCM)
504
543
  return S_FALSE;
505
544
  if (ReadUInt32() != 1) // (probably a version number)
506
545
  return S_FALSE;
@@ -516,9 +555,9 @@ HRESULT CInArchive::OpenHelp2(IInStream *inStream, CDatabase &database)
516
555
  for (UInt32 ci = 0; ci < numDirChunks; ci++)
517
556
  {
518
557
  UInt64 chunkPos = _inBuffer.GetProcessedSize();
519
- if (ReadUInt32() == NHeader::kAollSignature)
558
+ if (ReadUInt32() == kSignature_AOLL)
520
559
  {
521
- UInt32 quickrefLength = ReadUInt32(); // Length of quickref area at end of directory chunk
560
+ UInt32 quickrefLength = ReadUInt32(); // Len of quickref area at end of directory chunk
522
561
  if (quickrefLength > dirChunkSize || quickrefLength < 2)
523
562
  return S_FALSE;
524
563
  ReadUInt64(); // Directory chunk number
@@ -533,7 +572,7 @@ HRESULT CInArchive::OpenHelp2(IInStream *inStream, CDatabase &database)
533
572
  ReadUInt32(); // 1 (unknown -- other values have also been seen here)
534
573
  ReadUInt32(); // 0 (unknown)
535
574
 
536
- int numItems = 0;
575
+ unsigned numItems = 0;
537
576
  for (;;)
538
577
  {
539
578
  UInt64 offset = _inBuffer.GetProcessedSize() - chunkPos;
@@ -544,17 +583,17 @@ HRESULT CInArchive::OpenHelp2(IInStream *inStream, CDatabase &database)
544
583
  break;
545
584
  if (database.NewFormat)
546
585
  {
547
- UInt16 nameLength = ReadUInt16();
548
- if (nameLength == 0)
586
+ UInt16 nameLen = ReadUInt16();
587
+ if (nameLen == 0)
549
588
  return S_FALSE;
550
589
  UString name;
551
- ReadUString((int)nameLength, name);
590
+ ReadUString((unsigned)nameLen, name);
552
591
  AString s;
553
592
  ConvertUnicodeToUTF8(name, s);
554
593
  Byte b = ReadByte();
555
- s += ' ';
594
+ s.Add_Space();
556
595
  PrintByte(b, s);
557
- s += ' ';
596
+ s.Add_Space();
558
597
  UInt64 len = ReadEncInt();
559
598
  // then number of items ?
560
599
  // then length ?
@@ -609,12 +648,15 @@ static const char *kTransformList = "List";
609
648
 
610
649
  static AString GetSectionPrefix(const AString &name)
611
650
  {
612
- return AString(kStorage) + name + AString("/");
651
+ AString s = kStorage;
652
+ s += name;
653
+ s += '/';
654
+ return s;
613
655
  }
614
656
 
615
657
  #define RINOZ(x) { int __tt = (x); if (__tt != 0) return __tt; }
616
658
 
617
- static int CompareFiles(const int *p1, const int *p2, void *param)
659
+ static int CompareFiles(const unsigned *p1, const unsigned *p2, void *param)
618
660
  {
619
661
  const CObjectVector<CItem> &items = *(const CObjectVector<CItem> *)param;
620
662
  const CItem &item1 = items[*p1];
@@ -625,22 +667,24 @@ static int CompareFiles(const int *p1, const int *p2, void *param)
625
667
  return -1;
626
668
  if (isDir2)
627
669
  {
628
- if (isDir1)
629
- return MyCompare(*p1, *p2);
630
- return 1;
670
+ if (!isDir1)
671
+ return 1;
672
+ }
673
+ else
674
+ {
675
+ RINOZ(MyCompare(item1.Section, item2.Section));
676
+ RINOZ(MyCompare(item1.Offset, item2.Offset));
677
+ RINOZ(MyCompare(item1.Size, item2.Size));
631
678
  }
632
- RINOZ(MyCompare(item1.Section, item2.Section));
633
- RINOZ(MyCompare(item1.Offset, item2.Offset));
634
- RINOZ(MyCompare(item1.Size, item2.Size));
635
679
  return MyCompare(*p1, *p2);
636
680
  }
637
681
 
638
682
  void CFilesDatabase::SetIndices()
639
683
  {
640
- for (int i = 0; i < Items.Size(); i++)
684
+ FOR_VECTOR (i, Items)
641
685
  {
642
686
  const CItem &item = Items[i];
643
- if (item.IsUserItem() && item.Name.Length() != 1)
687
+ if (item.IsUserItem() && item.Name.Len() != 1)
644
688
  Indices.Add(i);
645
689
  }
646
690
  }
@@ -654,7 +698,7 @@ bool CFilesDatabase::Check()
654
698
  {
655
699
  UInt64 maxPos = 0;
656
700
  UInt64 prevSection = 0;
657
- for(int i = 0; i < Indices.Size(); i++)
701
+ FOR_VECTOR (i, Indices)
658
702
  {
659
703
  const CItem &item = Items[Indices[i]];
660
704
  if (item.Section == 0 || item.IsDir())
@@ -674,6 +718,27 @@ bool CFilesDatabase::Check()
674
718
  return true;
675
719
  }
676
720
 
721
+ bool CFilesDatabase::CheckSectionRefs()
722
+ {
723
+ FOR_VECTOR (i, Indices)
724
+ {
725
+ const CItem &item = Items[Indices[i]];
726
+ if (item.Section == 0 || item.IsDir())
727
+ continue;
728
+ if (item.Section >= Sections.Size())
729
+ return false;
730
+ }
731
+ return true;
732
+ }
733
+
734
+ static int inline GetLog(UInt32 num)
735
+ {
736
+ for (int i = 0; i < 32; i++)
737
+ if (((UInt32)1 << i) == num)
738
+ return i;
739
+ return -1;
740
+ }
741
+
677
742
  HRESULT CInArchive::OpenHighLevel(IInStream *inStream, CFilesDatabase &database)
678
743
  {
679
744
  {
@@ -681,24 +746,24 @@ HRESULT CInArchive::OpenHighLevel(IInStream *inStream, CFilesDatabase &database)
681
746
  RINOK(DecompressStream(inStream, database, kNameList));
682
747
  /* UInt16 length = */ ReadUInt16();
683
748
  UInt16 numSections = ReadUInt16();
684
- for (int i = 0; i < numSections; i++)
749
+ for (unsigned i = 0; i < numSections; i++)
685
750
  {
686
751
  CSectionInfo section;
687
- UInt16 nameLength = ReadUInt16();
752
+ UInt16 nameLen = ReadUInt16();
688
753
  UString name;
689
- ReadUString(nameLength, name);
754
+ ReadUString(nameLen, name);
690
755
  if (ReadUInt16() != 0)
691
756
  return S_FALSE;
692
- if (!ConvertUnicodeToUTF8(name, section.Name))
693
- return S_FALSE;
757
+ ConvertUnicodeToUTF8(name, section.Name);
758
+ // if (!ConvertUnicodeToUTF8(name, section.Name)) return S_FALSE;
694
759
  database.Sections.Add(section);
695
760
  }
696
761
  }
697
762
 
698
- int i;
699
- for (i = 1; i < database.Sections.Size(); i++)
763
+ unsigned si;
764
+ for (si = 1; si < database.Sections.Size(); si++)
700
765
  {
701
- CSectionInfo &section = database.Sections[i];
766
+ CSectionInfo &section = database.Sections[si];
702
767
  AString sectionPrefix = GetSectionPrefix(section.Name);
703
768
  {
704
769
  // Content
@@ -716,10 +781,10 @@ HRESULT CInArchive::OpenHighLevel(IInStream *inStream, CFilesDatabase &database)
716
781
  RINOK(DecompressStream(inStream, database, transformPrefix + kTransformList));
717
782
  if ((_chunkSize & 0xF) != 0)
718
783
  return S_FALSE;
719
- int numGuids = (int)(_chunkSize / 0x10);
784
+ unsigned numGuids = (unsigned)(_chunkSize / 0x10);
720
785
  if (numGuids < 1)
721
786
  return S_FALSE;
722
- for (int i = 0; i < numGuids; i++)
787
+ for (unsigned i = 0; i < numGuids; i++)
723
788
  {
724
789
  CMethodInfo method;
725
790
  ReadGUID(method.Guid);
@@ -736,7 +801,8 @@ HRESULT CInArchive::OpenHighLevel(IInStream *inStream, CFilesDatabase &database)
736
801
  {
737
802
  // Control Data
738
803
  RINOK(DecompressStream(inStream, database, sectionPrefix + kControlData));
739
- for (int mi = 0; mi < section.Methods.Size(); mi++)
804
+
805
+ FOR_VECTOR (mi, section.Methods)
740
806
  {
741
807
  CMethodInfo &method = section.Methods[mi];
742
808
  UInt32 numDWORDS = ReadUInt32();
@@ -744,33 +810,31 @@ HRESULT CInArchive::OpenHighLevel(IInStream *inStream, CFilesDatabase &database)
744
810
  {
745
811
  if (numDWORDS < 5)
746
812
  return S_FALSE;
747
- if (ReadUInt32() != NHeader::kLzxcSignature)
813
+ if (ReadUInt32() != kSignature_LZXC)
748
814
  return S_FALSE;
749
815
  CLzxInfo &li = method.LzxInfo;
750
816
  li.Version = ReadUInt32();
751
817
  if (li.Version != 2 && li.Version != 3)
752
818
  return S_FALSE;
753
- li.ResetInterval = ReadUInt32();
754
- li.WindowSize = ReadUInt32();
819
+
820
+ {
821
+ // There is bug in VC6, if we use function call as parameter for inline function
822
+ UInt32 val32 = ReadUInt32();
823
+ int n = GetLog(val32);
824
+ if (n < 0 || n > 16)
825
+ return S_FALSE;
826
+ li.ResetIntervalBits = n;
827
+ }
828
+
829
+ {
830
+ UInt32 val32 = ReadUInt32();
831
+ int n = GetLog(val32);
832
+ if (n < 0 || n > 16)
833
+ return S_FALSE;
834
+ li.WindowSizeBits = n;
835
+ }
836
+
755
837
  li.CacheSize = ReadUInt32();
756
- if (
757
- li.ResetInterval != 1 &&
758
- li.ResetInterval != 2 &&
759
- li.ResetInterval != 4 &&
760
- li.ResetInterval != 8 &&
761
- li.ResetInterval != 16 &&
762
- li.ResetInterval != 32 &&
763
- li.ResetInterval != 64)
764
- return S_FALSE;
765
- if (
766
- li.WindowSize != 1 &&
767
- li.WindowSize != 2 &&
768
- li.WindowSize != 4 &&
769
- li.WindowSize != 8 &&
770
- li.WindowSize != 16 &&
771
- li.WindowSize != 32 &&
772
- li.WindowSize != 64)
773
- return S_FALSE;
774
838
  numDWORDS -= 5;
775
839
  while (numDWORDS-- != 0)
776
840
  ReadUInt32();
@@ -778,7 +842,7 @@ HRESULT CInArchive::OpenHighLevel(IInStream *inStream, CFilesDatabase &database)
778
842
  else
779
843
  {
780
844
  UInt32 numBytes = numDWORDS * 4;
781
- method.ControlData.SetCapacity(numBytes);
845
+ method.ControlData.Alloc(numBytes);
782
846
  ReadBytes(method.ControlData, numBytes);
783
847
  }
784
848
  }
@@ -791,7 +855,7 @@ HRESULT CInArchive::OpenHighLevel(IInStream *inStream, CFilesDatabase &database)
791
855
  }
792
856
 
793
857
  // read ResetTable for LZX
794
- for (int mi = 0; mi < section.Methods.Size(); mi++)
858
+ FOR_VECTOR (mi, section.Methods)
795
859
  {
796
860
  CMethodInfo &method = section.Methods[mi];
797
861
  if (method.IsLzx())
@@ -800,6 +864,7 @@ HRESULT CInArchive::OpenHighLevel(IInStream *inStream, CFilesDatabase &database)
800
864
  RINOK(DecompressStream(inStream, database, transformPrefix +
801
865
  method.GetGuidString() + kResetTable));
802
866
  CResetTable &rt = method.LzxInfo.ResetTable;
867
+
803
868
  if (_chunkSize < 4)
804
869
  {
805
870
  if (_chunkSize != 0)
@@ -809,7 +874,7 @@ HRESULT CInArchive::OpenHighLevel(IInStream *inStream, CFilesDatabase &database)
809
874
  return S_FALSE;
810
875
  rt.UncompressedSize = 0;
811
876
  rt.CompressedSize = 0;
812
- rt.BlockSize = 0;
877
+ // rt.BlockSize = 0;
813
878
  }
814
879
  else
815
880
  {
@@ -817,18 +882,45 @@ HRESULT CInArchive::OpenHighLevel(IInStream *inStream, CFilesDatabase &database)
817
882
  if (ver != 2 && ver != 3)
818
883
  return S_FALSE;
819
884
  UInt32 numEntries = ReadUInt32();
820
- if (ReadUInt32() != 8) // Size of table entry (bytes)
885
+ const unsigned kEntrySize = 8;
886
+ if (ReadUInt32() != kEntrySize)
821
887
  return S_FALSE;
822
- if (ReadUInt32() != 0x28) // Length of table header
888
+ const unsigned kRtHeaderSize = 4 * 4 + 8 * 3;
889
+ if (ReadUInt32() != kRtHeaderSize)
823
890
  return S_FALSE;
891
+ if (kRtHeaderSize + kEntrySize * (UInt64)numEntries != _chunkSize)
892
+ return S_FALSE;
893
+
824
894
  rt.UncompressedSize = ReadUInt64();
825
895
  rt.CompressedSize = ReadUInt64();
826
- rt.BlockSize = ReadUInt64(); // 0x8000 block size for locations below
827
- if (rt.BlockSize != 0x8000)
896
+ UInt64 blockSize = ReadUInt64();
897
+ if (blockSize != kBlockSize)
898
+ return S_FALSE;
899
+ UInt64 numBlocks = (rt.UncompressedSize + kBlockSize + 1) / kBlockSize;
900
+ if (numEntries != numBlocks &&
901
+ numEntries != numBlocks + 1)
828
902
  return S_FALSE;
829
- rt.ResetOffsets.Reserve(numEntries);
903
+
904
+ rt.ResetOffsets.ClearAndReserve(numEntries);
905
+
830
906
  for (UInt32 i = 0; i < numEntries; i++)
831
- rt.ResetOffsets.Add(ReadUInt64());
907
+ {
908
+ UInt64 v = ReadUInt64();
909
+ if (i != 0 && v < rt.ResetOffsets[i - 1])
910
+ return S_FALSE;
911
+ rt.ResetOffsets.AddInReserved(v);
912
+ }
913
+
914
+ if (numEntries != 0)
915
+ if (rt.ResetOffsets[0] != 0)
916
+ return S_FALSE;
917
+
918
+ if (numEntries == numBlocks + 1)
919
+ {
920
+ // Lazarus 9-26-2 chm contains additional entty
921
+ if (rt.ResetOffsets.Back() != rt.CompressedSize)
922
+ return S_FALSE;
923
+ }
832
924
  }
833
925
  }
834
926
  }
@@ -843,77 +935,96 @@ HRESULT CInArchive::Open2(IInStream *inStream,
843
935
  const UInt64 *searchHeaderSizeLimit,
844
936
  CFilesDatabase &database)
845
937
  {
938
+ IsArc = false;
939
+ HeadersError = false;
940
+ UnexpectedEnd = false;
941
+ UnsupportedFeature = false;
942
+
846
943
  database.Clear();
944
+ database.Help2Format = _help2;
945
+ const UInt32 chmVersion = 3;
847
946
 
848
- RINOK(inStream->Seek(0, STREAM_SEEK_CUR, &_startPosition));
947
+ RINOK(inStream->Seek(0, STREAM_SEEK_CUR, &database.StartPosition));
849
948
 
850
- database.Help2Format = false;
851
- const UInt32 chmVersion = 3;
949
+ if (!_inBuffer.Create(1 << 14))
950
+ return E_OUTOFMEMORY;
951
+ _inBuffer.SetStream(inStream);
952
+ _inBuffer.Init();
953
+
954
+ if (_help2)
852
955
  {
853
- if (!_inBuffer.Create(1 << 14))
854
- return E_OUTOFMEMORY;
855
- _inBuffer.SetStream(inStream);
856
- _inBuffer.Init();
857
- UInt64 value = 0;
858
- const int kSignatureSize = 8;
859
- UInt64 hxsSignature = NHeader::GetHxsSignature();
860
- UInt64 chmSignature = ((UInt64)chmVersion << 32)| NHeader::kItsfSignature;
956
+ const unsigned kSignatureSize = 8;
957
+ const UInt64 signature = ((UInt64)kSignature_ITLS << 32) | kSignature_ITOL;
861
958
  UInt64 limit = 1 << 18;
959
+
862
960
  if (searchHeaderSizeLimit)
863
961
  if (limit > *searchHeaderSizeLimit)
864
962
  limit = *searchHeaderSizeLimit;
865
963
 
964
+ UInt64 val = 0;
965
+
866
966
  for (;;)
867
967
  {
868
968
  Byte b;
869
969
  if (!_inBuffer.ReadByte(b))
870
970
  return S_FALSE;
871
- value >>= 8;
872
- value |= ((UInt64)b) << ((kSignatureSize - 1) * 8);
971
+ val >>= 8;
972
+ val |= ((UInt64)b) << ((kSignatureSize - 1) * 8);
873
973
  if (_inBuffer.GetProcessedSize() >= kSignatureSize)
874
974
  {
875
- if (value == chmSignature)
975
+ if (val == signature)
876
976
  break;
877
- if (value == hxsSignature)
878
- {
879
- database.Help2Format = true;
880
- break;
881
- }
882
977
  if (_inBuffer.GetProcessedSize() > limit)
883
978
  return S_FALSE;
884
979
  }
885
980
  }
886
- _startPosition += _inBuffer.GetProcessedSize() - kSignatureSize;
887
- }
888
-
889
- if (database.Help2Format)
890
- {
981
+
982
+ database.StartPosition += _inBuffer.GetProcessedSize() - kSignatureSize;
891
983
  RINOK(OpenHelp2(inStream, database));
892
984
  if (database.NewFormat)
893
985
  return S_OK;
894
986
  }
895
987
  else
896
988
  {
989
+ if (ReadUInt32() != kSignature_ITSF)
990
+ return S_FALSE;
991
+ if (ReadUInt32() != chmVersion)
992
+ return S_FALSE;
897
993
  RINOK(OpenChm(inStream, database));
898
994
  }
899
995
 
996
+
900
997
  #ifndef CHM_LOW
998
+
901
999
  try
902
1000
  {
903
- HRESULT res = OpenHighLevel(inStream, database);
904
- if (res == S_FALSE)
1001
+ try
1002
+ {
1003
+ HRESULT res = OpenHighLevel(inStream, database);
1004
+ if (res == S_FALSE)
1005
+ {
1006
+ UnsupportedFeature = true;
1007
+ database.HighLevelClear();
1008
+ return S_OK;
1009
+ }
1010
+ RINOK(res);
1011
+ if (!database.CheckSectionRefs())
1012
+ HeadersError = true;
1013
+ database.LowLevel = false;
1014
+ }
1015
+ catch(...)
905
1016
  {
906
1017
  database.HighLevelClear();
907
- return S_OK;
1018
+ throw;
908
1019
  }
909
- RINOK(res);
910
- database.LowLevel = false;
911
- }
912
- catch(...)
913
- {
914
- return S_OK;
915
1020
  }
1021
+ // catch(const CInBufferException &e) { return e.ErrorCode; }
1022
+ catch(CEnexpectedEndException &) { UnexpectedEnd = true; }
1023
+ catch(CHeaderErrorException &) { HeadersError = true; }
1024
+ catch(...) { throw; }
1025
+
916
1026
  #endif
1027
+
917
1028
  return S_OK;
918
1029
  }
919
1030
 
@@ -923,15 +1034,22 @@ HRESULT CInArchive::Open(IInStream *inStream,
923
1034
  {
924
1035
  try
925
1036
  {
926
- HRESULT res = Open2(inStream, searchHeaderSizeLimit, database);
927
- _inBuffer.ReleaseStream();
928
- return res;
929
- }
930
- catch(...)
931
- {
932
- _inBuffer.ReleaseStream();
933
- throw;
1037
+ try
1038
+ {
1039
+ HRESULT res = Open2(inStream, searchHeaderSizeLimit, database);
1040
+ m_InStreamRef.Release();
1041
+ return res;
1042
+ }
1043
+ catch(...)
1044
+ {
1045
+ m_InStreamRef.Release();
1046
+ throw;
1047
+ }
934
1048
  }
1049
+ catch(const CInBufferException &e) { return e.ErrorCode; }
1050
+ catch(CEnexpectedEndException &) { UnexpectedEnd = true; }
1051
+ catch(CHeaderErrorException &) { HeadersError = true; }
1052
+ return S_FALSE;
935
1053
  }
936
1054
 
937
1055
  }}