rugged 0.19.0 → 0.28.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (668) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +1 -1
  3. data/README.md +184 -33
  4. data/ext/rugged/extconf.rb +111 -28
  5. data/ext/rugged/rugged.c +327 -89
  6. data/ext/rugged/rugged.h +64 -28
  7. data/ext/rugged/rugged_allocator.c +89 -0
  8. data/ext/rugged/rugged_backend.c +17 -0
  9. data/ext/rugged/rugged_blame.c +278 -0
  10. data/ext/rugged/rugged_blob.c +301 -75
  11. data/ext/rugged/rugged_branch.c +92 -242
  12. data/ext/rugged/rugged_branch_collection.c +388 -0
  13. data/ext/rugged/rugged_commit.c +575 -79
  14. data/ext/rugged/rugged_config.c +129 -36
  15. data/ext/rugged/rugged_cred.c +131 -0
  16. data/ext/rugged/rugged_diff.c +291 -122
  17. data/ext/rugged/rugged_diff_delta.c +16 -22
  18. data/ext/rugged/rugged_diff_hunk.c +35 -51
  19. data/ext/rugged/rugged_diff_line.c +23 -36
  20. data/ext/rugged/rugged_index.c +289 -152
  21. data/ext/rugged/rugged_note.c +50 -60
  22. data/ext/rugged/rugged_object.c +13 -30
  23. data/ext/rugged/rugged_patch.c +400 -0
  24. data/ext/rugged/rugged_rebase.c +397 -0
  25. data/ext/rugged/rugged_reference.c +76 -346
  26. data/ext/rugged/rugged_reference_collection.c +423 -0
  27. data/ext/rugged/rugged_remote.c +438 -461
  28. data/ext/rugged/rugged_remote_collection.c +435 -0
  29. data/ext/rugged/rugged_repo.c +1548 -365
  30. data/ext/rugged/rugged_revwalk.c +378 -99
  31. data/ext/rugged/rugged_settings.c +86 -23
  32. data/ext/rugged/rugged_signature.c +47 -37
  33. data/ext/rugged/rugged_submodule.c +835 -0
  34. data/ext/rugged/rugged_submodule_collection.c +366 -0
  35. data/ext/rugged/rugged_tag.c +88 -210
  36. data/ext/rugged/rugged_tag_collection.c +326 -0
  37. data/ext/rugged/rugged_tree.c +460 -217
  38. data/lib/rugged/attributes.rb +46 -0
  39. data/lib/rugged/blob.rb +33 -0
  40. data/lib/rugged/branch.rb +12 -16
  41. data/lib/rugged/commit.rb +9 -0
  42. data/lib/rugged/console.rb +5 -0
  43. data/lib/rugged/credentials.rb +48 -0
  44. data/lib/rugged/diff/delta.rb +6 -2
  45. data/lib/rugged/diff/hunk.rb +9 -9
  46. data/lib/rugged/diff/line.rb +28 -5
  47. data/lib/rugged/diff.rb +7 -1
  48. data/lib/rugged/index.rb +120 -0
  49. data/lib/rugged/object.rb +5 -0
  50. data/lib/rugged/patch.rb +41 -0
  51. data/lib/rugged/reference.rb +6 -3
  52. data/lib/rugged/remote.rb +5 -9
  53. data/lib/rugged/repository.rb +126 -14
  54. data/lib/rugged/submodule_collection.rb +53 -0
  55. data/lib/rugged/tag.rb +45 -16
  56. data/lib/rugged/tree.rb +163 -1
  57. data/lib/rugged/version.rb +6 -1
  58. data/lib/rugged/walker.rb +5 -0
  59. data/lib/rugged.rb +16 -1
  60. data/vendor/libgit2/AUTHORS +77 -0
  61. data/vendor/libgit2/CMakeLists.txt +317 -0
  62. data/vendor/libgit2/COPYING +993 -0
  63. data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +30 -0
  64. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +29 -0
  65. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +96 -0
  66. data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +11 -0
  67. data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +26 -0
  68. data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +324 -0
  69. data/vendor/libgit2/cmake/Modules/FindHTTP_Parser.cmake +39 -0
  70. data/vendor/libgit2/cmake/Modules/FindIconv.cmake +45 -0
  71. data/vendor/libgit2/cmake/Modules/FindPkgLibraries.cmake +28 -0
  72. data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +28 -0
  73. data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +20 -0
  74. data/vendor/libgit2/cmake/Modules/FindmbedTLS.cmake +93 -0
  75. data/vendor/libgit2/cmake/Modules/IdeSplitSources.cmake +22 -0
  76. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +5 -0
  77. data/vendor/libgit2/deps/http-parser/COPYING +23 -0
  78. data/vendor/libgit2/deps/http-parser/http_parser.c +5 -2
  79. data/vendor/libgit2/deps/http-parser/http_parser.h +2 -0
  80. data/vendor/libgit2/deps/regex/CMakeLists.txt +2 -0
  81. data/vendor/libgit2/deps/regex/COPYING +502 -0
  82. data/vendor/libgit2/deps/regex/regex.c +10 -3
  83. data/vendor/libgit2/deps/winhttp/CMakeLists.txt +26 -0
  84. data/vendor/libgit2/deps/winhttp/COPYING.GPL +993 -0
  85. data/vendor/libgit2/deps/winhttp/COPYING.LGPL +502 -0
  86. data/vendor/libgit2/deps/winhttp/urlmon.h +45 -0
  87. data/vendor/libgit2/deps/winhttp/winhttp.def +29 -0
  88. data/vendor/libgit2/deps/winhttp/winhttp.h +594 -0
  89. data/vendor/libgit2/deps/winhttp/winhttp64.def +29 -0
  90. data/vendor/libgit2/deps/zlib/CMakeLists.txt +5 -0
  91. data/vendor/libgit2/deps/zlib/COPYING +27 -0
  92. data/vendor/libgit2/deps/zlib/adler32.c +51 -34
  93. data/vendor/libgit2/deps/zlib/crc32.c +61 -61
  94. data/vendor/libgit2/deps/zlib/crc32.h +1 -1
  95. data/vendor/libgit2/deps/zlib/deflate.c +681 -352
  96. data/vendor/libgit2/deps/zlib/deflate.h +25 -18
  97. data/vendor/libgit2/deps/zlib/gzguts.h +218 -0
  98. data/vendor/libgit2/deps/zlib/infback.c +640 -0
  99. data/vendor/libgit2/deps/zlib/inffast.c +36 -53
  100. data/vendor/libgit2/deps/zlib/inffixed.h +3 -3
  101. data/vendor/libgit2/deps/zlib/inflate.c +167 -86
  102. data/vendor/libgit2/deps/zlib/inflate.h +7 -4
  103. data/vendor/libgit2/deps/zlib/inftrees.c +24 -50
  104. data/vendor/libgit2/deps/zlib/trees.c +55 -96
  105. data/vendor/libgit2/deps/zlib/zconf.h +499 -19
  106. data/vendor/libgit2/deps/zlib/zlib.h +526 -227
  107. data/vendor/libgit2/deps/zlib/zutil.c +39 -32
  108. data/vendor/libgit2/deps/zlib/zutil.h +75 -78
  109. data/vendor/libgit2/include/git2/annotated_commit.h +125 -0
  110. data/vendor/libgit2/include/git2/apply.h +129 -0
  111. data/vendor/libgit2/include/git2/attr.h +36 -21
  112. data/vendor/libgit2/include/git2/blame.h +229 -0
  113. data/vendor/libgit2/include/git2/blob.h +81 -44
  114. data/vendor/libgit2/include/git2/branch.h +81 -42
  115. data/vendor/libgit2/include/git2/buffer.h +128 -0
  116. data/vendor/libgit2/include/git2/checkout.h +141 -67
  117. data/vendor/libgit2/include/git2/cherrypick.h +92 -0
  118. data/vendor/libgit2/include/git2/clone.h +157 -58
  119. data/vendor/libgit2/include/git2/commit.h +231 -12
  120. data/vendor/libgit2/include/git2/common.h +216 -30
  121. data/vendor/libgit2/include/git2/config.h +274 -48
  122. data/vendor/libgit2/include/git2/cred_helpers.h +4 -4
  123. data/vendor/libgit2/include/git2/deprecated.h +253 -0
  124. data/vendor/libgit2/include/git2/describe.h +189 -0
  125. data/vendor/libgit2/include/git2/diff.h +985 -575
  126. data/vendor/libgit2/include/git2/errors.h +93 -52
  127. data/vendor/libgit2/include/git2/filter.h +217 -0
  128. data/vendor/libgit2/include/git2/global.h +44 -0
  129. data/vendor/libgit2/include/git2/graph.h +17 -0
  130. data/vendor/libgit2/include/git2/ignore.h +2 -2
  131. data/vendor/libgit2/include/git2/index.h +269 -94
  132. data/vendor/libgit2/include/git2/indexer.h +44 -12
  133. data/vendor/libgit2/include/git2/mailmap.h +115 -0
  134. data/vendor/libgit2/include/git2/merge.h +501 -64
  135. data/vendor/libgit2/include/git2/message.h +52 -17
  136. data/vendor/libgit2/include/git2/net.h +11 -5
  137. data/vendor/libgit2/include/git2/notes.h +120 -16
  138. data/vendor/libgit2/include/git2/object.h +62 -23
  139. data/vendor/libgit2/include/git2/odb.h +140 -24
  140. data/vendor/libgit2/include/git2/odb_backend.h +56 -12
  141. data/vendor/libgit2/include/git2/oid.h +17 -18
  142. data/vendor/libgit2/include/git2/oidarray.h +40 -0
  143. data/vendor/libgit2/include/git2/pack.h +86 -7
  144. data/vendor/libgit2/include/git2/patch.h +274 -0
  145. data/vendor/libgit2/include/git2/pathspec.h +280 -0
  146. data/vendor/libgit2/include/git2/proxy.h +96 -0
  147. data/vendor/libgit2/include/git2/rebase.h +323 -0
  148. data/vendor/libgit2/include/git2/reflog.h +12 -9
  149. data/vendor/libgit2/include/git2/refs.h +241 -46
  150. data/vendor/libgit2/include/git2/refspec.h +20 -4
  151. data/vendor/libgit2/include/git2/remote.h +636 -209
  152. data/vendor/libgit2/include/git2/repository.h +267 -57
  153. data/vendor/libgit2/include/git2/reset.h +36 -6
  154. data/vendor/libgit2/include/git2/revert.h +91 -0
  155. data/vendor/libgit2/include/git2/revparse.h +27 -16
  156. data/vendor/libgit2/include/git2/revwalk.h +78 -35
  157. data/vendor/libgit2/include/git2/signature.h +32 -5
  158. data/vendor/libgit2/include/git2/stash.h +160 -21
  159. data/vendor/libgit2/include/git2/status.h +92 -30
  160. data/vendor/libgit2/include/git2/submodule.h +226 -133
  161. data/vendor/libgit2/include/git2/sys/alloc.h +101 -0
  162. data/vendor/libgit2/include/git2/sys/commit.h +38 -4
  163. data/vendor/libgit2/include/git2/sys/config.h +68 -9
  164. data/vendor/libgit2/include/git2/sys/diff.h +94 -0
  165. data/vendor/libgit2/include/git2/sys/filter.h +332 -0
  166. data/vendor/libgit2/include/git2/sys/hashsig.h +106 -0
  167. data/vendor/libgit2/include/git2/sys/index.h +6 -5
  168. data/vendor/libgit2/include/git2/sys/mempack.h +86 -0
  169. data/vendor/libgit2/include/git2/sys/merge.h +182 -0
  170. data/vendor/libgit2/include/git2/sys/odb_backend.h +66 -28
  171. data/vendor/libgit2/include/git2/sys/openssl.h +38 -0
  172. data/vendor/libgit2/include/git2/sys/path.h +64 -0
  173. data/vendor/libgit2/include/git2/sys/refdb_backend.h +79 -19
  174. data/vendor/libgit2/include/git2/sys/reflog.h +21 -0
  175. data/vendor/libgit2/include/git2/sys/refs.h +13 -2
  176. data/vendor/libgit2/include/git2/sys/repository.h +64 -1
  177. data/vendor/libgit2/include/git2/sys/stream.h +138 -0
  178. data/vendor/libgit2/include/git2/sys/time.h +31 -0
  179. data/vendor/libgit2/include/git2/sys/transport.h +439 -0
  180. data/vendor/libgit2/include/git2/tag.h +11 -2
  181. data/vendor/libgit2/include/git2/trace.h +1 -1
  182. data/vendor/libgit2/include/git2/transaction.h +121 -0
  183. data/vendor/libgit2/include/git2/transport.h +261 -292
  184. data/vendor/libgit2/include/git2/tree.h +111 -21
  185. data/vendor/libgit2/include/git2/types.h +244 -32
  186. data/vendor/libgit2/include/git2/version.h +5 -2
  187. data/vendor/libgit2/include/git2/worktree.h +255 -0
  188. data/vendor/libgit2/include/git2.h +50 -40
  189. data/vendor/libgit2/libgit2.pc.in +13 -0
  190. data/vendor/libgit2/src/CMakeLists.txt +525 -0
  191. data/vendor/libgit2/src/alloc.c +55 -0
  192. data/vendor/libgit2/src/alloc.h +40 -0
  193. data/vendor/libgit2/src/annotated_commit.c +228 -0
  194. data/vendor/libgit2/src/annotated_commit.h +52 -0
  195. data/vendor/libgit2/src/apply.c +855 -0
  196. data/vendor/libgit2/src/apply.h +25 -0
  197. data/vendor/libgit2/src/array.h +74 -16
  198. data/vendor/libgit2/src/attr.c +239 -408
  199. data/vendor/libgit2/src/attr.h +3 -33
  200. data/vendor/libgit2/src/attr_file.c +424 -156
  201. data/vendor/libgit2/src/attr_file.h +95 -23
  202. data/vendor/libgit2/src/attrcache.c +469 -0
  203. data/vendor/libgit2/src/attrcache.h +37 -5
  204. data/vendor/libgit2/src/bitvec.h +75 -0
  205. data/vendor/libgit2/src/blame.c +532 -0
  206. data/vendor/libgit2/src/blame.h +95 -0
  207. data/vendor/libgit2/src/blame_git.c +668 -0
  208. data/vendor/libgit2/src/blame_git.h +22 -0
  209. data/vendor/libgit2/src/blob.c +233 -129
  210. data/vendor/libgit2/src/blob.h +29 -1
  211. data/vendor/libgit2/src/branch.c +295 -197
  212. data/vendor/libgit2/src/branch.h +2 -0
  213. data/vendor/libgit2/src/buf_text.c +52 -27
  214. data/vendor/libgit2/src/buf_text.h +7 -7
  215. data/vendor/libgit2/src/buffer.c +609 -52
  216. data/vendor/libgit2/src/buffer.h +68 -23
  217. data/vendor/libgit2/src/cache.c +48 -51
  218. data/vendor/libgit2/src/cache.h +6 -4
  219. data/vendor/libgit2/src/cc-compat.h +35 -7
  220. data/vendor/libgit2/src/checkout.c +1827 -483
  221. data/vendor/libgit2/src/checkout.h +4 -1
  222. data/vendor/libgit2/src/cherrypick.c +230 -0
  223. data/vendor/libgit2/src/clone.c +338 -258
  224. data/vendor/libgit2/src/{compress.h → clone.h} +5 -5
  225. data/vendor/libgit2/src/commit.c +711 -124
  226. data/vendor/libgit2/src/commit.h +10 -3
  227. data/vendor/libgit2/src/commit_list.c +21 -14
  228. data/vendor/libgit2/src/commit_list.h +9 -3
  229. data/vendor/libgit2/src/common.h +153 -13
  230. data/vendor/libgit2/src/config.c +871 -242
  231. data/vendor/libgit2/src/config.h +58 -14
  232. data/vendor/libgit2/src/config_backend.h +84 -0
  233. data/vendor/libgit2/src/config_cache.c +44 -18
  234. data/vendor/libgit2/src/config_entries.c +259 -0
  235. data/vendor/libgit2/src/config_entries.h +23 -0
  236. data/vendor/libgit2/src/config_file.c +837 -1113
  237. data/vendor/libgit2/src/config_mem.c +224 -0
  238. data/vendor/libgit2/src/config_parse.c +558 -0
  239. data/vendor/libgit2/src/config_parse.h +64 -0
  240. data/vendor/libgit2/src/crlf.c +290 -195
  241. data/vendor/libgit2/src/date.c +35 -7
  242. data/vendor/libgit2/src/delta.c +275 -71
  243. data/vendor/libgit2/src/delta.h +80 -58
  244. data/vendor/libgit2/src/describe.c +893 -0
  245. data/vendor/libgit2/src/diff.c +330 -1128
  246. data/vendor/libgit2/src/diff.h +25 -67
  247. data/vendor/libgit2/src/diff_driver.c +225 -109
  248. data/vendor/libgit2/src/diff_driver.h +5 -2
  249. data/vendor/libgit2/src/diff_file.c +128 -103
  250. data/vendor/libgit2/src/diff_file.h +17 -12
  251. data/vendor/libgit2/src/diff_generate.c +1622 -0
  252. data/vendor/libgit2/src/diff_generate.h +128 -0
  253. data/vendor/libgit2/src/diff_parse.c +108 -0
  254. data/vendor/libgit2/src/diff_parse.h +20 -0
  255. data/vendor/libgit2/src/diff_print.c +578 -218
  256. data/vendor/libgit2/src/diff_stats.c +362 -0
  257. data/vendor/libgit2/src/diff_tform.c +429 -257
  258. data/vendor/libgit2/src/diff_tform.h +25 -0
  259. data/vendor/libgit2/src/diff_xdiff.c +143 -46
  260. data/vendor/libgit2/src/diff_xdiff.h +12 -5
  261. data/vendor/libgit2/src/errors.c +150 -34
  262. data/vendor/libgit2/src/features.h.in +37 -0
  263. data/vendor/libgit2/src/fetch.c +69 -46
  264. data/vendor/libgit2/src/fetch.h +6 -12
  265. data/vendor/libgit2/src/fetchhead.c +40 -33
  266. data/vendor/libgit2/src/fetchhead.h +5 -4
  267. data/vendor/libgit2/src/filebuf.c +163 -61
  268. data/vendor/libgit2/src/filebuf.h +13 -7
  269. data/vendor/libgit2/src/fileops.c +549 -407
  270. data/vendor/libgit2/src/fileops.h +97 -106
  271. data/vendor/libgit2/src/filter.c +989 -46
  272. data/vendor/libgit2/src/filter.h +21 -70
  273. data/vendor/libgit2/src/fnmatch.c +67 -11
  274. data/vendor/libgit2/src/fnmatch.h +27 -7
  275. data/vendor/libgit2/src/global.c +257 -63
  276. data/vendor/libgit2/src/global.h +19 -0
  277. data/vendor/libgit2/src/graph.c +39 -23
  278. data/vendor/libgit2/src/hash/hash_collisiondetect.h +51 -0
  279. data/vendor/libgit2/src/hash/hash_common_crypto.h +61 -0
  280. data/vendor/libgit2/src/hash/hash_generic.c +3 -3
  281. data/vendor/libgit2/src/hash/hash_generic.h +10 -5
  282. data/vendor/libgit2/src/hash/hash_mbedtls.c +38 -0
  283. data/vendor/libgit2/src/hash/hash_mbedtls.h +24 -0
  284. data/vendor/libgit2/src/hash/hash_openssl.h +26 -8
  285. data/vendor/libgit2/src/hash/hash_win32.c +71 -43
  286. data/vendor/libgit2/src/hash/hash_win32.h +4 -3
  287. data/vendor/libgit2/src/hash/sha1dc/sha1.c +1900 -0
  288. data/vendor/libgit2/src/hash/sha1dc/sha1.h +110 -0
  289. data/vendor/libgit2/src/hash/sha1dc/ubc_check.c +372 -0
  290. data/vendor/libgit2/src/hash/sha1dc/ubc_check.h +52 -0
  291. data/vendor/libgit2/src/hash.c +0 -1
  292. data/vendor/libgit2/src/hash.h +13 -6
  293. data/vendor/libgit2/src/hashsig.c +121 -126
  294. data/vendor/libgit2/src/ident.c +129 -0
  295. data/vendor/libgit2/src/idxmap.c +153 -0
  296. data/vendor/libgit2/src/idxmap.h +41 -0
  297. data/vendor/libgit2/src/ignore.c +362 -123
  298. data/vendor/libgit2/src/ignore.h +16 -4
  299. data/vendor/libgit2/src/index.c +2131 -692
  300. data/vendor/libgit2/src/index.h +138 -6
  301. data/vendor/libgit2/src/indexer.c +866 -266
  302. data/vendor/libgit2/src/indexer.h +16 -0
  303. data/vendor/libgit2/src/integer.h +106 -0
  304. data/vendor/libgit2/src/iterator.c +1888 -967
  305. data/vendor/libgit2/src/iterator.h +130 -67
  306. data/vendor/libgit2/src/khash.h +43 -29
  307. data/vendor/libgit2/src/mailmap.c +485 -0
  308. data/vendor/libgit2/src/mailmap.h +35 -0
  309. data/vendor/libgit2/src/map.h +1 -1
  310. data/vendor/libgit2/src/merge.c +1679 -479
  311. data/vendor/libgit2/src/merge.h +89 -22
  312. data/vendor/libgit2/src/merge_driver.c +426 -0
  313. data/vendor/libgit2/src/merge_driver.h +62 -0
  314. data/vendor/libgit2/src/merge_file.c +238 -101
  315. data/vendor/libgit2/src/message.c +4 -28
  316. data/vendor/libgit2/src/message.h +3 -1
  317. data/vendor/libgit2/src/mwindow.c +123 -15
  318. data/vendor/libgit2/src/mwindow.h +10 -1
  319. data/vendor/libgit2/src/netops.c +178 -499
  320. data/vendor/libgit2/src/netops.h +51 -27
  321. data/vendor/libgit2/src/notes.c +251 -94
  322. data/vendor/libgit2/src/notes.h +5 -2
  323. data/vendor/libgit2/src/object.c +253 -67
  324. data/vendor/libgit2/src/object.h +40 -2
  325. data/vendor/libgit2/src/object_api.c +30 -11
  326. data/vendor/libgit2/src/odb.c +765 -201
  327. data/vendor/libgit2/src/odb.h +40 -8
  328. data/vendor/libgit2/src/odb_loose.c +560 -346
  329. data/vendor/libgit2/src/odb_mempack.c +185 -0
  330. data/vendor/libgit2/src/odb_pack.c +117 -73
  331. data/vendor/libgit2/src/offmap.c +113 -0
  332. data/vendor/libgit2/src/offmap.h +32 -42
  333. data/vendor/libgit2/src/oid.c +45 -25
  334. data/vendor/libgit2/src/oid.h +26 -8
  335. data/vendor/libgit2/src/oidarray.c +34 -0
  336. data/vendor/libgit2/src/oidarray.h +20 -0
  337. data/vendor/libgit2/src/oidmap.c +125 -0
  338. data/vendor/libgit2/src/oidmap.h +30 -17
  339. data/vendor/libgit2/src/pack-objects.c +688 -265
  340. data/vendor/libgit2/src/pack-objects.h +27 -13
  341. data/vendor/libgit2/src/pack.c +418 -202
  342. data/vendor/libgit2/src/pack.h +25 -16
  343. data/vendor/libgit2/src/parse.c +124 -0
  344. data/vendor/libgit2/src/parse.h +61 -0
  345. data/vendor/libgit2/src/patch.c +223 -0
  346. data/vendor/libgit2/src/patch.h +68 -0
  347. data/vendor/libgit2/src/patch_generate.c +901 -0
  348. data/vendor/libgit2/src/patch_generate.h +69 -0
  349. data/vendor/libgit2/src/patch_parse.c +1136 -0
  350. data/vendor/libgit2/src/patch_parse.h +51 -0
  351. data/vendor/libgit2/src/path.c +1247 -241
  352. data/vendor/libgit2/src/path.h +353 -57
  353. data/vendor/libgit2/src/pathspec.c +586 -58
  354. data/vendor/libgit2/src/pathspec.h +37 -15
  355. data/vendor/libgit2/src/pool.c +134 -221
  356. data/vendor/libgit2/src/pool.h +38 -50
  357. data/vendor/libgit2/src/posix.c +76 -10
  358. data/vendor/libgit2/src/posix.h +74 -32
  359. data/vendor/libgit2/src/pqueue.c +79 -117
  360. data/vendor/libgit2/src/pqueue.h +38 -82
  361. data/vendor/libgit2/src/proxy.c +39 -0
  362. data/vendor/libgit2/src/proxy.h +17 -0
  363. data/vendor/libgit2/src/push.c +178 -279
  364. data/vendor/libgit2/src/push.h +93 -4
  365. data/vendor/libgit2/src/reader.c +265 -0
  366. data/vendor/libgit2/src/reader.h +107 -0
  367. data/vendor/libgit2/src/rebase.c +1364 -0
  368. data/vendor/libgit2/src/refdb.c +74 -19
  369. data/vendor/libgit2/src/refdb.h +16 -3
  370. data/vendor/libgit2/src/refdb_fs.c +1472 -603
  371. data/vendor/libgit2/src/refdb_fs.h +4 -0
  372. data/vendor/libgit2/src/reflog.c +40 -330
  373. data/vendor/libgit2/src/reflog.h +8 -2
  374. data/vendor/libgit2/src/refs.c +641 -225
  375. data/vendor/libgit2/src/refs.h +53 -6
  376. data/vendor/libgit2/src/refspec.c +175 -62
  377. data/vendor/libgit2/src/refspec.h +10 -25
  378. data/vendor/libgit2/src/remote.c +1741 -723
  379. data/vendor/libgit2/src/remote.h +17 -5
  380. data/vendor/libgit2/src/repository.c +1505 -421
  381. data/vendor/libgit2/src/repository.h +95 -15
  382. data/vendor/libgit2/src/reset.c +63 -26
  383. data/vendor/libgit2/src/revert.c +232 -0
  384. data/vendor/libgit2/src/revparse.c +94 -80
  385. data/vendor/libgit2/src/revwalk.c +427 -194
  386. data/vendor/libgit2/src/revwalk.h +14 -5
  387. data/vendor/libgit2/src/settings.c +290 -0
  388. data/vendor/libgit2/src/sha1_lookup.c +16 -159
  389. data/vendor/libgit2/src/sha1_lookup.h +5 -4
  390. data/vendor/libgit2/src/signature.c +138 -26
  391. data/vendor/libgit2/src/signature.h +5 -0
  392. data/vendor/libgit2/src/sortedcache.c +395 -0
  393. data/vendor/libgit2/src/sortedcache.h +180 -0
  394. data/vendor/libgit2/src/stash.c +629 -168
  395. data/vendor/libgit2/src/status.c +125 -75
  396. data/vendor/libgit2/src/status.h +4 -2
  397. data/vendor/libgit2/src/stdalloc.c +120 -0
  398. data/vendor/libgit2/src/stdalloc.h +17 -0
  399. data/vendor/libgit2/src/stream.h +86 -0
  400. data/vendor/libgit2/src/streams/mbedtls.c +483 -0
  401. data/vendor/libgit2/src/streams/mbedtls.h +23 -0
  402. data/vendor/libgit2/src/streams/openssl.c +789 -0
  403. data/vendor/libgit2/src/streams/openssl.h +23 -0
  404. data/vendor/libgit2/src/streams/registry.c +118 -0
  405. data/vendor/libgit2/src/streams/registry.h +19 -0
  406. data/vendor/libgit2/src/streams/socket.c +235 -0
  407. data/vendor/libgit2/src/streams/socket.h +23 -0
  408. data/vendor/libgit2/src/streams/stransport.c +323 -0
  409. data/vendor/libgit2/src/streams/stransport.h +21 -0
  410. data/vendor/libgit2/src/streams/tls.c +73 -0
  411. data/vendor/libgit2/src/streams/tls.h +31 -0
  412. data/vendor/libgit2/src/strmap.c +147 -0
  413. data/vendor/libgit2/src/strmap.h +46 -51
  414. data/vendor/libgit2/src/strnlen.h +24 -0
  415. data/vendor/libgit2/src/submodule.c +1633 -877
  416. data/vendor/libgit2/src/submodule.h +83 -21
  417. data/vendor/libgit2/src/sysdir.c +355 -0
  418. data/vendor/libgit2/src/sysdir.h +119 -0
  419. data/vendor/libgit2/src/tag.c +87 -62
  420. data/vendor/libgit2/src/tag.h +4 -1
  421. data/vendor/libgit2/src/thread-utils.c +3 -0
  422. data/vendor/libgit2/src/thread-utils.h +71 -35
  423. data/vendor/libgit2/src/trace.c +4 -4
  424. data/vendor/libgit2/src/trace.h +11 -3
  425. data/vendor/libgit2/src/trailer.c +416 -0
  426. data/vendor/libgit2/src/transaction.c +382 -0
  427. data/vendor/libgit2/src/transaction.h +14 -0
  428. data/vendor/libgit2/src/transport.c +133 -67
  429. data/vendor/libgit2/src/transports/auth.c +75 -0
  430. data/vendor/libgit2/src/transports/auth.h +64 -0
  431. data/vendor/libgit2/src/transports/auth_negotiate.c +277 -0
  432. data/vendor/libgit2/src/transports/auth_negotiate.h +27 -0
  433. data/vendor/libgit2/src/transports/cred.c +296 -68
  434. data/vendor/libgit2/src/transports/cred.h +16 -0
  435. data/vendor/libgit2/src/transports/cred_helpers.c +4 -0
  436. data/vendor/libgit2/src/transports/git.c +108 -90
  437. data/vendor/libgit2/src/transports/http.c +803 -258
  438. data/vendor/libgit2/src/transports/http.h +25 -0
  439. data/vendor/libgit2/src/transports/local.c +265 -169
  440. data/vendor/libgit2/src/transports/smart.c +255 -45
  441. data/vendor/libgit2/src/transports/smart.h +42 -22
  442. data/vendor/libgit2/src/transports/smart_pkt.c +250 -159
  443. data/vendor/libgit2/src/transports/smart_protocol.c +414 -196
  444. data/vendor/libgit2/src/transports/ssh.c +645 -236
  445. data/vendor/libgit2/src/transports/ssh.h +14 -0
  446. data/vendor/libgit2/src/transports/winhttp.c +809 -353
  447. data/vendor/libgit2/src/tree-cache.c +138 -52
  448. data/vendor/libgit2/src/tree-cache.h +14 -7
  449. data/vendor/libgit2/src/tree.c +620 -259
  450. data/vendor/libgit2/src/tree.h +12 -19
  451. data/vendor/libgit2/src/tsort.c +3 -2
  452. data/vendor/libgit2/src/unix/map.c +25 -7
  453. data/vendor/libgit2/src/unix/posix.h +77 -12
  454. data/vendor/libgit2/src/unix/pthread.h +56 -0
  455. data/vendor/libgit2/src/unix/realpath.c +12 -8
  456. data/vendor/libgit2/src/userdiff.h +208 -0
  457. data/vendor/libgit2/src/util.c +349 -165
  458. data/vendor/libgit2/src/util.h +167 -85
  459. data/vendor/libgit2/src/varint.c +43 -0
  460. data/vendor/libgit2/src/varint.h +17 -0
  461. data/vendor/libgit2/src/vector.c +156 -33
  462. data/vendor/libgit2/src/vector.h +41 -5
  463. data/vendor/libgit2/src/win32/dir.c +22 -42
  464. data/vendor/libgit2/src/win32/dir.h +7 -5
  465. data/vendor/libgit2/src/win32/error.c +6 -32
  466. data/vendor/libgit2/src/win32/error.h +4 -2
  467. data/vendor/libgit2/src/win32/findfile.c +62 -69
  468. data/vendor/libgit2/src/win32/findfile.h +5 -13
  469. data/vendor/libgit2/src/win32/git2.rc +44 -0
  470. data/vendor/libgit2/src/win32/map.c +39 -11
  471. data/vendor/libgit2/src/win32/mingw-compat.h +10 -11
  472. data/vendor/libgit2/src/win32/msvc-compat.h +10 -33
  473. data/vendor/libgit2/src/win32/path_w32.c +476 -0
  474. data/vendor/libgit2/src/win32/path_w32.h +104 -0
  475. data/vendor/libgit2/src/win32/posix.h +35 -30
  476. data/vendor/libgit2/src/win32/posix_w32.c +659 -327
  477. data/vendor/libgit2/src/win32/precompiled.h +7 -2
  478. data/vendor/libgit2/src/win32/reparse.h +57 -0
  479. data/vendor/libgit2/src/win32/thread.c +258 -0
  480. data/vendor/libgit2/src/win32/thread.h +64 -0
  481. data/vendor/libgit2/src/win32/utf-conv.c +127 -62
  482. data/vendor/libgit2/src/win32/utf-conv.h +47 -6
  483. data/vendor/libgit2/src/win32/version.h +21 -4
  484. data/vendor/libgit2/src/win32/w32_buffer.c +54 -0
  485. data/vendor/libgit2/src/win32/w32_buffer.h +20 -0
  486. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +438 -0
  487. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +129 -0
  488. data/vendor/libgit2/src/win32/w32_stack.c +193 -0
  489. data/vendor/libgit2/src/win32/w32_stack.h +140 -0
  490. data/vendor/libgit2/src/win32/w32_util.c +95 -0
  491. data/vendor/libgit2/src/win32/w32_util.h +170 -0
  492. data/vendor/libgit2/src/win32/win32-compat.h +52 -0
  493. data/vendor/libgit2/src/worktree.c +578 -0
  494. data/vendor/libgit2/src/worktree.h +39 -0
  495. data/vendor/libgit2/src/xdiff/xdiff.h +33 -18
  496. data/vendor/libgit2/src/xdiff/xdiffi.c +578 -88
  497. data/vendor/libgit2/src/xdiff/xdiffi.h +3 -2
  498. data/vendor/libgit2/src/xdiff/xemit.c +106 -45
  499. data/vendor/libgit2/src/xdiff/xemit.h +3 -3
  500. data/vendor/libgit2/src/xdiff/xhistogram.c +5 -4
  501. data/vendor/libgit2/src/xdiff/xinclude.h +3 -2
  502. data/vendor/libgit2/src/xdiff/xmacros.h +2 -2
  503. data/vendor/libgit2/src/xdiff/xmerge.c +167 -48
  504. data/vendor/libgit2/src/xdiff/xpatience.c +42 -10
  505. data/vendor/libgit2/src/xdiff/xprepare.c +14 -14
  506. data/vendor/libgit2/src/xdiff/xprepare.h +2 -2
  507. data/vendor/libgit2/src/xdiff/xtypes.h +2 -2
  508. data/vendor/libgit2/src/xdiff/xutils.c +60 -56
  509. data/vendor/libgit2/src/xdiff/xutils.h +3 -5
  510. data/vendor/libgit2/src/zstream.c +205 -0
  511. data/vendor/libgit2/src/zstream.h +53 -0
  512. metadata +281 -233
  513. data/Rakefile +0 -61
  514. data/ext/rugged/rugged_diff_patch.c +0 -169
  515. data/lib/rugged/diff/patch.rb +0 -28
  516. data/test/blob_test.rb +0 -341
  517. data/test/branch_test.rb +0 -199
  518. data/test/commit_test.rb +0 -104
  519. data/test/config_test.rb +0 -45
  520. data/test/coverage/cover.rb +0 -133
  521. data/test/diff_test.rb +0 -777
  522. data/test/errors_test.rb +0 -34
  523. data/test/fixtures/alternate/objects/14/6ae76773c91e3b1d00cf7a338ec55ae58297e2 +0 -0
  524. data/test/fixtures/alternate/objects/14/9c32d47e99d0a3572ff1e70a2e0051bbf347a9 +0 -0
  525. data/test/fixtures/alternate/objects/14/fb3108588f9421bf764041e5e3ac305eb6277f +0 -0
  526. data/test/fixtures/archive.tar.gz +0 -0
  527. data/test/fixtures/attr/attr0 +0 -1
  528. data/test/fixtures/attr/attr1 +0 -29
  529. data/test/fixtures/attr/attr2 +0 -21
  530. data/test/fixtures/attr/attr3 +0 -4
  531. data/test/fixtures/attr/binfile +0 -1
  532. data/test/fixtures/attr/dir/file +0 -0
  533. data/test/fixtures/attr/file +0 -1
  534. data/test/fixtures/attr/gitattributes +0 -29
  535. data/test/fixtures/attr/gitignore +0 -2
  536. data/test/fixtures/attr/ign +0 -1
  537. data/test/fixtures/attr/macro_bad +0 -1
  538. data/test/fixtures/attr/macro_test +0 -1
  539. data/test/fixtures/attr/root_test1 +0 -1
  540. data/test/fixtures/attr/root_test2 +0 -6
  541. data/test/fixtures/attr/root_test3 +0 -19
  542. data/test/fixtures/attr/root_test4.txt +0 -14
  543. data/test/fixtures/attr/sub/abc +0 -37
  544. data/test/fixtures/attr/sub/dir/file +0 -0
  545. data/test/fixtures/attr/sub/file +0 -1
  546. data/test/fixtures/attr/sub/ign/file +0 -1
  547. data/test/fixtures/attr/sub/ign/sub/file +0 -1
  548. data/test/fixtures/attr/sub/sub/dir +0 -0
  549. data/test/fixtures/attr/sub/sub/file +0 -1
  550. data/test/fixtures/attr/sub/sub/subsub.txt +0 -1
  551. data/test/fixtures/attr/sub/subdir_test1 +0 -2
  552. data/test/fixtures/attr/sub/subdir_test2.txt +0 -1
  553. data/test/fixtures/diff/another.txt +0 -38
  554. data/test/fixtures/diff/readme.txt +0 -36
  555. data/test/fixtures/mergedrepo/conflicts-one.txt +0 -5
  556. data/test/fixtures/mergedrepo/conflicts-two.txt +0 -5
  557. data/test/fixtures/mergedrepo/one.txt +0 -10
  558. data/test/fixtures/mergedrepo/two.txt +0 -12
  559. data/test/fixtures/status/current_file +0 -1
  560. data/test/fixtures/status/ignored_file +0 -1
  561. data/test/fixtures/status/modified_file +0 -2
  562. data/test/fixtures/status/new_file +0 -1
  563. data/test/fixtures/status/staged_changes +0 -2
  564. data/test/fixtures/status/staged_changes_modified_file +0 -3
  565. data/test/fixtures/status/staged_delete_modified_file +0 -1
  566. data/test/fixtures/status/staged_new_file +0 -1
  567. data/test/fixtures/status/staged_new_file_modified_file +0 -2
  568. data/test/fixtures/status/subdir/current_file +0 -1
  569. data/test/fixtures/status/subdir/modified_file +0 -2
  570. data/test/fixtures/status/subdir/new_file +0 -1
  571. data/test/fixtures/status/subdir.txt +0 -2
  572. data/test/fixtures/status//350/277/231 +0 -1
  573. data/test/fixtures/testrepo.git/HEAD +0 -1
  574. data/test/fixtures/testrepo.git/config +0 -13
  575. data/test/fixtures/testrepo.git/description +0 -1
  576. data/test/fixtures/testrepo.git/index +0 -0
  577. data/test/fixtures/testrepo.git/info/exclude +0 -6
  578. data/test/fixtures/testrepo.git/logs/HEAD +0 -3
  579. data/test/fixtures/testrepo.git/logs/refs/heads/master +0 -3
  580. data/test/fixtures/testrepo.git/logs/refs/notes/commits +0 -1
  581. data/test/fixtures/testrepo.git/objects/0c/37a5391bbff43c37f0d0371823a5509eed5b1d +0 -0
  582. data/test/fixtures/testrepo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 +0 -0
  583. data/test/fixtures/testrepo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 +0 -0
  584. data/test/fixtures/testrepo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd +0 -0
  585. data/test/fixtures/testrepo.git/objects/2d/2eff63372b08adf0a9eb84109ccf7d19e2f3a2 +0 -0
  586. data/test/fixtures/testrepo.git/objects/36/060c58702ed4c2a40832c51758d5344201d89a +0 -2
  587. data/test/fixtures/testrepo.git/objects/44/1034f860c1d5d90e4188d11ae0d325176869a8 +0 -1
  588. data/test/fixtures/testrepo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 +0 -0
  589. data/test/fixtures/testrepo.git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045 +0 -2
  590. data/test/fixtures/testrepo.git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644 +0 -2
  591. data/test/fixtures/testrepo.git/objects/60/d415052a33de2150bf68757f6461df4f563ae4 +0 -0
  592. data/test/fixtures/testrepo.git/objects/61/9f9935957e010c419cb9d15621916ddfcc0b96 +0 -0
  593. data/test/fixtures/testrepo.git/objects/68/8a8f4ef7496901d15322972f96e212a9e466cc +0 -1
  594. data/test/fixtures/testrepo.git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a +0 -0
  595. data/test/fixtures/testrepo.git/objects/77/71329dfa3002caf8c61a0ceb62a31d09023f37 +0 -0
  596. data/test/fixtures/testrepo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d +0 -0
  597. data/test/fixtures/testrepo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479 +0 -0
  598. data/test/fixtures/testrepo.git/objects/94/eca2de348d5f672faf56b0decafa5937e3235e +0 -0
  599. data/test/fixtures/testrepo.git/objects/9b/7384fe1676186192842f5d3e129457b62db9e3 +0 -0
  600. data/test/fixtures/testrepo.git/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a +0 -3
  601. data/test/fixtures/testrepo.git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f +0 -2
  602. data/test/fixtures/testrepo.git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd +0 -0
  603. data/test/fixtures/testrepo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 +0 -0
  604. data/test/fixtures/testrepo.git/objects/b7/4713326bc972cc15751ed504dca6f6f3b91f7a +0 -3
  605. data/test/fixtures/testrepo.git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644 +0 -3
  606. data/test/fixtures/testrepo.git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd +0 -3
  607. data/test/fixtures/testrepo.git/objects/c4/dc1555e4d4fa0e0c9c3fc46734c7c35b3ce90b +0 -0
  608. data/test/fixtures/testrepo.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  609. data/test/fixtures/testrepo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 +0 -0
  610. data/test/fixtures/testrepo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 +0 -0
  611. data/test/fixtures/testrepo.git/objects/fd/093bff70906175335656e6ce6ae05783708765 +0 -0
  612. data/test/fixtures/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx +0 -0
  613. data/test/fixtures/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack +0 -0
  614. data/test/fixtures/testrepo.git/packed-refs +0 -2
  615. data/test/fixtures/testrepo.git/refs/heads/master +0 -1
  616. data/test/fixtures/testrepo.git/refs/notes/commits +0 -1
  617. data/test/fixtures/testrepo.git/refs/tags/v0.9 +0 -1
  618. data/test/fixtures/testrepo.git/refs/tags/v1.0 +0 -1
  619. data/test/fixtures/text_file.md +0 -464
  620. data/test/fixtures/unsymlinked.git/HEAD +0 -1
  621. data/test/fixtures/unsymlinked.git/config +0 -6
  622. data/test/fixtures/unsymlinked.git/description +0 -1
  623. data/test/fixtures/unsymlinked.git/info/exclude +0 -2
  624. data/test/fixtures/unsymlinked.git/objects/08/8b64704e0d6b8bd061dea879418cb5442a3fbf +0 -0
  625. data/test/fixtures/unsymlinked.git/objects/13/a5e939bca25940c069fd2169d993dba328e30b +0 -0
  626. data/test/fixtures/unsymlinked.git/objects/19/bf568e59e3a0b363cafb4106226e62d4a4c41c +0 -0
  627. data/test/fixtures/unsymlinked.git/objects/58/1fadd35b4cf320d102a152f918729011604773 +0 -0
  628. data/test/fixtures/unsymlinked.git/objects/5c/87b6791e8b13da658a14d1ef7e09b5dc3bac8c +0 -0
  629. data/test/fixtures/unsymlinked.git/objects/6f/e5f5398af85fb3de8a6aba0339b6d3bfa26a27 +0 -0
  630. data/test/fixtures/unsymlinked.git/objects/7f/ccd75616ec188b8f1b23d67506a334cc34a49d +0 -0
  631. data/test/fixtures/unsymlinked.git/objects/80/6999882bf91d24241e4077906b9017605eb1f3 +0 -0
  632. data/test/fixtures/unsymlinked.git/objects/83/7d176303c5005505ec1e4a30231c40930c0230 +0 -0
  633. data/test/fixtures/unsymlinked.git/objects/a8/595ccca04f40818ae0155c8f9c77a230e597b6 +0 -2
  634. data/test/fixtures/unsymlinked.git/objects/cf/8f1cf5cce859c438d6cc067284cb5e161206e7 +0 -0
  635. data/test/fixtures/unsymlinked.git/objects/d5/278d05c8607ec420bfee4cf219fbc0eeebfd6a +0 -0
  636. data/test/fixtures/unsymlinked.git/objects/f4/e16fb76536591a41454194058d048d8e4dd2e9 +0 -0
  637. data/test/fixtures/unsymlinked.git/objects/f9/e65619d93fdf2673882e0a261c5e93b1a84006 +0 -0
  638. data/test/fixtures/unsymlinked.git/refs/heads/exe-file +0 -1
  639. data/test/fixtures/unsymlinked.git/refs/heads/master +0 -1
  640. data/test/fixtures/unsymlinked.git/refs/heads/reg-file +0 -1
  641. data/test/index_test.rb +0 -333
  642. data/test/lib_test.rb +0 -127
  643. data/test/note_test.rb +0 -158
  644. data/test/object_test.rb +0 -43
  645. data/test/reference_test.rb +0 -207
  646. data/test/remote_test.rb +0 -324
  647. data/test/repo_pack_test.rb +0 -24
  648. data/test/repo_reset_test.rb +0 -82
  649. data/test/repo_test.rb +0 -402
  650. data/test/tag_test.rb +0 -68
  651. data/test/test_helper.rb +0 -92
  652. data/test/tree_test.rb +0 -91
  653. data/test/walker_test.rb +0 -88
  654. data/vendor/libgit2/Makefile.embed +0 -42
  655. data/vendor/libgit2/include/git2/push.h +0 -131
  656. data/vendor/libgit2/include/git2/threads.h +0 -50
  657. data/vendor/libgit2/src/amiga/map.c +0 -48
  658. data/vendor/libgit2/src/bswap.h +0 -97
  659. data/vendor/libgit2/src/compress.c +0 -53
  660. data/vendor/libgit2/src/config_file.h +0 -60
  661. data/vendor/libgit2/src/delta-apply.c +0 -134
  662. data/vendor/libgit2/src/delta-apply.h +0 -50
  663. data/vendor/libgit2/src/diff_patch.c +0 -995
  664. data/vendor/libgit2/src/diff_patch.h +0 -46
  665. data/vendor/libgit2/src/hashsig.h +0 -72
  666. data/vendor/libgit2/src/merge_file.h +0 -71
  667. data/vendor/libgit2/src/win32/pthread.c +0 -144
  668. data/vendor/libgit2/src/win32/pthread.h +0 -50
@@ -1,5 +1,5 @@
1
1
  /* inflate.c -- zlib decompression
2
- * Copyright (C) 1995-2010 Mark Adler
2
+ * Copyright (C) 1995-2016 Mark Adler
3
3
  * For conditions of distribution and use, see copyright notice in zlib.h
4
4
  */
5
5
 
@@ -92,32 +92,46 @@
92
92
  #endif
93
93
 
94
94
  /* function prototypes */
95
+ local int inflateStateCheck OF((z_streamp strm));
95
96
  local void fixedtables OF((struct inflate_state FAR *state));
96
- local int updatewindow OF((z_streamp strm, unsigned out));
97
+ local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
98
+ unsigned copy));
97
99
  #ifdef BUILDFIXED
98
100
  void makefixed OF((void));
99
101
  #endif
100
- local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf,
102
+ local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf,
101
103
  unsigned len));
102
104
 
103
- int ZEXPORT inflateReset(strm)
105
+ local int inflateStateCheck(strm)
106
+ z_streamp strm;
107
+ {
108
+ struct inflate_state FAR *state;
109
+ if (strm == Z_NULL ||
110
+ strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
111
+ return 1;
112
+ state = (struct inflate_state FAR *)strm->state;
113
+ if (state == Z_NULL || state->strm != strm ||
114
+ state->mode < HEAD || state->mode > SYNC)
115
+ return 1;
116
+ return 0;
117
+ }
118
+
119
+ int ZEXPORT inflateResetKeep(strm)
104
120
  z_streamp strm;
105
121
  {
106
122
  struct inflate_state FAR *state;
107
123
 
108
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
124
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
109
125
  state = (struct inflate_state FAR *)strm->state;
110
126
  strm->total_in = strm->total_out = state->total = 0;
111
127
  strm->msg = Z_NULL;
112
- strm->adler = 1; /* to support ill-conceived Java test suite */
128
+ if (state->wrap) /* to support ill-conceived Java test suite */
129
+ strm->adler = state->wrap & 1;
113
130
  state->mode = HEAD;
114
131
  state->last = 0;
115
132
  state->havedict = 0;
116
133
  state->dmax = 32768U;
117
134
  state->head = Z_NULL;
118
- state->wsize = 0;
119
- state->whave = 0;
120
- state->wnext = 0;
121
135
  state->hold = 0;
122
136
  state->bits = 0;
123
137
  state->lencode = state->distcode = state->next = state->codes;
@@ -127,6 +141,19 @@ z_streamp strm;
127
141
  return Z_OK;
128
142
  }
129
143
 
144
+ int ZEXPORT inflateReset(strm)
145
+ z_streamp strm;
146
+ {
147
+ struct inflate_state FAR *state;
148
+
149
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
150
+ state = (struct inflate_state FAR *)strm->state;
151
+ state->wsize = 0;
152
+ state->whave = 0;
153
+ state->wnext = 0;
154
+ return inflateResetKeep(strm);
155
+ }
156
+
130
157
  int ZEXPORT inflateReset2(strm, windowBits)
131
158
  z_streamp strm;
132
159
  int windowBits;
@@ -135,7 +162,7 @@ int windowBits;
135
162
  struct inflate_state FAR *state;
136
163
 
137
164
  /* get the state */
138
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
165
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
139
166
  state = (struct inflate_state FAR *)strm->state;
140
167
 
141
168
  /* extract wrap request from windowBits parameter */
@@ -144,7 +171,7 @@ int windowBits;
144
171
  windowBits = -windowBits;
145
172
  }
146
173
  else {
147
- wrap = (windowBits >> 4) + 1;
174
+ wrap = (windowBits >> 4) + 5;
148
175
  #ifdef GUNZIP
149
176
  if (windowBits < 48)
150
177
  windowBits &= 15;
@@ -180,16 +207,27 @@ int stream_size;
180
207
  if (strm == Z_NULL) return Z_STREAM_ERROR;
181
208
  strm->msg = Z_NULL; /* in case we return an error */
182
209
  if (strm->zalloc == (alloc_func)0) {
210
+ #ifdef Z_SOLO
211
+ return Z_STREAM_ERROR;
212
+ #else
183
213
  strm->zalloc = zcalloc;
184
214
  strm->opaque = (voidpf)0;
215
+ #endif
185
216
  }
186
- if (strm->zfree == (free_func)0) strm->zfree = zcfree;
217
+ if (strm->zfree == (free_func)0)
218
+ #ifdef Z_SOLO
219
+ return Z_STREAM_ERROR;
220
+ #else
221
+ strm->zfree = zcfree;
222
+ #endif
187
223
  state = (struct inflate_state FAR *)
188
224
  ZALLOC(strm, 1, sizeof(struct inflate_state));
189
225
  if (state == Z_NULL) return Z_MEM_ERROR;
190
226
  Tracev((stderr, "inflate: allocated\n"));
191
227
  strm->state = (struct internal_state FAR *)state;
228
+ state->strm = strm;
192
229
  state->window = Z_NULL;
230
+ state->mode = HEAD; /* to pass state test in inflateReset2() */
193
231
  ret = inflateReset2(strm, windowBits);
194
232
  if (ret != Z_OK) {
195
233
  ZFREE(strm, state);
@@ -213,17 +251,17 @@ int value;
213
251
  {
214
252
  struct inflate_state FAR *state;
215
253
 
216
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
254
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
217
255
  state = (struct inflate_state FAR *)strm->state;
218
256
  if (bits < 0) {
219
257
  state->hold = 0;
220
258
  state->bits = 0;
221
259
  return Z_OK;
222
260
  }
223
- if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
261
+ if (bits > 16 || state->bits + (uInt)bits > 32) return Z_STREAM_ERROR;
224
262
  value &= (1L << bits) - 1;
225
- state->hold += value << state->bits;
226
- state->bits += bits;
263
+ state->hold += (unsigned)value << state->bits;
264
+ state->bits += (uInt)bits;
227
265
  return Z_OK;
228
266
  }
229
267
 
@@ -321,8 +359,8 @@ void makefixed()
321
359
  low = 0;
322
360
  for (;;) {
323
361
  if ((low % 7) == 0) printf("\n ");
324
- printf("{%u,%u,%d}", state.lencode[low].op, state.lencode[low].bits,
325
- state.lencode[low].val);
362
+ printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op,
363
+ state.lencode[low].bits, state.lencode[low].val);
326
364
  if (++low == size) break;
327
365
  putchar(',');
328
366
  }
@@ -355,12 +393,13 @@ void makefixed()
355
393
  output will fall in the output data, making match copies simpler and faster.
356
394
  The advantage may be dependent on the size of the processor's data caches.
357
395
  */
358
- local int updatewindow(strm, out)
396
+ local int updatewindow(strm, end, copy)
359
397
  z_streamp strm;
360
- unsigned out;
398
+ const Bytef *end;
399
+ unsigned copy;
361
400
  {
362
401
  struct inflate_state FAR *state;
363
- unsigned copy, dist;
402
+ unsigned dist;
364
403
 
365
404
  state = (struct inflate_state FAR *)strm->state;
366
405
 
@@ -380,19 +419,18 @@ unsigned out;
380
419
  }
381
420
 
382
421
  /* copy state->wsize or less output bytes into the circular window */
383
- copy = out - strm->avail_out;
384
422
  if (copy >= state->wsize) {
385
- zmemcpy(state->window, strm->next_out - state->wsize, state->wsize);
423
+ zmemcpy(state->window, end - state->wsize, state->wsize);
386
424
  state->wnext = 0;
387
425
  state->whave = state->wsize;
388
426
  }
389
427
  else {
390
428
  dist = state->wsize - state->wnext;
391
429
  if (dist > copy) dist = copy;
392
- zmemcpy(state->window + state->wnext, strm->next_out - copy, dist);
430
+ zmemcpy(state->window + state->wnext, end - copy, dist);
393
431
  copy -= dist;
394
432
  if (copy) {
395
- zmemcpy(state->window, strm->next_out - copy, copy);
433
+ zmemcpy(state->window, end - copy, copy);
396
434
  state->wnext = copy;
397
435
  state->whave = state->wsize;
398
436
  }
@@ -499,11 +537,6 @@ unsigned out;
499
537
  bits -= bits & 7; \
500
538
  } while (0)
501
539
 
502
- /* Reverse the bytes in a 32-bit value */
503
- #define REVERSE(q) \
504
- ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
505
- (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
506
-
507
540
  /*
508
541
  inflate() uses a state machine to process as much input data and generate as
509
542
  much output data as possible before returning. The state machine is
@@ -591,7 +624,7 @@ z_streamp strm;
591
624
  int flush;
592
625
  {
593
626
  struct inflate_state FAR *state;
594
- unsigned char FAR *next; /* next input */
627
+ z_const unsigned char FAR *next; /* next input */
595
628
  unsigned char FAR *put; /* next output */
596
629
  unsigned have, left; /* available input and output */
597
630
  unsigned long hold; /* bit buffer */
@@ -609,7 +642,7 @@ int flush;
609
642
  static const unsigned short order[19] = /* permutation of code lengths */
610
643
  {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
611
644
 
612
- if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
645
+ if (inflateStateCheck(strm) || strm->next_out == Z_NULL ||
613
646
  (strm->next_in == Z_NULL && strm->avail_in != 0))
614
647
  return Z_STREAM_ERROR;
615
648
 
@@ -629,6 +662,8 @@ int flush;
629
662
  NEEDBITS(16);
630
663
  #ifdef GUNZIP
631
664
  if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */
665
+ if (state->wbits == 0)
666
+ state->wbits = 15;
632
667
  state->check = crc32(0L, Z_NULL, 0);
633
668
  CRC2(state->check, hold);
634
669
  INITBITS();
@@ -656,7 +691,7 @@ int flush;
656
691
  len = BITS(4) + 8;
657
692
  if (state->wbits == 0)
658
693
  state->wbits = len;
659
- else if (len > state->wbits) {
694
+ if (len > 15 || len > state->wbits) {
660
695
  strm->msg = (char *)"invalid window size";
661
696
  state->mode = BAD;
662
697
  break;
@@ -683,14 +718,16 @@ int flush;
683
718
  }
684
719
  if (state->head != Z_NULL)
685
720
  state->head->text = (int)((hold >> 8) & 1);
686
- if (state->flags & 0x0200) CRC2(state->check, hold);
721
+ if ((state->flags & 0x0200) && (state->wrap & 4))
722
+ CRC2(state->check, hold);
687
723
  INITBITS();
688
724
  state->mode = TIME;
689
725
  case TIME:
690
726
  NEEDBITS(32);
691
727
  if (state->head != Z_NULL)
692
728
  state->head->time = hold;
693
- if (state->flags & 0x0200) CRC4(state->check, hold);
729
+ if ((state->flags & 0x0200) && (state->wrap & 4))
730
+ CRC4(state->check, hold);
694
731
  INITBITS();
695
732
  state->mode = OS;
696
733
  case OS:
@@ -699,7 +736,8 @@ int flush;
699
736
  state->head->xflags = (int)(hold & 0xff);
700
737
  state->head->os = (int)(hold >> 8);
701
738
  }
702
- if (state->flags & 0x0200) CRC2(state->check, hold);
739
+ if ((state->flags & 0x0200) && (state->wrap & 4))
740
+ CRC2(state->check, hold);
703
741
  INITBITS();
704
742
  state->mode = EXLEN;
705
743
  case EXLEN:
@@ -708,7 +746,8 @@ int flush;
708
746
  state->length = (unsigned)(hold);
709
747
  if (state->head != Z_NULL)
710
748
  state->head->extra_len = (unsigned)hold;
711
- if (state->flags & 0x0200) CRC2(state->check, hold);
749
+ if ((state->flags & 0x0200) && (state->wrap & 4))
750
+ CRC2(state->check, hold);
712
751
  INITBITS();
713
752
  }
714
753
  else if (state->head != Z_NULL)
@@ -726,7 +765,7 @@ int flush;
726
765
  len + copy > state->head->extra_max ?
727
766
  state->head->extra_max - len : copy);
728
767
  }
729
- if (state->flags & 0x0200)
768
+ if ((state->flags & 0x0200) && (state->wrap & 4))
730
769
  state->check = crc32(state->check, next, copy);
731
770
  have -= copy;
732
771
  next += copy;
@@ -745,9 +784,9 @@ int flush;
745
784
  if (state->head != Z_NULL &&
746
785
  state->head->name != Z_NULL &&
747
786
  state->length < state->head->name_max)
748
- state->head->name[state->length++] = len;
787
+ state->head->name[state->length++] = (Bytef)len;
749
788
  } while (len && copy < have);
750
- if (state->flags & 0x0200)
789
+ if ((state->flags & 0x0200) && (state->wrap & 4))
751
790
  state->check = crc32(state->check, next, copy);
752
791
  have -= copy;
753
792
  next += copy;
@@ -766,9 +805,9 @@ int flush;
766
805
  if (state->head != Z_NULL &&
767
806
  state->head->comment != Z_NULL &&
768
807
  state->length < state->head->comm_max)
769
- state->head->comment[state->length++] = len;
808
+ state->head->comment[state->length++] = (Bytef)len;
770
809
  } while (len && copy < have);
771
- if (state->flags & 0x0200)
810
+ if ((state->flags & 0x0200) && (state->wrap & 4))
772
811
  state->check = crc32(state->check, next, copy);
773
812
  have -= copy;
774
813
  next += copy;
@@ -780,7 +819,7 @@ int flush;
780
819
  case HCRC:
781
820
  if (state->flags & 0x0200) {
782
821
  NEEDBITS(16);
783
- if (hold != (state->check & 0xffff)) {
822
+ if ((state->wrap & 4) && hold != (state->check & 0xffff)) {
784
823
  strm->msg = (char *)"header crc mismatch";
785
824
  state->mode = BAD;
786
825
  break;
@@ -797,7 +836,7 @@ int flush;
797
836
  #endif
798
837
  case DICTID:
799
838
  NEEDBITS(32);
800
- strm->adler = state->check = REVERSE(hold);
839
+ strm->adler = state->check = ZSWAP32(hold);
801
840
  INITBITS();
802
841
  state->mode = DICT;
803
842
  case DICT:
@@ -905,7 +944,7 @@ int flush;
905
944
  while (state->have < 19)
906
945
  state->lens[order[state->have++]] = 0;
907
946
  state->next = state->codes;
908
- state->lencode = (code const FAR *)(state->next);
947
+ state->lencode = (const code FAR *)(state->next);
909
948
  state->lenbits = 7;
910
949
  ret = inflate_table(CODES, state->lens, 19, &(state->next),
911
950
  &(state->lenbits), state->work);
@@ -925,7 +964,6 @@ int flush;
925
964
  PULLBYTE();
926
965
  }
927
966
  if (here.val < 16) {
928
- NEEDBITS(here.bits);
929
967
  DROPBITS(here.bits);
930
968
  state->lens[state->have++] = here.val;
931
969
  }
@@ -980,7 +1018,7 @@ int flush;
980
1018
  values here (9 and 6) without reading the comments in inftrees.h
981
1019
  concerning the ENOUGH constants, which depend on those values */
982
1020
  state->next = state->codes;
983
- state->lencode = (code const FAR *)(state->next);
1021
+ state->lencode = (const code FAR *)(state->next);
984
1022
  state->lenbits = 9;
985
1023
  ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
986
1024
  &(state->lenbits), state->work);
@@ -989,7 +1027,7 @@ int flush;
989
1027
  state->mode = BAD;
990
1028
  break;
991
1029
  }
992
- state->distcode = (code const FAR *)(state->next);
1030
+ state->distcode = (const code FAR *)(state->next);
993
1031
  state->distbits = 6;
994
1032
  ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
995
1033
  &(state->next), &(state->distbits), state->work);
@@ -1162,15 +1200,15 @@ int flush;
1162
1200
  out -= left;
1163
1201
  strm->total_out += out;
1164
1202
  state->total += out;
1165
- if (out)
1203
+ if ((state->wrap & 4) && out)
1166
1204
  strm->adler = state->check =
1167
1205
  UPDATE(state->check, put - out, out);
1168
1206
  out = left;
1169
- if ((
1207
+ if ((state->wrap & 4) && (
1170
1208
  #ifdef GUNZIP
1171
1209
  state->flags ? hold :
1172
1210
  #endif
1173
- REVERSE(hold)) != state->check) {
1211
+ ZSWAP32(hold)) != state->check) {
1174
1212
  strm->msg = (char *)"incorrect data check";
1175
1213
  state->mode = BAD;
1176
1214
  break;
@@ -1214,8 +1252,9 @@ int flush;
1214
1252
  */
1215
1253
  inf_leave:
1216
1254
  RESTORE();
1217
- if (state->wsize || (state->mode < CHECK && out != strm->avail_out))
1218
- if (updatewindow(strm, out)) {
1255
+ if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
1256
+ (state->mode < CHECK || flush != Z_FINISH)))
1257
+ if (updatewindow(strm, strm->next_out, out - strm->avail_out)) {
1219
1258
  state->mode = MEM;
1220
1259
  return Z_MEM_ERROR;
1221
1260
  }
@@ -1224,10 +1263,10 @@ int flush;
1224
1263
  strm->total_in += in;
1225
1264
  strm->total_out += out;
1226
1265
  state->total += out;
1227
- if (state->wrap && out)
1266
+ if ((state->wrap & 4) && out)
1228
1267
  strm->adler = state->check =
1229
1268
  UPDATE(state->check, strm->next_out - out, out);
1230
- strm->data_type = state->bits + (state->last ? 64 : 0) +
1269
+ strm->data_type = (int)state->bits + (state->last ? 64 : 0) +
1231
1270
  (state->mode == TYPE ? 128 : 0) +
1232
1271
  (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
1233
1272
  if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
@@ -1239,7 +1278,7 @@ int ZEXPORT inflateEnd(strm)
1239
1278
  z_streamp strm;
1240
1279
  {
1241
1280
  struct inflate_state FAR *state;
1242
- if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
1281
+ if (inflateStateCheck(strm))
1243
1282
  return Z_STREAM_ERROR;
1244
1283
  state = (struct inflate_state FAR *)strm->state;
1245
1284
  if (state->window != Z_NULL) ZFREE(strm, state->window);
@@ -1249,43 +1288,59 @@ z_streamp strm;
1249
1288
  return Z_OK;
1250
1289
  }
1251
1290
 
1291
+ int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength)
1292
+ z_streamp strm;
1293
+ Bytef *dictionary;
1294
+ uInt *dictLength;
1295
+ {
1296
+ struct inflate_state FAR *state;
1297
+
1298
+ /* check state */
1299
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1300
+ state = (struct inflate_state FAR *)strm->state;
1301
+
1302
+ /* copy dictionary */
1303
+ if (state->whave && dictionary != Z_NULL) {
1304
+ zmemcpy(dictionary, state->window + state->wnext,
1305
+ state->whave - state->wnext);
1306
+ zmemcpy(dictionary + state->whave - state->wnext,
1307
+ state->window, state->wnext);
1308
+ }
1309
+ if (dictLength != Z_NULL)
1310
+ *dictLength = state->whave;
1311
+ return Z_OK;
1312
+ }
1313
+
1252
1314
  int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)
1253
1315
  z_streamp strm;
1254
1316
  const Bytef *dictionary;
1255
1317
  uInt dictLength;
1256
1318
  {
1257
1319
  struct inflate_state FAR *state;
1258
- unsigned long id;
1320
+ unsigned long dictid;
1321
+ int ret;
1259
1322
 
1260
1323
  /* check state */
1261
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1324
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1262
1325
  state = (struct inflate_state FAR *)strm->state;
1263
1326
  if (state->wrap != 0 && state->mode != DICT)
1264
1327
  return Z_STREAM_ERROR;
1265
1328
 
1266
- /* check for correct dictionary id */
1329
+ /* check for correct dictionary identifier */
1267
1330
  if (state->mode == DICT) {
1268
- id = adler32(0L, Z_NULL, 0);
1269
- id = adler32(id, dictionary, dictLength);
1270
- if (id != state->check)
1331
+ dictid = adler32(0L, Z_NULL, 0);
1332
+ dictid = adler32(dictid, dictionary, dictLength);
1333
+ if (dictid != state->check)
1271
1334
  return Z_DATA_ERROR;
1272
1335
  }
1273
1336
 
1274
- /* copy dictionary to window */
1275
- if (updatewindow(strm, strm->avail_out)) {
1337
+ /* copy dictionary to window using updatewindow(), which will amend the
1338
+ existing dictionary if appropriate */
1339
+ ret = updatewindow(strm, dictionary + dictLength, dictLength);
1340
+ if (ret) {
1276
1341
  state->mode = MEM;
1277
1342
  return Z_MEM_ERROR;
1278
1343
  }
1279
- if (dictLength > state->wsize) {
1280
- zmemcpy(state->window, dictionary + dictLength - state->wsize,
1281
- state->wsize);
1282
- state->whave = state->wsize;
1283
- }
1284
- else {
1285
- zmemcpy(state->window + state->wsize - dictLength, dictionary,
1286
- dictLength);
1287
- state->whave = dictLength;
1288
- }
1289
1344
  state->havedict = 1;
1290
1345
  Tracev((stderr, "inflate: dictionary set\n"));
1291
1346
  return Z_OK;
@@ -1298,7 +1353,7 @@ gz_headerp head;
1298
1353
  struct inflate_state FAR *state;
1299
1354
 
1300
1355
  /* check state */
1301
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1356
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1302
1357
  state = (struct inflate_state FAR *)strm->state;
1303
1358
  if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
1304
1359
 
@@ -1321,7 +1376,7 @@ gz_headerp head;
1321
1376
  */
1322
1377
  local unsigned syncsearch(have, buf, len)
1323
1378
  unsigned FAR *have;
1324
- unsigned char FAR *buf;
1379
+ const unsigned char FAR *buf;
1325
1380
  unsigned len;
1326
1381
  {
1327
1382
  unsigned got;
@@ -1351,7 +1406,7 @@ z_streamp strm;
1351
1406
  struct inflate_state FAR *state;
1352
1407
 
1353
1408
  /* check parameters */
1354
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1409
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1355
1410
  state = (struct inflate_state FAR *)strm->state;
1356
1411
  if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
1357
1412
 
@@ -1398,7 +1453,7 @@ z_streamp strm;
1398
1453
  {
1399
1454
  struct inflate_state FAR *state;
1400
1455
 
1401
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1456
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1402
1457
  state = (struct inflate_state FAR *)strm->state;
1403
1458
  return state->mode == STORED && state->bits == 0;
1404
1459
  }
@@ -1413,8 +1468,7 @@ z_streamp source;
1413
1468
  unsigned wsize;
1414
1469
 
1415
1470
  /* check input */
1416
- if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
1417
- source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
1471
+ if (inflateStateCheck(source) || dest == Z_NULL)
1418
1472
  return Z_STREAM_ERROR;
1419
1473
  state = (struct inflate_state FAR *)source->state;
1420
1474
 
@@ -1433,8 +1487,9 @@ z_streamp source;
1433
1487
  }
1434
1488
 
1435
1489
  /* copy state */
1436
- zmemcpy(dest, source, sizeof(z_stream));
1437
- zmemcpy(copy, state, sizeof(struct inflate_state));
1490
+ zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
1491
+ zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
1492
+ copy->strm = dest;
1438
1493
  if (state->lencode >= state->codes &&
1439
1494
  state->lencode <= state->codes + ENOUGH - 1) {
1440
1495
  copy->lencode = copy->codes + (state->lencode - state->codes);
@@ -1456,25 +1511,51 @@ int subvert;
1456
1511
  {
1457
1512
  struct inflate_state FAR *state;
1458
1513
 
1459
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1514
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1460
1515
  state = (struct inflate_state FAR *)strm->state;
1461
- state->sane = !subvert;
1462
1516
  #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
1517
+ state->sane = !subvert;
1463
1518
  return Z_OK;
1464
1519
  #else
1520
+ (void)subvert;
1465
1521
  state->sane = 1;
1466
1522
  return Z_DATA_ERROR;
1467
1523
  #endif
1468
1524
  }
1469
1525
 
1526
+ int ZEXPORT inflateValidate(strm, check)
1527
+ z_streamp strm;
1528
+ int check;
1529
+ {
1530
+ struct inflate_state FAR *state;
1531
+
1532
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1533
+ state = (struct inflate_state FAR *)strm->state;
1534
+ if (check)
1535
+ state->wrap |= 4;
1536
+ else
1537
+ state->wrap &= ~4;
1538
+ return Z_OK;
1539
+ }
1540
+
1470
1541
  long ZEXPORT inflateMark(strm)
1471
1542
  z_streamp strm;
1472
1543
  {
1473
1544
  struct inflate_state FAR *state;
1474
1545
 
1475
- if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;
1546
+ if (inflateStateCheck(strm))
1547
+ return -(1L << 16);
1476
1548
  state = (struct inflate_state FAR *)strm->state;
1477
- return ((long)(state->back) << 16) +
1549
+ return (long)(((unsigned long)((long)state->back)) << 16) +
1478
1550
  (state->mode == COPY ? state->length :
1479
1551
  (state->mode == MATCH ? state->was - state->length : 0));
1480
1552
  }
1553
+
1554
+ unsigned long ZEXPORT inflateCodesUsed(strm)
1555
+ z_streamp strm;
1556
+ {
1557
+ struct inflate_state FAR *state;
1558
+ if (inflateStateCheck(strm)) return (unsigned long)-1;
1559
+ state = (struct inflate_state FAR *)strm->state;
1560
+ return (unsigned long)(state->next - state->codes);
1561
+ }
@@ -1,5 +1,5 @@
1
1
  /* inflate.h -- internal inflate state definition
2
- * Copyright (C) 1995-2009 Mark Adler
2
+ * Copyright (C) 1995-2016 Mark Adler
3
3
  * For conditions of distribution and use, see copyright notice in zlib.h
4
4
  */
5
5
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  /* Possible inflate modes between inflate() calls */
20
20
  typedef enum {
21
- HEAD, /* i: waiting for magic header */
21
+ HEAD = 16180, /* i: waiting for magic header */
22
22
  FLAGS, /* i: waiting for method and flags (gzip) */
23
23
  TIME, /* i: waiting for modification time (gzip) */
24
24
  OS, /* i: waiting for extra flags and operating system (gzip) */
@@ -77,11 +77,14 @@ typedef enum {
77
77
  CHECK -> LENGTH -> DONE
78
78
  */
79
79
 
80
- /* state maintained between inflate() calls. Approximately 10K bytes. */
80
+ /* State maintained between inflate() calls -- approximately 7K bytes, not
81
+ including the allocated sliding window, which is up to 32K bytes. */
81
82
  struct inflate_state {
83
+ z_streamp strm; /* pointer back to this zlib stream */
82
84
  inflate_mode mode; /* current inflate mode */
83
85
  int last; /* true if processing last block */
84
- int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
86
+ int wrap; /* bit 0 true for zlib, bit 1 true for gzip,
87
+ bit 2 true to validate check value */
85
88
  int havedict; /* true if dictionary provided */
86
89
  int flags; /* gzip header method and flags (0 if zlib) */
87
90
  unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */