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,15 +2,17 @@
2
2
 
3
3
  #include "StdAfx.h"
4
4
 
5
- #include "Common/ComTry.h"
6
- #include "Common/IntToString.h"
5
+ #include "../../../Common/ComTry.h"
6
+ #include "../../../Common/IntToString.h"
7
+ #include "../../../Common/StringConvert.h"
7
8
 
8
- #include "Windows/PropVariant.h"
9
- #include "Windows/Time.h"
9
+ #include "../../../Windows/PropVariant.h"
10
+ #include "../../../Windows/TimeUtils.h"
10
11
 
11
12
  #include "../../IPassword.h"
12
13
 
13
14
  #include "../../Common/FilterCoder.h"
15
+ #include "../../Common/LimitedStreams.h"
14
16
  #include "../../Common/ProgressUtils.h"
15
17
  #include "../../Common/StreamObjects.h"
16
18
  #include "../../Common/StreamUtils.h"
@@ -28,6 +30,8 @@
28
30
  #include "../Common/ItemNameUtils.h"
29
31
  #include "../Common/OutStreamWithCRC.h"
30
32
 
33
+ #include "../XzHandler.h"
34
+
31
35
  #include "ZipHandler.h"
32
36
 
33
37
  using namespace NWindows;
@@ -38,117 +42,131 @@ namespace NZip {
38
42
  static const CMethodId kMethodId_ZipBase = 0x040100;
39
43
  static const CMethodId kMethodId_BZip2 = 0x040202;
40
44
 
41
- static const char *kHostOS[] =
45
+ static const char * const kHostOS[] =
42
46
  {
43
- "FAT",
44
- "AMIGA",
45
- "VMS",
46
- "Unix",
47
- "VM/CMS",
48
- "Atari",
49
- "HPFS",
50
- "Macintosh",
51
- "Z-System",
52
- "CP/M",
53
- "TOPS-20",
54
- "NTFS",
55
- "SMS/QDOS",
56
- "Acorn",
57
- "VFAT",
58
- "MVS",
59
- "BeOS",
60
- "Tandem",
61
- "OS/400",
62
- "OS/X"
47
+ "FAT"
48
+ , "AMIGA"
49
+ , "VMS"
50
+ , "Unix"
51
+ , "VM/CMS"
52
+ , "Atari"
53
+ , "HPFS"
54
+ , "Macintosh"
55
+ , "Z-System"
56
+ , "CP/M"
57
+ , "TOPS-20"
58
+ , "NTFS"
59
+ , "SMS/QDOS"
60
+ , "Acorn"
61
+ , "VFAT"
62
+ , "MVS"
63
+ , "BeOS"
64
+ , "Tandem"
65
+ , "OS/400"
66
+ , "OS/X"
63
67
  };
64
68
 
65
- static const char *kUnknownOS = "Unknown";
66
-
67
- static const char *kMethods[] =
69
+ static const char * const kMethods[] =
68
70
  {
69
- "Store",
70
- "Shrink",
71
- "Reduced1",
72
- "Reduced2",
73
- "Reduced3",
74
- "Reduced4",
75
- "Implode",
76
- "Tokenizing",
77
- "Deflate",
78
- "Deflate64",
79
- "PKImploding"
71
+ "Store"
72
+ , "Shrink"
73
+ , "Reduced1"
74
+ , "Reduced2"
75
+ , "Reduced3"
76
+ , "Reduced4"
77
+ , "Implode"
78
+ , "Tokenizing"
79
+ , "Deflate"
80
+ , "Deflate64"
81
+ , "PKImploding"
80
82
  };
81
83
 
82
- static const char *kBZip2Method = "BZip2";
83
- static const char *kLZMAMethod = "LZMA";
84
- static const char *kJpegMethod = "Jpeg";
85
- static const char *kWavPackMethod = "WavPack";
86
- static const char *kPPMdMethod = "PPMd";
87
- static const char *kAESMethod = "AES";
88
- static const char *kZipCryptoMethod = "ZipCrypto";
89
- static const char *kStrongCryptoMethod = "StrongCrypto";
84
+ static const char *kMethod_AES = "AES";
85
+ static const char *kMethod_ZipCrypto = "ZipCrypto";
86
+ static const char *kMethod_StrongCrypto = "StrongCrypto";
90
87
 
91
- static struct CStrongCryptoPair
88
+ struct CIdToNamePair
92
89
  {
93
- UInt16 Id;
90
+ unsigned Id;
94
91
  const char *Name;
95
- } g_StrongCryptoPairs[] =
92
+ };
93
+
94
+ static const CIdToNamePair k_MethodIdNamePairs[] =
95
+ {
96
+ { NFileHeader::NCompressionMethod::kBZip2, "BZip2" },
97
+ { NFileHeader::NCompressionMethod::kLZMA, "LZMA" },
98
+ { NFileHeader::NCompressionMethod::kXz, "xz" },
99
+ { NFileHeader::NCompressionMethod::kJpeg, "Jpeg" },
100
+ { NFileHeader::NCompressionMethod::kWavPack, "WavPack" },
101
+ { NFileHeader::NCompressionMethod::kPPMd, "PPMd" }
102
+ };
103
+
104
+ static const CIdToNamePair k_StrongCryptoPairs[] =
96
105
  {
97
- { NStrongCryptoFlags::kDES, "DES" },
98
- { NStrongCryptoFlags::kRC2old, "RC2a" },
99
- { NStrongCryptoFlags::k3DES168, "3DES-168" },
100
- { NStrongCryptoFlags::k3DES112, "3DES-112" },
101
- { NStrongCryptoFlags::kAES128, "pkAES-128" },
102
- { NStrongCryptoFlags::kAES192, "pkAES-192" },
103
- { NStrongCryptoFlags::kAES256, "pkAES-256" },
104
- { NStrongCryptoFlags::kRC2, "RC2" },
105
- { NStrongCryptoFlags::kBlowfish, "Blowfish" },
106
- { NStrongCryptoFlags::kTwofish, "Twofish" },
107
- { NStrongCryptoFlags::kRC4, "RC4" }
106
+ { NStrongCrypto_AlgId::kDES, "DES" },
107
+ { NStrongCrypto_AlgId::kRC2old, "RC2a" },
108
+ { NStrongCrypto_AlgId::k3DES168, "3DES-168" },
109
+ { NStrongCrypto_AlgId::k3DES112, "3DES-112" },
110
+ { NStrongCrypto_AlgId::kAES128, "pkAES-128" },
111
+ { NStrongCrypto_AlgId::kAES192, "pkAES-192" },
112
+ { NStrongCrypto_AlgId::kAES256, "pkAES-256" },
113
+ { NStrongCrypto_AlgId::kRC2, "RC2" },
114
+ { NStrongCrypto_AlgId::kBlowfish, "Blowfish" },
115
+ { NStrongCrypto_AlgId::kTwofish, "Twofish" },
116
+ { NStrongCrypto_AlgId::kRC4, "RC4" }
108
117
  };
109
118
 
110
- static STATPROPSTG kProps[] =
119
+ const char *FindNameForId(const CIdToNamePair *pairs, unsigned num, unsigned id)
120
+ {
121
+ for (unsigned i = 0; i < num; i++)
122
+ {
123
+ const CIdToNamePair &pair = pairs[i];
124
+ if (id == pair.Id)
125
+ return pair.Name;
126
+ }
127
+ return NULL;
128
+ }
129
+
130
+ static const Byte kProps[] =
111
131
  {
112
- { NULL, kpidPath, VT_BSTR},
113
- { NULL, kpidIsDir, VT_BOOL},
114
- { NULL, kpidSize, VT_UI8},
115
- { NULL, kpidPackSize, VT_UI8},
116
- { NULL, kpidMTime, VT_FILETIME},
117
- { NULL, kpidCTime, VT_FILETIME},
118
- { NULL, kpidATime, VT_FILETIME},
119
- { NULL, kpidAttrib, VT_UI4},
120
- { NULL, kpidEncrypted, VT_BOOL},
121
- { NULL, kpidComment, VT_BSTR},
122
- { NULL, kpidCRC, VT_UI4},
123
- { NULL, kpidMethod, VT_BSTR},
124
- { NULL, kpidHostOS, VT_BSTR},
125
- { NULL, kpidUnpackVer, VT_UI4}
132
+ kpidPath,
133
+ kpidIsDir,
134
+ kpidSize,
135
+ kpidPackSize,
136
+ kpidMTime,
137
+ kpidCTime,
138
+ kpidATime,
139
+ kpidAttrib,
140
+ // kpidPosixAttrib,
141
+ kpidEncrypted,
142
+ kpidComment,
143
+ kpidCRC,
144
+ kpidMethod,
145
+ kpidHostOS,
146
+ kpidUnpackVer,
147
+ kpidVolumeIndex
126
148
  };
127
149
 
128
- static STATPROPSTG kArcProps[] =
150
+ static const Byte kArcProps[] =
129
151
  {
130
- { NULL, kpidBit64, VT_BOOL},
131
- { NULL, kpidComment, VT_BSTR},
132
- { NULL, kpidPhySize, VT_UI8},
133
- { NULL, kpidOffset, VT_UI8}
152
+ kpidEmbeddedStubSize,
153
+ kpidBit64,
154
+ kpidComment,
155
+ kpidTotalPhySize,
156
+ kpidIsVolume,
157
+ kpidVolumeIndex,
158
+ kpidNumVolumes
134
159
  };
135
160
 
136
161
  CHandler::CHandler()
137
162
  {
138
- InitMethodProperties();
163
+ InitMethodProps();
139
164
  }
140
165
 
141
166
  static AString BytesToString(const CByteBuffer &data)
142
167
  {
143
168
  AString s;
144
- int size = (int)data.GetCapacity();
145
- if (size > 0)
146
- {
147
- char *p = s.GetBuffer(size + 1);
148
- memcpy(p, (const Byte *)data, size);
149
- p[size] = '\0';
150
- s.ReleaseBuffer();
151
- }
169
+ s.SetFrom_CalcLen((const char *)(const Byte *)data, (unsigned)data.Size());
152
170
  return s;
153
171
  }
154
172
 
@@ -159,12 +177,77 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
159
177
  {
160
178
  COM_TRY_BEGIN
161
179
  NWindows::NCOM::CPropVariant prop;
162
- switch(propID)
180
+ switch (propID)
163
181
  {
164
182
  case kpidBit64: if (m_Archive.IsZip64) prop = m_Archive.IsZip64; break;
165
- case kpidComment: prop = MultiByteToUnicodeString(BytesToString(m_Archive.ArcInfo.Comment), CP_ACP); break;
166
- case kpidPhySize: prop = m_Archive.ArcInfo.GetPhySize(); break;
167
- case kpidOffset: if (m_Archive.ArcInfo.StartPosition != 0) prop = m_Archive.ArcInfo.StartPosition; break;
183
+ case kpidComment: if (m_Archive.ArcInfo.Comment.Size() != 0) prop = MultiByteToUnicodeString(BytesToString(m_Archive.ArcInfo.Comment), CP_ACP); break;
184
+
185
+ case kpidPhySize: prop = m_Archive.GetPhySize(); break;
186
+ case kpidOffset: prop = m_Archive.GetOffset(); break;
187
+
188
+ case kpidEmbeddedStubSize:
189
+ {
190
+ UInt64 stubSize = m_Archive.GetEmbeddedStubSize();
191
+ if (stubSize != 0)
192
+ prop = stubSize;
193
+ break;
194
+ }
195
+
196
+ case kpidTotalPhySize: if (m_Archive.IsMultiVol) prop = m_Archive.Vols.GetTotalSize(); break;
197
+ case kpidVolumeIndex: if (m_Archive.IsMultiVol) prop = (UInt32)m_Archive.Vols.StartVolIndex; break;
198
+ case kpidIsVolume: if (m_Archive.IsMultiVol) prop = true; break;
199
+ case kpidNumVolumes: if (m_Archive.IsMultiVol) prop = (UInt32)m_Archive.Vols.Streams.Size(); break;
200
+
201
+ case kpidWarningFlags:
202
+ {
203
+ UInt32 v = 0;
204
+ // if (m_Archive.ExtraMinorError) v |= kpv_ErrorFlags_HeadersError;
205
+ if (m_Archive.HeadersWarning) v |= kpv_ErrorFlags_HeadersError;
206
+ if (v != 0)
207
+ prop = v;
208
+ break;
209
+ }
210
+
211
+ case kpidError:
212
+ {
213
+ if (!m_Archive.Vols.MissingName.IsEmpty())
214
+ {
215
+ UString s;
216
+ s.SetFromAscii("Missing volume : ");
217
+ s += m_Archive.Vols.MissingName;
218
+ prop = s;
219
+ }
220
+ break;
221
+ }
222
+
223
+ case kpidErrorFlags:
224
+ {
225
+ UInt32 v = 0;
226
+ if (!m_Archive.IsArc) v |= kpv_ErrorFlags_IsNotArc;
227
+ if (m_Archive.HeadersError) v |= kpv_ErrorFlags_HeadersError;
228
+ if (m_Archive.UnexpectedEnd) v |= kpv_ErrorFlags_UnexpectedEnd;
229
+ if (m_Archive.ArcInfo.Base < 0)
230
+ {
231
+ /* We try to support case when we have sfx-zip with embedded stub,
232
+ but the stream has access only to zip part.
233
+ In that case we ignore UnavailableStart error.
234
+ maybe we must show warning in that case. */
235
+ UInt64 stubSize = m_Archive.GetEmbeddedStubSize();
236
+ if (stubSize < (UInt64)-m_Archive.ArcInfo.Base)
237
+ v |= kpv_ErrorFlags_UnavailableStart;
238
+ }
239
+ if (m_Archive.NoCentralDir) v |= kpv_ErrorFlags_UnconfirmedStart;
240
+ prop = v;
241
+ break;
242
+ }
243
+
244
+ case kpidReadOnly:
245
+ {
246
+ if (m_Archive.IsOpen())
247
+ if (!m_Archive.CanUpdate())
248
+ prop = true;
249
+ break;
250
+ }
168
251
  }
169
252
  prop.Detach(value);
170
253
  COM_TRY_END
@@ -182,166 +265,204 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
182
265
  COM_TRY_BEGIN
183
266
  NWindows::NCOM::CPropVariant prop;
184
267
  const CItemEx &item = m_Items[index];
185
- switch(propID)
268
+ const CExtraBlock &extra = item.GetMainExtra();
269
+
270
+ switch (propID)
186
271
  {
187
- case kpidPath: prop = NItemName::GetOSName2(item.GetUnicodeString(item.Name)); break;
272
+ case kpidPath:
273
+ {
274
+ UString res;
275
+ item.GetUnicodeString(res, item.Name, false, _forceCodePage, _specifiedCodePage);
276
+ NItemName::ConvertToOSName2(res);
277
+ prop = res;
278
+ break;
279
+ }
280
+
188
281
  case kpidIsDir: prop = item.IsDir(); break;
189
- case kpidSize: prop = item.UnPackSize; break;
282
+ case kpidSize: prop = item.Size; break;
190
283
  case kpidPackSize: prop = item.PackSize; break;
284
+
191
285
  case kpidTimeType:
192
286
  {
193
287
  FILETIME ft;
194
288
  UInt32 unixTime;
195
- if (item.CentralExtra.GetNtfsTime(NFileHeader::NNtfsExtra::kMTime, ft))
196
- prop = (UInt32)NFileTimeType::kWindows;
197
- else if (item.CentralExtra.GetUnixTime(NFileHeader::NUnixTime::kMTime, unixTime))
198
- prop = (UInt32)NFileTimeType::kUnix;
289
+ UInt32 type;
290
+ if (extra.GetNtfsTime(NFileHeader::NNtfsExtra::kMTime, ft))
291
+ type = NFileTimeType::kWindows;
292
+ else if (extra.GetUnixTime(true, NFileHeader::NUnixTime::kMTime, unixTime))
293
+ type = NFileTimeType::kUnix;
199
294
  else
200
- prop = (UInt32)NFileTimeType::kDOS;
295
+ type = NFileTimeType::kDOS;
296
+ prop = type;
201
297
  break;
202
298
  }
299
+
203
300
  case kpidCTime:
204
301
  {
205
302
  FILETIME ft;
206
- if (item.CentralExtra.GetNtfsTime(NFileHeader::NNtfsExtra::kCTime, ft))
303
+ if (extra.GetNtfsTime(NFileHeader::NNtfsExtra::kCTime, ft))
207
304
  prop = ft;
208
305
  break;
209
306
  }
307
+
210
308
  case kpidATime:
211
309
  {
212
310
  FILETIME ft;
213
- if (item.CentralExtra.GetNtfsTime(NFileHeader::NNtfsExtra::kATime, ft))
311
+ if (extra.GetNtfsTime(NFileHeader::NNtfsExtra::kATime, ft))
214
312
  prop = ft;
215
313
  break;
216
314
  }
315
+
217
316
  case kpidMTime:
218
317
  {
219
318
  FILETIME utc;
220
- if (!item.CentralExtra.GetNtfsTime(NFileHeader::NNtfsExtra::kMTime, utc))
319
+ bool defined = true;
320
+ if (!extra.GetNtfsTime(NFileHeader::NNtfsExtra::kMTime, utc))
221
321
  {
222
- UInt32 unixTime;
223
- if (item.CentralExtra.GetUnixTime(NFileHeader::NUnixTime::kMTime, unixTime))
322
+ UInt32 unixTime = 0;
323
+ if (extra.GetUnixTime(true, NFileHeader::NUnixTime::kMTime, unixTime))
224
324
  NTime::UnixTimeToFileTime(unixTime, utc);
225
325
  else
226
326
  {
227
327
  FILETIME localFileTime;
228
- if (!NTime::DosTimeToFileTime(item.Time, localFileTime) ||
328
+ if (item.Time == 0)
329
+ defined = false;
330
+ else if (!NTime::DosTimeToFileTime(item.Time, localFileTime) ||
229
331
  !LocalFileTimeToFileTime(&localFileTime, &utc))
230
332
  utc.dwHighDateTime = utc.dwLowDateTime = 0;
231
333
  }
232
334
  }
233
- prop = utc;
335
+ if (defined)
336
+ prop = utc;
337
+ break;
338
+ }
339
+
340
+ case kpidAttrib: prop = item.GetWinAttrib(); break;
341
+
342
+ case kpidPosixAttrib:
343
+ {
344
+ UInt32 attrib;
345
+ if (item.GetPosixAttrib(attrib))
346
+ prop = attrib;
234
347
  break;
235
348
  }
236
- case kpidAttrib: prop = item.GetWinAttributes(); break;
349
+
237
350
  case kpidEncrypted: prop = item.IsEncrypted(); break;
238
- case kpidComment: prop = item.GetUnicodeString(BytesToString(item.Comment)); break;
239
- case kpidCRC: if (item.IsThereCrc()) prop = item.FileCRC; break;
351
+
352
+ case kpidComment:
353
+ {
354
+ if (item.Comment.Size() != 0)
355
+ {
356
+ UString res;
357
+ item.GetUnicodeString(res, BytesToString(item.Comment), true, _forceCodePage, _specifiedCodePage);
358
+ prop = res;
359
+ }
360
+ break;
361
+ }
362
+
363
+ case kpidCRC: if (item.IsThereCrc()) prop = item.Crc; break;
364
+
240
365
  case kpidMethod:
241
366
  {
242
- UInt16 methodId = item.CompressionMethod;
243
- AString method;
367
+ unsigned id = item.Method;
368
+ AString m;
369
+
244
370
  if (item.IsEncrypted())
245
371
  {
246
- if (methodId == NFileHeader::NCompressionMethod::kWzAES)
372
+ if (id == NFileHeader::NCompressionMethod::kWzAES)
247
373
  {
248
- method = kAESMethod;
249
- CWzAesExtraField aesField;
250
- if (item.CentralExtra.GetWzAesField(aesField))
374
+ m += kMethod_AES;
375
+ CWzAesExtra aesField;
376
+ if (extra.GetWzAes(aesField))
251
377
  {
252
- method += '-';
253
- char s[32];
254
- ConvertUInt64ToString((aesField.Strength + 1) * 64 , s);
255
- method += s;
256
- method += ' ';
257
- methodId = aesField.Method;
378
+ char s[16];
379
+ s[0] = '-';
380
+ ConvertUInt32ToString(((unsigned)aesField.Strength + 1) * 64 , s + 1);
381
+ m += s;
382
+ id = aesField.Method;
258
383
  }
259
384
  }
260
- else
385
+ else if (item.IsStrongEncrypted())
261
386
  {
262
- if (item.IsStrongEncrypted())
387
+ CStrongCryptoExtra f;
388
+ f.AlgId = 0;
389
+ if (extra.GetStrongCrypto(f))
263
390
  {
264
- CStrongCryptoField f;
265
- bool finded = false;
266
- if (item.CentralExtra.GetStrongCryptoField(f))
391
+ const char *s = FindNameForId(k_StrongCryptoPairs, ARRAY_SIZE(k_StrongCryptoPairs), f.AlgId);
392
+ if (s)
393
+ m += s;
394
+ else
267
395
  {
268
- for (int i = 0; i < sizeof(g_StrongCryptoPairs) / sizeof(g_StrongCryptoPairs[0]); i++)
269
- {
270
- const CStrongCryptoPair &pair = g_StrongCryptoPairs[i];
271
- if (f.AlgId == pair.Id)
272
- {
273
- method += pair.Name;
274
- finded = true;
275
- break;
276
- }
277
- }
396
+ m += kMethod_StrongCrypto;
397
+ char temp[16];
398
+ temp[0] = ':';
399
+ ConvertUInt32ToString(f.AlgId, temp + 1);
400
+ m += temp;
278
401
  }
279
- if (!finded)
280
- method += kStrongCryptoMethod;
402
+ if (f.CertificateIsUsed())
403
+ m += "-Cert";
281
404
  }
282
405
  else
283
- method += kZipCryptoMethod;
284
- method += ' ';
406
+ m += kMethod_StrongCrypto;
285
407
  }
408
+ else
409
+ m += kMethod_ZipCrypto;
410
+ m += ' ';
286
411
  }
287
- if (methodId < sizeof(kMethods) / sizeof(kMethods[0]))
288
- method += kMethods[methodId];
289
- else switch (methodId)
412
+
290
413
  {
291
- case NFileHeader::NCompressionMethod::kLZMA:
292
- method += kLZMAMethod;
293
- if (item.IsLzmaEOS())
294
- method += ":EOS";
295
- break;
296
- case NFileHeader::NCompressionMethod::kBZip2: method += kBZip2Method; break;
297
- case NFileHeader::NCompressionMethod::kJpeg: method += kJpegMethod; break;
298
- case NFileHeader::NCompressionMethod::kWavPack: method += kWavPackMethod; break;
299
- case NFileHeader::NCompressionMethod::kPPMd: method += kPPMdMethod; break;
300
- default:
414
+ char temp[16];
415
+ const char *s = NULL;
416
+ if (id < ARRAY_SIZE(kMethods))
417
+ s = kMethods[id];
418
+ else
301
419
  {
302
- char s[32];
303
- ConvertUInt64ToString(methodId, s);
304
- method += s;
420
+ s = FindNameForId(k_MethodIdNamePairs, ARRAY_SIZE(k_MethodIdNamePairs), id);
421
+ if (!s)
422
+ {
423
+ ConvertUInt32ToString(id, temp);
424
+ s = temp;
425
+ }
305
426
  }
427
+ m += s;
428
+ if (id == NFileHeader::NCompressionMethod::kLZMA && item.IsLzmaEOS())
429
+ m += ":EOS";
306
430
  }
307
- prop = method;
431
+
432
+ prop = m;
308
433
  break;
309
434
  }
435
+
310
436
  case kpidHostOS:
311
- prop = (item.MadeByVersion.HostOS < sizeof(kHostOS) / sizeof(kHostOS[0])) ?
312
- (kHostOS[item.MadeByVersion.HostOS]) : kUnknownOS;
437
+ {
438
+ Byte hostOS = item.GetHostOS();
439
+ char temp[16];
440
+ const char *s = NULL;
441
+ if (hostOS < ARRAY_SIZE(kHostOS))
442
+ s = kHostOS[hostOS];
443
+ else
444
+ {
445
+ ConvertUInt32ToString(hostOS, temp);
446
+ s = temp;
447
+ }
448
+ prop = s;
313
449
  break;
450
+ }
451
+
314
452
  case kpidUnpackVer:
315
453
  prop = (UInt32)item.ExtractVersion.Version;
316
454
  break;
455
+
456
+ case kpidVolumeIndex:
457
+ prop = item.Disk;
458
+ break;
317
459
  }
460
+
318
461
  prop.Detach(value);
319
462
  return S_OK;
320
463
  COM_TRY_END
321
464
  }
322
465
 
323
- class CProgressImp: public CProgressVirt
324
- {
325
- CMyComPtr<IArchiveOpenCallback> _callback;
326
- public:
327
- STDMETHOD(SetTotal)(UInt64 numFiles);
328
- STDMETHOD(SetCompleted)(UInt64 numFiles);
329
- CProgressImp(IArchiveOpenCallback *callback): _callback(callback) {}
330
- };
331
-
332
- STDMETHODIMP CProgressImp::SetTotal(UInt64 numFiles)
333
- {
334
- if (_callback)
335
- return _callback->SetTotal(&numFiles, NULL);
336
- return S_OK;
337
- }
338
-
339
- STDMETHODIMP CProgressImp::SetCompleted(UInt64 numFiles)
340
- {
341
- if (_callback)
342
- return _callback->SetCompleted(&numFiles, NULL);
343
- return S_OK;
344
- }
345
466
 
346
467
  STDMETHODIMP CHandler::Open(IInStream *inStream,
347
468
  const UInt64 *maxCheckStartPosition, IArchiveOpenCallback *callback)
@@ -350,12 +471,14 @@ STDMETHODIMP CHandler::Open(IInStream *inStream,
350
471
  try
351
472
  {
352
473
  Close();
353
- RINOK(inStream->Seek(0, STREAM_SEEK_SET, NULL));
354
- RINOK(m_Archive.Open(inStream, maxCheckStartPosition));
355
- CProgressImp progressImp(callback);
356
- return m_Archive.ReadHeaders(m_Items, &progressImp);
474
+ HRESULT res = m_Archive.Open(inStream, maxCheckStartPosition, callback, m_Items);
475
+ if (res != S_OK)
476
+ {
477
+ m_Items.Clear();
478
+ m_Archive.ClearRefs();
479
+ }
480
+ return res;
357
481
  }
358
- catch(const CInArchiveException &) { Close(); return S_FALSE; }
359
482
  catch(...) { Close(); throw; }
360
483
  COM_TRY_END
361
484
  }
@@ -367,8 +490,6 @@ STDMETHODIMP CHandler::Close()
367
490
  return S_OK;
368
491
  }
369
492
 
370
- //////////////////////////////////////
371
- // CHandler::DecompressItems
372
493
 
373
494
  class CLzmaDecoder:
374
495
  public ICompressCoder,
@@ -401,12 +522,41 @@ HRESULT CLzmaDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream *
401
522
  return Decoder->Code(inStream, outStream, NULL, outSize, progress);
402
523
  }
403
524
 
525
+
526
+ class CXzDecoder:
527
+ public ICompressCoder,
528
+ public CMyUnknownImp
529
+ {
530
+ NArchive::NXz::CDecoder _decoder;
531
+ public:
532
+
533
+ STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
534
+ const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
535
+
536
+ MY_UNKNOWN_IMP
537
+ };
538
+
539
+ HRESULT CXzDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
540
+ const UInt64 * /* inSize */, const UInt64 * /* outSize */, ICompressProgressInfo *progress)
541
+ {
542
+ RINOK(_decoder.Decode(inStream, outStream, progress));
543
+ Int32 opRes = _decoder.Get_Extract_OperationResult();
544
+ if (opRes == NExtract::NOperationResult::kUnsupportedMethod)
545
+ return E_NOTIMPL;
546
+ if (opRes != NExtract::NOperationResult::kOK)
547
+ return S_FALSE;
548
+ return S_OK;
549
+ }
550
+
551
+
404
552
  struct CMethodItem
405
553
  {
406
- UInt16 ZipMethod;
554
+ unsigned ZipMethod;
407
555
  CMyComPtr<ICompressCoder> Coder;
408
556
  };
409
557
 
558
+
559
+
410
560
  class CZipDecoder
411
561
  {
412
562
  NCrypto::NZip::CDecoder *_zipCryptoDecoderSpec;
@@ -435,43 +585,68 @@ public:
435
585
  ISequentialOutStream *realOutStream,
436
586
  IArchiveExtractCallback *extractCallback,
437
587
  ICompressProgressInfo *compressProgress,
438
- UInt32 numThreads, Int32 &res);
588
+ #ifndef _7ZIP_ST
589
+ UInt32 numThreads,
590
+ #endif
591
+ Int32 &res);
439
592
  };
440
593
 
594
+
595
+ static HRESULT SkipStreamData(ISequentialInStream *stream, UInt64 size)
596
+ {
597
+ const size_t kBufSize = 1 << 12;
598
+ Byte buf[kBufSize];
599
+ for (;;)
600
+ {
601
+ if (size == 0)
602
+ return S_OK;
603
+ size_t curSize = kBufSize;
604
+ if (curSize > size)
605
+ curSize = (size_t)size;
606
+ RINOK(ReadStream_FALSE(stream, buf, curSize));
607
+ size -= curSize;
608
+ }
609
+ }
610
+
611
+
441
612
  HRESULT CZipDecoder::Decode(
442
613
  DECL_EXTERNAL_CODECS_LOC_VARS
443
614
  CInArchive &archive, const CItemEx &item,
444
615
  ISequentialOutStream *realOutStream,
445
616
  IArchiveExtractCallback *extractCallback,
446
617
  ICompressProgressInfo *compressProgress,
447
- UInt32 numThreads, Int32 &res)
618
+ #ifndef _7ZIP_ST
619
+ UInt32 numThreads,
620
+ #endif
621
+ Int32 &res)
448
622
  {
449
623
  res = NExtract::NOperationResult::kDataError;
450
- CInStreamReleaser inStreamReleaser;
624
+ CFilterCoder::C_InStream_Releaser inStreamReleaser;
451
625
 
452
626
  bool needCRC = true;
453
627
  bool wzAesMode = false;
454
628
  bool pkAesMode = false;
455
- UInt16 methodId = item.CompressionMethod;
629
+ unsigned id = item.Method;
630
+
456
631
  if (item.IsEncrypted())
457
632
  {
458
633
  if (item.IsStrongEncrypted())
459
634
  {
460
- CStrongCryptoField f;
461
- if (item.CentralExtra.GetStrongCryptoField(f))
635
+ CStrongCryptoExtra f;
636
+ if (item.CentralExtra.GetStrongCrypto(f))
462
637
  {
463
638
  pkAesMode = true;
464
639
  }
465
640
  if (!pkAesMode)
466
641
  {
467
- res = NExtract::NOperationResult::kUnSupportedMethod;
642
+ res = NExtract::NOperationResult::kUnsupportedMethod;
468
643
  return S_OK;
469
644
  }
470
645
  }
471
- if (methodId == NFileHeader::NCompressionMethod::kWzAES)
646
+ if (!pkAesMode && id == NFileHeader::NCompressionMethod::kWzAES)
472
647
  {
473
- CWzAesExtraField aesField;
474
- if (item.CentralExtra.GetWzAesField(aesField))
648
+ CWzAesExtra aesField;
649
+ if (item.GetMainExtra().GetWzAes(aesField))
475
650
  {
476
651
  wzAesMode = true;
477
652
  needCRC = aesField.NeedCrc();
@@ -484,9 +659,11 @@ HRESULT CZipDecoder::Decode(
484
659
  outStreamSpec->SetStream(realOutStream);
485
660
  outStreamSpec->Init(needCRC);
486
661
 
487
- UInt64 authenticationPos;
488
-
489
- CMyComPtr<ISequentialInStream> inStream;
662
+ CMyComPtr<ISequentialInStream> packStream;
663
+
664
+ CLimitedSequentialInStream *limitedStreamSpec = new CLimitedSequentialInStream;
665
+ CMyComPtr<ISequentialInStream> inStream(limitedStreamSpec);
666
+
490
667
  {
491
668
  UInt64 packSize = item.PackSize;
492
669
  if (wzAesMode)
@@ -495,28 +672,37 @@ HRESULT CZipDecoder::Decode(
495
672
  return S_OK;
496
673
  packSize -= NCrypto::NWzAes::kMacSize;
497
674
  }
498
- UInt64 dataPos = item.GetDataPosition();
499
- inStream.Attach(archive.CreateLimitedStream(dataPos, packSize));
500
- authenticationPos = dataPos + packSize;
675
+ RINOK(archive.GetItemStream(item, true, packStream));
676
+ if (!packStream)
677
+ {
678
+ res = NExtract::NOperationResult::kUnavailable;
679
+ return S_OK;
680
+ }
681
+ limitedStreamSpec->SetStream(packStream);
682
+ limitedStreamSpec->Init(packSize);
501
683
  }
502
684
 
503
685
  CMyComPtr<ICompressFilter> cryptoFilter;
686
+
504
687
  if (item.IsEncrypted())
505
688
  {
506
689
  if (wzAesMode)
507
690
  {
508
- CWzAesExtraField aesField;
509
- if (!item.CentralExtra.GetWzAesField(aesField))
691
+ CWzAesExtra aesField;
692
+ if (!item.GetMainExtra().GetWzAes(aesField))
510
693
  return S_OK;
511
- methodId = aesField.Method;
694
+ id = aesField.Method;
512
695
  if (!_wzAesDecoder)
513
696
  {
514
697
  _wzAesDecoderSpec = new NCrypto::NWzAes::CDecoder;
515
698
  _wzAesDecoder = _wzAesDecoderSpec;
516
699
  }
517
700
  cryptoFilter = _wzAesDecoder;
518
- Byte properties = aesField.Strength;
519
- RINOK(_wzAesDecoderSpec->SetDecoderProperties2(&properties, 1));
701
+ if (!_wzAesDecoderSpec->SetKeyMode(aesField.Strength))
702
+ {
703
+ res = NExtract::NOperationResult::kUnsupportedMethod;
704
+ return S_OK;
705
+ }
520
706
  }
521
707
  else if (pkAesMode)
522
708
  {
@@ -536,6 +722,7 @@ HRESULT CZipDecoder::Decode(
536
722
  }
537
723
  cryptoFilter = _zipCryptoDecoder;
538
724
  }
725
+
539
726
  CMyComPtr<ICryptoSetPassword> cryptoSetPassword;
540
727
  RINOK(cryptoFilter.QueryInterface(IID_ICryptoSetPassword, &cryptoSetPassword));
541
728
 
@@ -547,31 +734,35 @@ HRESULT CZipDecoder::Decode(
547
734
  CMyComBSTR password;
548
735
  RINOK(getTextPassword->CryptoGetTextPassword(&password));
549
736
  AString charPassword;
550
- if (wzAesMode || pkAesMode)
737
+ if (password)
551
738
  {
552
- charPassword = UnicodeStringToMultiByte((const wchar_t *)password, CP_ACP);
553
- /*
554
- for (int i = 0;; i++)
739
+ if (wzAesMode || pkAesMode)
555
740
  {
556
- wchar_t c = password[i];
557
- if (c == 0)
558
- break;
559
- if (c >= 0x80)
741
+ charPassword = UnicodeStringToMultiByte((const wchar_t *)password, CP_ACP);
742
+ /*
743
+ for (unsigned i = 0;; i++)
560
744
  {
561
- res = NExtract::NOperationResult::kDataError;
562
- return S_OK;
745
+ wchar_t c = password[i];
746
+ if (c == 0)
747
+ break;
748
+ if (c >= 0x80)
749
+ {
750
+ res = NExtract::NOperationResult::kDataError;
751
+ return S_OK;
752
+ }
753
+ charPassword += (char)c;
563
754
  }
564
- charPassword += (char)c;
755
+ */
756
+ }
757
+ else
758
+ {
759
+ /* pkzip25 / WinZip / Windows probably use ANSI for some files
760
+ We use OEM for compatibility with previous versions of 7-Zip? */
761
+ charPassword = UnicodeStringToMultiByte((const wchar_t *)password, CP_OEMCP);
565
762
  }
566
- */
567
- }
568
- else
569
- {
570
- // we use OEM. WinZip/Windows probably use ANSI for some files
571
- charPassword = UnicodeStringToMultiByte((const wchar_t *)password, CP_OEMCP);
572
763
  }
573
764
  HRESULT result = cryptoSetPassword->CryptoSetPassword(
574
- (const Byte *)(const char *)charPassword, charPassword.Length());
765
+ (const Byte *)(const char *)charPassword, charPassword.Len());
575
766
  if (result != S_OK)
576
767
  return S_OK;
577
768
  }
@@ -581,50 +772,53 @@ HRESULT CZipDecoder::Decode(
581
772
  }
582
773
  }
583
774
 
584
- int m;
775
+ unsigned m;
585
776
  for (m = 0; m < methodItems.Size(); m++)
586
- if (methodItems[m].ZipMethod == methodId)
777
+ if (methodItems[m].ZipMethod == id)
587
778
  break;
588
779
 
589
780
  if (m == methodItems.Size())
590
781
  {
591
782
  CMethodItem mi;
592
- mi.ZipMethod = methodId;
593
- if (methodId == NFileHeader::NCompressionMethod::kStored)
783
+ mi.ZipMethod = id;
784
+ if (id == NFileHeader::NCompressionMethod::kStored)
594
785
  mi.Coder = new NCompress::CCopyCoder;
595
- else if (methodId == NFileHeader::NCompressionMethod::kShrunk)
786
+ else if (id == NFileHeader::NCompressionMethod::kShrunk)
596
787
  mi.Coder = new NCompress::NShrink::CDecoder;
597
- else if (methodId == NFileHeader::NCompressionMethod::kImploded)
788
+ else if (id == NFileHeader::NCompressionMethod::kImploded)
598
789
  mi.Coder = new NCompress::NImplode::NDecoder::CCoder;
599
- else if (methodId == NFileHeader::NCompressionMethod::kLZMA)
790
+ else if (id == NFileHeader::NCompressionMethod::kLZMA)
600
791
  mi.Coder = new CLzmaDecoder;
601
- else if (methodId == NFileHeader::NCompressionMethod::kPPMd)
792
+ else if (id == NFileHeader::NCompressionMethod::kXz)
793
+ mi.Coder = new CXzDecoder;
794
+ else if (id == NFileHeader::NCompressionMethod::kPPMd)
602
795
  mi.Coder = new NCompress::NPpmdZip::CDecoder(true);
603
796
  else
604
797
  {
605
798
  CMethodId szMethodID;
606
- if (methodId == NFileHeader::NCompressionMethod::kBZip2)
799
+ if (id == NFileHeader::NCompressionMethod::kBZip2)
607
800
  szMethodID = kMethodId_BZip2;
608
801
  else
609
802
  {
610
- if (methodId > 0xFF)
803
+ if (id > 0xFF)
611
804
  {
612
- res = NExtract::NOperationResult::kUnSupportedMethod;
805
+ res = NExtract::NOperationResult::kUnsupportedMethod;
613
806
  return S_OK;
614
807
  }
615
- szMethodID = kMethodId_ZipBase + (Byte)methodId;
808
+ szMethodID = kMethodId_ZipBase + (Byte)id;
616
809
  }
617
810
 
618
- RINOK(CreateCoder(EXTERNAL_CODECS_LOC_VARS szMethodID, mi.Coder, false));
811
+ RINOK(CreateCoder(EXTERNAL_CODECS_LOC_VARS szMethodID, false, mi.Coder));
619
812
 
620
813
  if (mi.Coder == 0)
621
814
  {
622
- res = NExtract::NOperationResult::kUnSupportedMethod;
815
+ res = NExtract::NOperationResult::kUnsupportedMethod;
623
816
  return S_OK;
624
817
  }
625
818
  }
626
819
  m = methodItems.Add(mi);
627
820
  }
821
+
628
822
  ICompressCoder *coder = methodItems[m].Coder;
629
823
 
630
824
  {
@@ -655,63 +849,110 @@ HRESULT CZipDecoder::Decode(
655
849
  {
656
850
  if (!filterStream)
657
851
  {
658
- filterStreamSpec = new CFilterCoder;
852
+ filterStreamSpec = new CFilterCoder(false);
659
853
  filterStream = filterStreamSpec;
660
854
  }
855
+
661
856
  filterStreamSpec->Filter = cryptoFilter;
857
+
662
858
  if (wzAesMode)
663
859
  {
664
860
  result = _wzAesDecoderSpec->ReadHeader(inStream);
861
+ if (result == S_OK)
862
+ {
863
+ if (!_wzAesDecoderSpec->Init_and_CheckPassword())
864
+ {
865
+ res = NExtract::NOperationResult::kWrongPassword;
866
+ return S_OK;
867
+ }
868
+ }
665
869
  }
666
870
  else if (pkAesMode)
667
871
  {
668
- result =_pkAesDecoderSpec->ReadHeader(inStream, item.FileCRC, item.UnPackSize);
872
+ result =_pkAesDecoderSpec->ReadHeader(inStream, item.Crc, item.Size);
669
873
  if (result == S_OK)
670
874
  {
671
875
  bool passwOK;
672
- result = _pkAesDecoderSpec->CheckPassword(passwOK);
876
+ result = _pkAesDecoderSpec->Init_and_CheckPassword(passwOK);
673
877
  if (result == S_OK && !passwOK)
674
- result = S_FALSE;
878
+ {
879
+ res = NExtract::NOperationResult::kWrongPassword;
880
+ return S_OK;
881
+ }
675
882
  }
676
883
  }
677
884
  else
678
885
  {
679
886
  result = _zipCryptoDecoderSpec->ReadHeader(inStream);
887
+ if (result == S_OK)
888
+ {
889
+ _zipCryptoDecoderSpec->Init_BeforeDecode();
890
+
891
+ /* Info-ZIP modification to ZipCrypto format:
892
+ if bit 3 of the general purpose bit flag is set,
893
+ it uses high byte of 16-bit File Time.
894
+ Info-ZIP code probably writes 2 bytes of File Time.
895
+ We check only 1 byte. */
896
+
897
+ // UInt32 v1 = GetUi16(_zipCryptoDecoderSpec->_header + NCrypto::NZip::kHeaderSize - 2);
898
+ // UInt32 v2 = (item.HasDescriptor() ? (item.Time & 0xFFFF) : (item.Crc >> 16));
899
+
900
+ Byte v1 = _zipCryptoDecoderSpec->_header[NCrypto::NZip::kHeaderSize - 1];
901
+ Byte v2 = (Byte)(item.HasDescriptor() ? (item.Time >> 8) : (item.Crc >> 24));
902
+
903
+ if (v1 != v2)
904
+ {
905
+ res = NExtract::NOperationResult::kWrongPassword;
906
+ return S_OK;
907
+ }
908
+ }
680
909
  }
681
910
 
682
911
  if (result == S_OK)
683
912
  {
684
- RINOK(filterStreamSpec->SetInStream(inStream));
685
913
  inStreamReleaser.FilterCoder = filterStreamSpec;
914
+ RINOK(filterStreamSpec->SetInStream(inStream));
915
+
916
+ /* IFilter::Init() does nothing in all zip crypto filters.
917
+ So we can call any Initialize function in CFilterCoder. */
918
+
919
+ RINOK(filterStreamSpec->Init_NoSubFilterInit());
920
+ // RINOK(filterStreamSpec->SetOutStreamSize(NULL));
921
+
686
922
  inStreamNew = filterStream;
687
- if (wzAesMode)
688
- {
689
- if (!_wzAesDecoderSpec->CheckPasswordVerifyCode())
690
- result = S_FALSE;
691
- }
692
923
  }
693
924
  }
694
925
  else
695
926
  inStreamNew = inStream;
927
+
696
928
  if (result == S_OK)
697
- result = coder->Code(inStreamNew, outStream, NULL, &item.UnPackSize, compressProgress);
929
+ result = coder->Code(inStreamNew, outStream, NULL, &item.Size, compressProgress);
930
+
698
931
  if (result == S_FALSE)
699
932
  return S_OK;
933
+
700
934
  if (result == E_NOTIMPL)
701
935
  {
702
- res = NExtract::NOperationResult::kUnSupportedMethod;
936
+ res = NExtract::NOperationResult::kUnsupportedMethod;
703
937
  return S_OK;
704
938
  }
705
939
 
706
940
  RINOK(result);
707
941
  }
942
+
708
943
  bool crcOK = true;
709
944
  bool authOk = true;
710
945
  if (needCRC)
711
- crcOK = (outStreamSpec->GetCRC() == item.FileCRC);
946
+ crcOK = (outStreamSpec->GetCRC() == item.Crc);
947
+
712
948
  if (wzAesMode)
713
949
  {
714
- inStream.Attach(archive.CreateLimitedStream(authenticationPos, NCrypto::NWzAes::kMacSize));
950
+ const UInt64 rem = limitedStreamSpec->GetRem();
951
+ if (rem != 0)
952
+ if (SkipStreamData(inStream, rem) != S_OK)
953
+ authOk = false;
954
+
955
+ limitedStreamSpec->Init(NCrypto::NWzAes::kMacSize);
715
956
  if (_wzAesDecoderSpec->CheckMac(inStream, authOk) != S_OK)
716
957
  authOk = false;
717
958
  }
@@ -729,16 +970,16 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
729
970
  COM_TRY_BEGIN
730
971
  CZipDecoder myDecoder;
731
972
  UInt64 totalUnPacked = 0, totalPacked = 0;
732
- bool allFilesMode = (numItems == (UInt32)-1);
973
+ bool allFilesMode = (numItems == (UInt32)(Int32)-1);
733
974
  if (allFilesMode)
734
975
  numItems = m_Items.Size();
735
- if(numItems == 0)
976
+ if (numItems == 0)
736
977
  return S_OK;
737
978
  UInt32 i;
738
979
  for (i = 0; i < numItems; i++)
739
980
  {
740
981
  const CItemEx &item = m_Items[allFilesMode ? i : indices[i]];
741
- totalUnPacked += item.UnPackSize;
982
+ totalUnPacked += item.Size;
742
983
  totalPacked += item.PackSize;
743
984
  }
744
985
  RINOK(extractCallback->SetTotal(totalUnPacked));
@@ -750,7 +991,8 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
750
991
  CMyComPtr<ICompressProgressInfo> progress = lps;
751
992
  lps->Init(extractCallback, false);
752
993
 
753
- for (i = 0; i < numItems; i++, currentTotalUnPacked += currentItemUnPacked,
994
+ for (i = 0; i < numItems; i++,
995
+ currentTotalUnPacked += currentItemUnPacked,
754
996
  currentTotalPacked += currentItemPacked)
755
997
  {
756
998
  currentItemUnPacked = 0;
@@ -764,28 +1006,48 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
764
1006
  Int32 askMode = testMode ?
765
1007
  NExtract::NAskMode::kTest :
766
1008
  NExtract::NAskMode::kExtract;
767
- Int32 index = allFilesMode ? i : indices[i];
1009
+ UInt32 index = allFilesMode ? i : indices[i];
1010
+
1011
+ CItemEx item = m_Items[index];
1012
+ bool isLocalOffsetOK = m_Archive.IsLocalOffsetOK(item);
1013
+ bool skip = !isLocalOffsetOK && !item.IsDir();
1014
+ if (skip)
1015
+ askMode = NExtract::NAskMode::kSkip;
1016
+
1017
+ currentItemUnPacked = item.Size;
1018
+ currentItemPacked = item.PackSize;
768
1019
 
769
1020
  RINOK(extractCallback->GetStream(index, &realOutStream, askMode));
770
1021
 
771
- CItemEx item = m_Items[index];
1022
+ if (!isLocalOffsetOK)
1023
+ {
1024
+ RINOK(extractCallback->PrepareOperation(askMode));
1025
+ realOutStream.Release();
1026
+ RINOK(extractCallback->SetOperationResult(NExtract::NOperationResult::kUnavailable));
1027
+ continue;
1028
+ }
1029
+
772
1030
  if (!item.FromLocal)
773
1031
  {
774
- HRESULT res = m_Archive.ReadLocalItemAfterCdItem(item);
1032
+ bool isAvail = true;
1033
+ HRESULT res = m_Archive.ReadLocalItemAfterCdItem(item, isAvail);
775
1034
  if (res == S_FALSE)
776
1035
  {
777
1036
  if (item.IsDir() || realOutStream || testMode)
778
1037
  {
779
1038
  RINOK(extractCallback->PrepareOperation(askMode));
780
1039
  realOutStream.Release();
781
- RINOK(extractCallback->SetOperationResult(NExtract::NOperationResult::kUnSupportedMethod));
1040
+ RINOK(extractCallback->SetOperationResult(
1041
+ isAvail ?
1042
+ NExtract::NOperationResult::kHeadersError :
1043
+ NExtract::NOperationResult::kUnavailable));
782
1044
  }
783
1045
  continue;
784
1046
  }
785
1047
  RINOK(res);
786
1048
  }
787
1049
 
788
- if (item.IsDir() || item.IgnoreItem())
1050
+ if (item.IsDir())
789
1051
  {
790
1052
  // if (!testMode)
791
1053
  {
@@ -796,24 +1058,29 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
796
1058
  continue;
797
1059
  }
798
1060
 
799
- currentItemUnPacked = item.UnPackSize;
800
- currentItemPacked = item.PackSize;
801
-
802
1061
  if (!testMode && !realOutStream)
803
1062
  continue;
804
1063
 
805
1064
  RINOK(extractCallback->PrepareOperation(askMode));
806
1065
 
807
1066
  Int32 res;
808
- RINOK(myDecoder.Decode(
1067
+ HRESULT hres = myDecoder.Decode(
809
1068
  EXTERNAL_CODECS_VARS
810
1069
  m_Archive, item, realOutStream, extractCallback,
811
- progress, _numThreads, res));
1070
+ progress,
1071
+ #ifndef _7ZIP_ST
1072
+ _props.NumThreads,
1073
+ #endif
1074
+ res);
1075
+ RINOK(hres);
812
1076
  realOutStream.Release();
813
1077
 
814
1078
  RINOK(extractCallback->SetOperationResult(res))
815
1079
  }
816
- return S_OK;
1080
+
1081
+ lps->InSize = currentTotalPacked;
1082
+ lps->OutSize = currentTotalUnPacked;
1083
+ return lps->SetCur();
817
1084
  COM_TRY_END
818
1085
  }
819
1086