rugged 0.27.9 → 0.27.10

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 (420) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rugged/version.rb +1 -1
  3. data/vendor/libgit2/AUTHORS +1 -0
  4. data/vendor/libgit2/CMakeLists.txt +98 -54
  5. data/vendor/libgit2/COPYING +28 -0
  6. data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +15 -1
  7. data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +9 -8
  8. data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +2 -2
  9. data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +1 -1
  10. data/vendor/libgit2/cmake/Modules/FindGSSFramework.cmake +28 -0
  11. data/vendor/libgit2/cmake/Modules/FindPCRE.cmake +38 -0
  12. data/vendor/libgit2/cmake/Modules/FindPCRE2.cmake +37 -0
  13. data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +2 -2
  14. data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +6 -0
  15. data/vendor/libgit2/cmake/Modules/FindmbedTLS.cmake +93 -0
  16. data/vendor/libgit2/cmake/Modules/PkgBuildConfig.cmake +110 -0
  17. data/vendor/libgit2/cmake/Modules/SelectGSSAPI.cmake +53 -0
  18. data/vendor/libgit2/cmake/Modules/SelectHTTPSBackend.cmake +124 -0
  19. data/vendor/libgit2/cmake/Modules/SelectHashes.cmake +66 -0
  20. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +2 -0
  21. data/vendor/libgit2/deps/http-parser/{LICENSE-MIT → COPYING} +0 -0
  22. data/vendor/libgit2/deps/http-parser/http_parser.c +11 -6
  23. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +21 -0
  24. data/vendor/libgit2/deps/ntlmclient/compat.h +33 -0
  25. data/vendor/libgit2/deps/ntlmclient/crypt.h +64 -0
  26. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +120 -0
  27. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +18 -0
  28. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +145 -0
  29. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +18 -0
  30. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +130 -0
  31. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +21 -0
  32. data/vendor/libgit2/deps/ntlmclient/ntlm.c +1420 -0
  33. data/vendor/libgit2/deps/ntlmclient/ntlm.h +174 -0
  34. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +320 -0
  35. data/vendor/libgit2/deps/ntlmclient/unicode.h +36 -0
  36. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +445 -0
  37. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +201 -0
  38. data/vendor/libgit2/deps/ntlmclient/utf8.h +1257 -0
  39. data/vendor/libgit2/deps/ntlmclient/util.c +21 -0
  40. data/vendor/libgit2/deps/ntlmclient/util.h +14 -0
  41. data/vendor/libgit2/deps/pcre/CMakeLists.txt +140 -0
  42. data/vendor/libgit2/deps/pcre/COPYING +5 -0
  43. data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
  44. data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +17 -0
  45. data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
  46. data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +29 -0
  47. data/vendor/libgit2/deps/pcre/config.h.in +57 -0
  48. data/vendor/libgit2/deps/pcre/pcre.h +641 -0
  49. data/vendor/libgit2/deps/pcre/pcre_byte_order.c +319 -0
  50. data/vendor/libgit2/deps/pcre/pcre_chartables.c +198 -0
  51. data/vendor/libgit2/deps/pcre/pcre_compile.c +9800 -0
  52. data/vendor/libgit2/deps/pcre/pcre_config.c +190 -0
  53. data/vendor/libgit2/deps/pcre/pcre_dfa_exec.c +3676 -0
  54. data/vendor/libgit2/deps/pcre/pcre_exec.c +7173 -0
  55. data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +245 -0
  56. data/vendor/libgit2/deps/pcre/pcre_get.c +669 -0
  57. data/vendor/libgit2/deps/pcre/pcre_globals.c +86 -0
  58. data/vendor/libgit2/deps/pcre/pcre_internal.h +2787 -0
  59. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +11913 -0
  60. data/vendor/libgit2/deps/pcre/pcre_maketables.c +156 -0
  61. data/vendor/libgit2/deps/pcre/pcre_newline.c +210 -0
  62. data/vendor/libgit2/deps/pcre/pcre_ord2utf8.c +94 -0
  63. data/vendor/libgit2/deps/pcre/pcre_printint.c +834 -0
  64. data/vendor/libgit2/deps/pcre/pcre_refcount.c +92 -0
  65. data/vendor/libgit2/deps/pcre/pcre_string_utils.c +211 -0
  66. data/vendor/libgit2/deps/pcre/pcre_study.c +1686 -0
  67. data/vendor/libgit2/deps/pcre/pcre_tables.c +727 -0
  68. data/vendor/libgit2/deps/pcre/pcre_ucd.c +3644 -0
  69. data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +301 -0
  70. data/vendor/libgit2/deps/pcre/pcre_version.c +98 -0
  71. data/vendor/libgit2/deps/pcre/pcre_xclass.c +268 -0
  72. data/vendor/libgit2/deps/pcre/pcreposix.c +421 -0
  73. data/vendor/libgit2/deps/pcre/pcreposix.h +117 -0
  74. data/vendor/libgit2/deps/pcre/ucp.h +224 -0
  75. data/vendor/libgit2/deps/winhttp/COPYING.GPL +993 -0
  76. data/vendor/libgit2/deps/winhttp/COPYING.LGPL +502 -0
  77. data/vendor/libgit2/deps/zlib/CMakeLists.txt +1 -0
  78. data/vendor/libgit2/deps/zlib/COPYING +27 -0
  79. data/vendor/libgit2/deps/zlib/adler32.c +0 -7
  80. data/vendor/libgit2/deps/zlib/crc32.c +0 -7
  81. data/vendor/libgit2/include/git2.h +5 -0
  82. data/vendor/libgit2/include/git2/annotated_commit.h +9 -0
  83. data/vendor/libgit2/include/git2/apply.h +149 -0
  84. data/vendor/libgit2/include/git2/attr.h +38 -20
  85. data/vendor/libgit2/include/git2/blame.h +42 -25
  86. data/vendor/libgit2/include/git2/blob.h +45 -13
  87. data/vendor/libgit2/include/git2/branch.h +1 -1
  88. data/vendor/libgit2/include/git2/buffer.h +22 -16
  89. data/vendor/libgit2/include/git2/cert.h +135 -0
  90. data/vendor/libgit2/include/git2/checkout.h +65 -32
  91. data/vendor/libgit2/include/git2/cherrypick.h +9 -7
  92. data/vendor/libgit2/include/git2/clone.h +12 -10
  93. data/vendor/libgit2/include/git2/commit.h +53 -3
  94. data/vendor/libgit2/include/git2/common.h +60 -8
  95. data/vendor/libgit2/include/git2/config.h +30 -19
  96. data/vendor/libgit2/include/git2/cred.h +308 -0
  97. data/vendor/libgit2/include/git2/deprecated.h +493 -0
  98. data/vendor/libgit2/include/git2/describe.h +32 -9
  99. data/vendor/libgit2/include/git2/diff.h +208 -156
  100. data/vendor/libgit2/include/git2/errors.h +54 -46
  101. data/vendor/libgit2/include/git2/filter.h +8 -0
  102. data/vendor/libgit2/include/git2/ignore.h +2 -2
  103. data/vendor/libgit2/include/git2/index.h +74 -52
  104. data/vendor/libgit2/include/git2/indexer.h +76 -6
  105. data/vendor/libgit2/include/git2/mailmap.h +115 -0
  106. data/vendor/libgit2/include/git2/merge.h +35 -18
  107. data/vendor/libgit2/include/git2/net.h +0 -5
  108. data/vendor/libgit2/include/git2/notes.h +1 -1
  109. data/vendor/libgit2/include/git2/object.h +17 -29
  110. data/vendor/libgit2/include/git2/odb.h +12 -11
  111. data/vendor/libgit2/include/git2/odb_backend.h +10 -9
  112. data/vendor/libgit2/include/git2/oid.h +2 -2
  113. data/vendor/libgit2/include/git2/pack.h +14 -3
  114. data/vendor/libgit2/include/git2/proxy.h +14 -8
  115. data/vendor/libgit2/include/git2/rebase.h +53 -6
  116. data/vendor/libgit2/include/git2/refs.h +33 -15
  117. data/vendor/libgit2/include/git2/refspec.h +17 -0
  118. data/vendor/libgit2/include/git2/remote.h +123 -24
  119. data/vendor/libgit2/include/git2/repository.h +76 -39
  120. data/vendor/libgit2/include/git2/revert.h +6 -4
  121. data/vendor/libgit2/include/git2/revwalk.h +7 -7
  122. data/vendor/libgit2/include/git2/signature.h +2 -2
  123. data/vendor/libgit2/include/git2/stash.h +15 -12
  124. data/vendor/libgit2/include/git2/status.h +33 -20
  125. data/vendor/libgit2/include/git2/submodule.h +30 -12
  126. data/vendor/libgit2/include/git2/sys/alloc.h +101 -0
  127. data/vendor/libgit2/include/git2/sys/commit.h +1 -1
  128. data/vendor/libgit2/include/git2/sys/config.h +13 -13
  129. data/vendor/libgit2/include/git2/sys/cred.h +90 -0
  130. data/vendor/libgit2/include/git2/sys/filter.h +6 -6
  131. data/vendor/libgit2/include/git2/sys/index.h +3 -0
  132. data/vendor/libgit2/include/git2/sys/mempack.h +35 -35
  133. data/vendor/libgit2/include/git2/sys/merge.h +9 -4
  134. data/vendor/libgit2/include/git2/sys/odb_backend.h +66 -22
  135. data/vendor/libgit2/include/git2/sys/path.h +64 -0
  136. data/vendor/libgit2/include/git2/sys/refdb_backend.h +76 -40
  137. data/vendor/libgit2/include/git2/sys/repository.h +5 -1
  138. data/vendor/libgit2/include/git2/sys/stream.h +92 -12
  139. data/vendor/libgit2/include/git2/sys/transport.h +129 -83
  140. data/vendor/libgit2/include/git2/tag.h +13 -4
  141. data/vendor/libgit2/include/git2/trace.h +2 -2
  142. data/vendor/libgit2/include/git2/transaction.h +1 -0
  143. data/vendor/libgit2/include/git2/transport.h +11 -311
  144. data/vendor/libgit2/include/git2/tree.h +4 -4
  145. data/vendor/libgit2/include/git2/types.h +33 -111
  146. data/vendor/libgit2/include/git2/version.h +4 -4
  147. data/vendor/libgit2/include/git2/worktree.h +48 -13
  148. data/vendor/libgit2/src/CMakeLists.txt +96 -164
  149. data/vendor/libgit2/src/alloc.c +43 -0
  150. data/vendor/libgit2/src/alloc.h +40 -0
  151. data/vendor/libgit2/src/allocators/stdalloc.c +119 -0
  152. data/vendor/libgit2/src/{streams/curl.h → allocators/stdalloc.h} +5 -5
  153. data/vendor/libgit2/src/allocators/win32_crtdbg.c +118 -0
  154. data/vendor/libgit2/src/{transports/cred.h → allocators/win32_crtdbg.h} +5 -4
  155. data/vendor/libgit2/src/annotated_commit.c +15 -8
  156. data/vendor/libgit2/src/apply.c +537 -31
  157. data/vendor/libgit2/src/apply.h +3 -1
  158. data/vendor/libgit2/src/array.h +2 -2
  159. data/vendor/libgit2/src/attr.c +81 -75
  160. data/vendor/libgit2/src/attr_file.c +207 -121
  161. data/vendor/libgit2/src/attr_file.h +9 -9
  162. data/vendor/libgit2/src/attrcache.c +51 -53
  163. data/vendor/libgit2/src/attrcache.h +2 -1
  164. data/vendor/libgit2/src/blame.c +47 -20
  165. data/vendor/libgit2/src/blame.h +2 -1
  166. data/vendor/libgit2/src/blame_git.c +37 -20
  167. data/vendor/libgit2/src/blob.c +128 -42
  168. data/vendor/libgit2/src/blob.h +19 -2
  169. data/vendor/libgit2/src/branch.c +67 -43
  170. data/vendor/libgit2/src/buf_text.c +7 -6
  171. data/vendor/libgit2/src/buffer.c +69 -57
  172. data/vendor/libgit2/src/buffer.h +1 -1
  173. data/vendor/libgit2/src/cache.c +38 -45
  174. data/vendor/libgit2/src/cache.h +3 -3
  175. data/vendor/libgit2/src/cc-compat.h +20 -3
  176. data/vendor/libgit2/src/checkout.c +109 -90
  177. data/vendor/libgit2/src/cherrypick.c +15 -9
  178. data/vendor/libgit2/src/clone.c +49 -27
  179. data/vendor/libgit2/src/clone.h +4 -0
  180. data/vendor/libgit2/src/commit.c +117 -49
  181. data/vendor/libgit2/src/commit.h +7 -0
  182. data/vendor/libgit2/src/commit_list.c +30 -78
  183. data/vendor/libgit2/src/commit_list.h +2 -2
  184. data/vendor/libgit2/src/common.h +27 -91
  185. data/vendor/libgit2/src/config.c +194 -176
  186. data/vendor/libgit2/src/config.h +8 -20
  187. data/vendor/libgit2/src/config_backend.h +96 -0
  188. data/vendor/libgit2/src/config_cache.c +41 -35
  189. data/vendor/libgit2/src/config_entries.c +229 -0
  190. data/vendor/libgit2/src/config_entries.h +24 -0
  191. data/vendor/libgit2/src/config_file.c +439 -753
  192. data/vendor/libgit2/src/config_mem.c +220 -0
  193. data/vendor/libgit2/src/config_parse.c +114 -63
  194. data/vendor/libgit2/src/config_parse.h +17 -16
  195. data/vendor/libgit2/src/config_snapshot.c +206 -0
  196. data/vendor/libgit2/src/crlf.c +219 -190
  197. data/vendor/libgit2/src/delta.c +25 -18
  198. data/vendor/libgit2/src/describe.c +42 -41
  199. data/vendor/libgit2/src/diff.c +53 -68
  200. data/vendor/libgit2/src/diff.h +2 -1
  201. data/vendor/libgit2/src/diff_driver.c +47 -49
  202. data/vendor/libgit2/src/diff_file.c +19 -17
  203. data/vendor/libgit2/src/diff_file.h +1 -1
  204. data/vendor/libgit2/src/diff_generate.c +162 -106
  205. data/vendor/libgit2/src/diff_generate.h +3 -3
  206. data/vendor/libgit2/src/diff_parse.c +4 -4
  207. data/vendor/libgit2/src/diff_print.c +42 -30
  208. data/vendor/libgit2/src/diff_stats.c +22 -7
  209. data/vendor/libgit2/src/diff_tform.c +16 -16
  210. data/vendor/libgit2/src/diff_xdiff.c +15 -3
  211. data/vendor/libgit2/src/errors.c +51 -39
  212. data/vendor/libgit2/src/errors.h +81 -0
  213. data/vendor/libgit2/src/features.h.in +11 -3
  214. data/vendor/libgit2/src/fetch.c +10 -5
  215. data/vendor/libgit2/src/fetchhead.c +17 -17
  216. data/vendor/libgit2/src/filebuf.c +32 -36
  217. data/vendor/libgit2/src/filebuf.h +2 -2
  218. data/vendor/libgit2/src/filter.c +46 -38
  219. data/vendor/libgit2/src/filter.h +0 -10
  220. data/vendor/libgit2/src/{fileops.c → futils.c} +80 -73
  221. data/vendor/libgit2/src/{fileops.h → futils.h} +6 -6
  222. data/vendor/libgit2/src/global.c +48 -63
  223. data/vendor/libgit2/src/global.h +0 -2
  224. data/vendor/libgit2/src/hash.c +61 -0
  225. data/vendor/libgit2/src/hash.h +20 -19
  226. data/vendor/libgit2/src/hash/sha1.h +38 -0
  227. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +48 -0
  228. data/vendor/libgit2/src/hash/sha1/collisiondetect.h +19 -0
  229. data/vendor/libgit2/src/hash/{hash_common_crypto.h → sha1/common_crypto.c} +17 -17
  230. data/vendor/libgit2/src/hash/sha1/common_crypto.h +19 -0
  231. data/vendor/libgit2/src/hash/{hash_generic.c → sha1/generic.c} +22 -10
  232. data/vendor/libgit2/src/hash/{hash_generic.h → sha1/generic.h} +4 -10
  233. data/vendor/libgit2/src/hash/sha1/mbedtls.c +46 -0
  234. data/vendor/libgit2/src/hash/sha1/mbedtls.h +19 -0
  235. data/vendor/libgit2/src/hash/sha1/openssl.c +59 -0
  236. data/vendor/libgit2/src/hash/sha1/openssl.h +19 -0
  237. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.c +14 -3
  238. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.h +0 -0
  239. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.c +0 -0
  240. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.h +0 -0
  241. data/vendor/libgit2/src/hash/{hash_win32.c → sha1/win32.c} +47 -37
  242. data/vendor/libgit2/src/hash/{hash_win32.h → sha1/win32.h} +6 -19
  243. data/vendor/libgit2/src/hashsig.c +5 -5
  244. data/vendor/libgit2/src/idxmap.c +107 -61
  245. data/vendor/libgit2/src/idxmap.h +153 -31
  246. data/vendor/libgit2/src/ignore.c +43 -47
  247. data/vendor/libgit2/src/index.c +337 -232
  248. data/vendor/libgit2/src/index.h +17 -1
  249. data/vendor/libgit2/src/indexer.c +346 -175
  250. data/vendor/libgit2/src/integer.h +71 -26
  251. data/vendor/libgit2/src/iterator.c +142 -70
  252. data/vendor/libgit2/src/iterator.h +15 -0
  253. data/vendor/libgit2/src/khash.h +3 -1
  254. data/vendor/libgit2/src/mailmap.c +485 -0
  255. data/vendor/libgit2/src/mailmap.h +35 -0
  256. data/vendor/libgit2/src/map.h +1 -1
  257. data/vendor/libgit2/src/merge.c +144 -100
  258. data/vendor/libgit2/src/merge_driver.c +11 -11
  259. data/vendor/libgit2/src/merge_file.c +2 -2
  260. data/vendor/libgit2/src/mwindow.c +24 -29
  261. data/vendor/libgit2/src/mwindow.h +4 -4
  262. data/vendor/libgit2/src/net.c +184 -0
  263. data/vendor/libgit2/src/net.h +36 -0
  264. data/vendor/libgit2/src/netops.c +55 -156
  265. data/vendor/libgit2/src/netops.h +3 -23
  266. data/vendor/libgit2/src/notes.c +16 -11
  267. data/vendor/libgit2/src/object.c +120 -69
  268. data/vendor/libgit2/src/object.h +22 -9
  269. data/vendor/libgit2/src/object_api.c +8 -8
  270. data/vendor/libgit2/src/odb.c +116 -93
  271. data/vendor/libgit2/src/odb.h +8 -7
  272. data/vendor/libgit2/src/odb_loose.c +62 -55
  273. data/vendor/libgit2/src/odb_mempack.c +21 -34
  274. data/vendor/libgit2/src/odb_pack.c +18 -14
  275. data/vendor/libgit2/src/offmap.c +53 -35
  276. data/vendor/libgit2/src/offmap.h +108 -21
  277. data/vendor/libgit2/src/oid.c +12 -7
  278. data/vendor/libgit2/src/oidmap.c +49 -47
  279. data/vendor/libgit2/src/oidmap.h +101 -24
  280. data/vendor/libgit2/src/pack-objects.c +88 -87
  281. data/vendor/libgit2/src/pack-objects.h +2 -8
  282. data/vendor/libgit2/src/pack.c +99 -101
  283. data/vendor/libgit2/src/pack.h +17 -19
  284. data/vendor/libgit2/src/parse.c +10 -0
  285. data/vendor/libgit2/src/parse.h +3 -3
  286. data/vendor/libgit2/src/patch.c +4 -4
  287. data/vendor/libgit2/src/patch_generate.c +20 -20
  288. data/vendor/libgit2/src/patch_parse.c +151 -63
  289. data/vendor/libgit2/src/path.c +169 -125
  290. data/vendor/libgit2/src/path.h +3 -71
  291. data/vendor/libgit2/src/pathspec.c +19 -19
  292. data/vendor/libgit2/src/pool.c +26 -22
  293. data/vendor/libgit2/src/pool.h +7 -7
  294. data/vendor/libgit2/src/posix.c +10 -10
  295. data/vendor/libgit2/src/posix.h +12 -1
  296. data/vendor/libgit2/src/proxy.c +8 -3
  297. data/vendor/libgit2/src/push.c +37 -31
  298. data/vendor/libgit2/src/push.h +2 -1
  299. data/vendor/libgit2/src/reader.c +265 -0
  300. data/vendor/libgit2/src/reader.h +107 -0
  301. data/vendor/libgit2/src/rebase.c +115 -59
  302. data/vendor/libgit2/src/refdb.c +15 -3
  303. data/vendor/libgit2/src/refdb_fs.c +381 -254
  304. data/vendor/libgit2/src/reflog.c +13 -15
  305. data/vendor/libgit2/src/refs.c +118 -88
  306. data/vendor/libgit2/src/refs.h +5 -3
  307. data/vendor/libgit2/src/refspec.c +56 -37
  308. data/vendor/libgit2/src/refspec.h +1 -1
  309. data/vendor/libgit2/src/regexp.c +221 -0
  310. data/vendor/libgit2/src/regexp.h +97 -0
  311. data/vendor/libgit2/src/remote.c +266 -215
  312. data/vendor/libgit2/src/remote.h +11 -2
  313. data/vendor/libgit2/src/repository.c +280 -225
  314. data/vendor/libgit2/src/repository.h +52 -40
  315. data/vendor/libgit2/src/reset.c +8 -8
  316. data/vendor/libgit2/src/revert.c +14 -9
  317. data/vendor/libgit2/src/revparse.c +47 -48
  318. data/vendor/libgit2/src/revwalk.c +120 -57
  319. data/vendor/libgit2/src/revwalk.h +22 -1
  320. data/vendor/libgit2/src/settings.c +47 -10
  321. data/vendor/libgit2/src/signature.c +11 -11
  322. data/vendor/libgit2/src/sortedcache.c +22 -36
  323. data/vendor/libgit2/src/sortedcache.h +1 -1
  324. data/vendor/libgit2/src/stash.c +125 -99
  325. data/vendor/libgit2/src/status.c +28 -22
  326. data/vendor/libgit2/src/stream.h +17 -2
  327. data/vendor/libgit2/src/streams/mbedtls.c +483 -0
  328. data/vendor/libgit2/src/streams/mbedtls.h +23 -0
  329. data/vendor/libgit2/src/streams/openssl.c +224 -114
  330. data/vendor/libgit2/src/streams/openssl.h +4 -108
  331. data/vendor/libgit2/src/streams/registry.c +118 -0
  332. data/vendor/libgit2/src/streams/registry.h +19 -0
  333. data/vendor/libgit2/src/streams/socket.c +55 -30
  334. data/vendor/libgit2/src/streams/stransport.c +57 -32
  335. data/vendor/libgit2/src/streams/stransport.h +5 -0
  336. data/vendor/libgit2/src/streams/tls.c +50 -19
  337. data/vendor/libgit2/src/streams/tls.h +12 -4
  338. data/vendor/libgit2/src/strmap.c +47 -74
  339. data/vendor/libgit2/src/strmap.h +108 -33
  340. data/vendor/libgit2/src/submodule.c +272 -216
  341. data/vendor/libgit2/src/submodule.h +1 -1
  342. data/vendor/libgit2/src/sysdir.c +29 -19
  343. data/vendor/libgit2/src/tag.c +41 -28
  344. data/vendor/libgit2/src/tag.h +2 -1
  345. data/vendor/libgit2/src/trace.c +2 -2
  346. data/vendor/libgit2/src/trace.h +3 -3
  347. data/vendor/libgit2/src/trailer.c +52 -38
  348. data/vendor/libgit2/src/transaction.c +30 -29
  349. data/vendor/libgit2/src/transport.c +5 -5
  350. data/vendor/libgit2/src/transports/auth.c +15 -11
  351. data/vendor/libgit2/src/transports/auth.h +10 -3
  352. data/vendor/libgit2/src/transports/auth_negotiate.c +33 -18
  353. data/vendor/libgit2/src/transports/auth_negotiate.h +2 -2
  354. data/vendor/libgit2/src/transports/auth_ntlm.c +223 -0
  355. data/vendor/libgit2/src/transports/auth_ntlm.h +35 -0
  356. data/vendor/libgit2/src/transports/cred.c +24 -24
  357. data/vendor/libgit2/src/transports/git.c +26 -31
  358. data/vendor/libgit2/src/transports/http.c +881 -348
  359. data/vendor/libgit2/src/transports/http.h +2 -0
  360. data/vendor/libgit2/src/transports/local.c +35 -35
  361. data/vendor/libgit2/src/transports/smart.c +70 -47
  362. data/vendor/libgit2/src/transports/smart.h +3 -4
  363. data/vendor/libgit2/src/transports/smart_pkt.c +43 -40
  364. data/vendor/libgit2/src/transports/smart_protocol.c +96 -116
  365. data/vendor/libgit2/src/transports/ssh.c +77 -66
  366. data/vendor/libgit2/src/transports/winhttp.c +318 -314
  367. data/vendor/libgit2/src/tree-cache.c +19 -12
  368. data/vendor/libgit2/src/tree.c +103 -142
  369. data/vendor/libgit2/src/tree.h +1 -12
  370. data/vendor/libgit2/src/unix/map.c +3 -3
  371. data/vendor/libgit2/src/unix/posix.h +1 -11
  372. data/vendor/libgit2/src/userdiff.h +3 -1
  373. data/vendor/libgit2/src/util.c +70 -56
  374. data/vendor/libgit2/src/util.h +28 -156
  375. data/vendor/libgit2/src/vector.c +4 -4
  376. data/vendor/libgit2/src/wildmatch.c +320 -0
  377. data/vendor/libgit2/src/wildmatch.h +23 -0
  378. data/vendor/libgit2/src/win32/dir.c +3 -3
  379. data/vendor/libgit2/src/win32/findfile.c +3 -3
  380. data/vendor/libgit2/src/win32/map.c +9 -11
  381. data/vendor/libgit2/src/win32/msvc-compat.h +6 -0
  382. data/vendor/libgit2/src/win32/path_w32.c +113 -9
  383. data/vendor/libgit2/src/win32/path_w32.h +18 -29
  384. data/vendor/libgit2/src/win32/posix.h +1 -4
  385. data/vendor/libgit2/src/win32/posix_w32.c +70 -45
  386. data/vendor/libgit2/src/win32/precompiled.h +0 -2
  387. data/vendor/libgit2/src/win32/thread.c +5 -10
  388. data/vendor/libgit2/src/win32/w32_buffer.c +9 -5
  389. data/vendor/libgit2/src/win32/w32_common.h +39 -0
  390. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +3 -2
  391. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +26 -75
  392. data/vendor/libgit2/src/win32/w32_stack.c +6 -11
  393. data/vendor/libgit2/src/win32/w32_stack.h +3 -3
  394. data/vendor/libgit2/src/win32/w32_util.c +27 -64
  395. data/vendor/libgit2/src/win32/w32_util.h +5 -49
  396. data/vendor/libgit2/src/worktree.c +95 -60
  397. data/vendor/libgit2/src/worktree.h +2 -0
  398. data/vendor/libgit2/src/xdiff/xdiffi.c +7 -5
  399. data/vendor/libgit2/src/xdiff/xhistogram.c +1 -1
  400. data/vendor/libgit2/src/xdiff/xmerge.c +27 -15
  401. data/vendor/libgit2/src/xdiff/xpatience.c +3 -0
  402. data/vendor/libgit2/src/zstream.c +4 -4
  403. metadata +122 -33
  404. data/vendor/libgit2/deps/regex/CMakeLists.txt +0 -2
  405. data/vendor/libgit2/deps/regex/config.h +0 -7
  406. data/vendor/libgit2/deps/regex/regcomp.c +0 -3857
  407. data/vendor/libgit2/deps/regex/regex.c +0 -92
  408. data/vendor/libgit2/deps/regex/regex.h +0 -582
  409. data/vendor/libgit2/deps/regex/regex_internal.c +0 -1744
  410. data/vendor/libgit2/deps/regex/regex_internal.h +0 -819
  411. data/vendor/libgit2/deps/regex/regexec.c +0 -4369
  412. data/vendor/libgit2/include/git2/inttypes.h +0 -309
  413. data/vendor/libgit2/include/git2/sys/time.h +0 -31
  414. data/vendor/libgit2/libgit2.pc.in +0 -13
  415. data/vendor/libgit2/src/config_file.h +0 -73
  416. data/vendor/libgit2/src/fnmatch.c +0 -248
  417. data/vendor/libgit2/src/fnmatch.h +0 -48
  418. data/vendor/libgit2/src/hash/hash_collisiondetect.h +0 -47
  419. data/vendor/libgit2/src/hash/hash_openssl.h +0 -59
  420. data/vendor/libgit2/src/streams/curl.c +0 -385
@@ -17,6 +17,7 @@
17
17
  #include "map.h"
18
18
  #include "mwindow.h"
19
19
  #include "odb.h"
20
+ #include "offmap.h"
20
21
  #include "oidmap.h"
21
22
  #include "array.h"
22
23
 
@@ -63,17 +64,14 @@ typedef struct git_pack_cache_entry {
63
64
  } git_pack_cache_entry;
64
65
 
65
66
  struct pack_chain_elem {
66
- git_off_t base_key;
67
- git_off_t offset;
67
+ off64_t base_key;
68
+ off64_t offset;
68
69
  size_t size;
69
- git_otype type;
70
+ git_object_t type;
70
71
  };
71
72
 
72
73
  typedef git_array_t(struct pack_chain_elem) git_dependency_chain;
73
74
 
74
- #include "offmap.h"
75
- #include "oidmap.h"
76
-
77
75
  #define GIT_PACK_CACHE_MEMORY_LIMIT 16 * 1024 * 1024
78
76
  #define GIT_PACK_CACHE_SIZE_LIMIT 1024 * 1024 /* don't bother caching anything over 1MB */
79
77
 
@@ -110,45 +108,45 @@ struct git_pack_file {
110
108
  };
111
109
 
112
110
  struct git_pack_entry {
113
- git_off_t offset;
111
+ off64_t offset;
114
112
  git_oid sha1;
115
113
  struct git_pack_file *p;
116
114
  };
117
115
 
118
116
  typedef struct git_packfile_stream {
119
- git_off_t curpos;
117
+ off64_t curpos;
120
118
  int done;
121
119
  z_stream zstream;
122
120
  struct git_pack_file *p;
123
121
  git_mwindow *mw;
124
122
  } git_packfile_stream;
125
123
 
126
- size_t git_packfile__object_header(unsigned char *hdr, size_t size, git_otype type);
124
+ size_t git_packfile__object_header(unsigned char *hdr, size_t size, git_object_t type);
127
125
 
128
126
  int git_packfile__name(char **out, const char *path);
129
127
 
130
128
  int git_packfile_unpack_header(
131
129
  size_t *size_p,
132
- git_otype *type_p,
130
+ git_object_t *type_p,
133
131
  git_mwindow_file *mwf,
134
132
  git_mwindow **w_curs,
135
- git_off_t *curpos);
133
+ off64_t *curpos);
136
134
 
137
135
  int git_packfile_resolve_header(
138
136
  size_t *size_p,
139
- git_otype *type_p,
137
+ git_object_t *type_p,
140
138
  struct git_pack_file *p,
141
- git_off_t offset);
139
+ off64_t offset);
142
140
 
143
- int git_packfile_unpack(git_rawobj *obj, struct git_pack_file *p, git_off_t *obj_offset);
141
+ int git_packfile_unpack(git_rawobj *obj, struct git_pack_file *p, off64_t *obj_offset);
144
142
 
145
- int git_packfile_stream_open(git_packfile_stream *obj, struct git_pack_file *p, git_off_t curpos);
143
+ int git_packfile_stream_open(git_packfile_stream *obj, struct git_pack_file *p, off64_t curpos);
146
144
  ssize_t git_packfile_stream_read(git_packfile_stream *obj, void *buffer, size_t len);
147
- void git_packfile_stream_free(git_packfile_stream *obj);
145
+ void git_packfile_stream_dispose(git_packfile_stream *obj);
148
146
 
149
- git_off_t get_delta_base(struct git_pack_file *p, git_mwindow **w_curs,
150
- git_off_t *curpos, git_otype type,
151
- git_off_t delta_obj_offset);
147
+ off64_t get_delta_base(struct git_pack_file *p, git_mwindow **w_curs,
148
+ off64_t *curpos, git_object_t type,
149
+ off64_t delta_obj_offset);
152
150
 
153
151
  void git_packfile_close(struct git_pack_file *p, bool unlink_packfile);
154
152
  void git_packfile_free(struct git_pack_file *p);
@@ -101,6 +101,16 @@ int git_parse_advance_digit(int64_t *out, git_parse_ctx *ctx, int base)
101
101
  return 0;
102
102
  }
103
103
 
104
+ int git_parse_advance_oid(git_oid *out, git_parse_ctx *ctx)
105
+ {
106
+ if (ctx->line_len < GIT_OID_HEXSZ)
107
+ return -1;
108
+ if ((git_oid_fromstrn(out, ctx->line, GIT_OID_HEXSZ)) < 0)
109
+ return -1;
110
+ git_parse_advance_chars(ctx, GIT_OID_HEXSZ);
111
+ return 0;
112
+ }
113
+
104
114
  int git_parse_peek(char *out, git_parse_ctx *ctx, int flags)
105
115
  {
106
116
  size_t remain = ctx->line_len;
@@ -23,12 +23,11 @@ typedef struct {
23
23
  size_t line_num;
24
24
  } git_parse_ctx;
25
25
 
26
+ #define GIT_PARSE_CTX_INIT { 0 }
27
+
26
28
  int git_parse_ctx_init(git_parse_ctx *ctx, const char *content, size_t content_len);
27
29
  void git_parse_ctx_clear(git_parse_ctx *ctx);
28
30
 
29
- #define git_parse_err(...) \
30
- ( giterr_set(GITERR_PATCH, __VA_ARGS__), -1 )
31
-
32
31
  #define git_parse_ctx_contains_s(ctx, str) \
33
32
  git_parse_ctx_contains(ctx, str, sizeof(str) - 1)
34
33
 
@@ -51,6 +50,7 @@ int git_parse_advance_expected(
51
50
  int git_parse_advance_ws(git_parse_ctx *ctx);
52
51
  int git_parse_advance_nl(git_parse_ctx *ctx);
53
52
  int git_parse_advance_digit(int64_t *out, git_parse_ctx *ctx, int base);
53
+ int git_parse_advance_oid(git_oid *out, git_parse_ctx *ctx);
54
54
 
55
55
  enum GIT_PARSE_PEEK_FLAGS {
56
56
  GIT_PARSE_PEEK_SKIP_WHITESPACE = (1 << 0)
@@ -79,12 +79,12 @@ size_t git_patch_size(
79
79
  git_buf file_header = GIT_BUF_INIT;
80
80
 
81
81
  if (git_diff_delta__format_file_header(
82
- &file_header, patch->delta, NULL, NULL, 0) < 0)
83
- giterr_clear();
82
+ &file_header, patch->delta, NULL, NULL, 0, true) < 0)
83
+ git_error_clear();
84
84
  else
85
85
  out += git_buf_len(&file_header);
86
86
 
87
- git_buf_free(&file_header);
87
+ git_buf_dispose(&file_header);
88
88
  }
89
89
 
90
90
  return out;
@@ -141,7 +141,7 @@ size_t git_patch_num_hunks(const git_patch *patch)
141
141
 
142
142
  static int patch_error_outofrange(const char *thing)
143
143
  {
144
- giterr_set(GITERR_INVALID, "patch %s index out of range", thing);
144
+ git_error_set(GIT_ERROR_INVALID, "patch %s index out of range", thing);
145
145
  return GIT_ENOTFOUND;
146
146
  }
147
147
 
@@ -15,7 +15,7 @@
15
15
  #include "diff_xdiff.h"
16
16
  #include "delta.h"
17
17
  #include "zstream.h"
18
- #include "fileops.h"
18
+ #include "futils.h"
19
19
 
20
20
  static void diff_output_init(
21
21
  git_patch_generated_output *, const git_diff_options *, git_diff_file_cb,
@@ -84,7 +84,7 @@ static int patch_generated_normalize_options(
84
84
  const git_diff_options *opts)
85
85
  {
86
86
  if (opts) {
87
- GITERR_CHECK_VERSION(opts, GIT_DIFF_OPTIONS_VERSION, "git_diff_options");
87
+ GIT_ERROR_CHECK_VERSION(opts, GIT_DIFF_OPTIONS_VERSION, "git_diff_options");
88
88
  memcpy(out, opts, sizeof(git_diff_options));
89
89
  } else {
90
90
  git_diff_options default_opts = GIT_DIFF_OPTIONS_INIT;
@@ -99,8 +99,8 @@ static int patch_generated_normalize_options(
99
99
  git__strdup(opts->new_prefix) :
100
100
  git__strdup(DIFF_NEW_PREFIX_DEFAULT);
101
101
 
102
- GITERR_CHECK_ALLOC(out->old_prefix);
103
- GITERR_CHECK_ALLOC(out->new_prefix);
102
+ GIT_ERROR_CHECK_ALLOC(out->old_prefix);
103
+ GIT_ERROR_CHECK_ALLOC(out->new_prefix);
104
104
 
105
105
  return 0;
106
106
  }
@@ -135,7 +135,7 @@ static int patch_generated_alloc_from_diff(
135
135
  {
136
136
  int error;
137
137
  git_patch_generated *patch = git__calloc(1, sizeof(git_patch_generated));
138
- GITERR_CHECK_ALLOC(patch);
138
+ GIT_ERROR_CHECK_ALLOC(patch);
139
139
 
140
140
  if (!(error = patch_generated_init(patch, diff, delta_index))) {
141
141
  patch->flags |= GIT_PATCH_GENERATED_ALLOCATED;
@@ -248,7 +248,7 @@ static int patch_generated_invoke_file_callback(
248
248
  if (!output->file_cb)
249
249
  return 0;
250
250
 
251
- return giterr_set_after_callback_function(
251
+ return git_error_set_after_callback_function(
252
252
  output->file_cb(patch->base.delta, progress, output->payload),
253
253
  "git_patch");
254
254
  }
@@ -314,8 +314,8 @@ static int create_binary(
314
314
  }
315
315
 
316
316
  done:
317
- git_buf_free(&deflate);
318
- git_buf_free(&delta);
317
+ git_buf_dispose(&deflate);
318
+ git_buf_dispose(&delta);
319
319
 
320
320
  return error;
321
321
  }
@@ -350,7 +350,7 @@ static int diff_binary(git_patch_generated_output *output, git_patch_generated *
350
350
  return error;
351
351
  }
352
352
 
353
- error = giterr_set_after_callback_function(
353
+ error = git_error_set_after_callback_function(
354
354
  output->binary_cb(patch->base.delta, &binary, output->payload),
355
355
  "git_patch");
356
356
 
@@ -397,7 +397,7 @@ static int diff_required(git_diff *diff, const char *action)
397
397
  {
398
398
  if (diff)
399
399
  return 0;
400
- giterr_set(GITERR_INVALID, "must provide valid diff to %s", action);
400
+ git_error_set(GIT_ERROR_INVALID, "must provide valid diff to %s", action);
401
401
  return -1;
402
402
  }
403
403
 
@@ -501,12 +501,12 @@ static int patch_generated_with_delta_alloc(
501
501
  size_t new_len = *new_path ? strlen(*new_path) : 0;
502
502
  size_t alloc_len;
503
503
 
504
- GITERR_CHECK_ALLOC_ADD(&alloc_len, sizeof(*pd), old_len);
505
- GITERR_CHECK_ALLOC_ADD(&alloc_len, alloc_len, new_len);
506
- GITERR_CHECK_ALLOC_ADD(&alloc_len, alloc_len, 2);
504
+ GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, sizeof(*pd), old_len);
505
+ GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, alloc_len, new_len);
506
+ GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, alloc_len, 2);
507
507
 
508
508
  *out = pd = git__calloc(1, alloc_len);
509
- GITERR_CHECK_ALLOC(pd);
509
+ GIT_ERROR_CHECK_ALLOC(pd);
510
510
 
511
511
  pd->patch.flags = GIT_PATCH_GENERATED_ALLOCATED;
512
512
 
@@ -708,7 +708,7 @@ int git_patch_generated_from_diff(
708
708
 
709
709
  delta = git_vector_get(&diff->deltas, idx);
710
710
  if (!delta) {
711
- giterr_set(GITERR_INVALID, "index out of range for delta in diff");
711
+ git_error_set(GIT_ERROR_INVALID, "index out of range for delta in diff");
712
712
  return GIT_ENOTFOUND;
713
713
  }
714
714
 
@@ -788,7 +788,7 @@ static int patch_generated_binary_cb(
788
788
 
789
789
  if (binary->old_file.data) {
790
790
  patch->binary.old_file.data = git__malloc(binary->old_file.datalen);
791
- GITERR_CHECK_ALLOC(patch->binary.old_file.data);
791
+ GIT_ERROR_CHECK_ALLOC(patch->binary.old_file.data);
792
792
 
793
793
  memcpy((char *)patch->binary.old_file.data,
794
794
  binary->old_file.data, binary->old_file.datalen);
@@ -796,7 +796,7 @@ static int patch_generated_binary_cb(
796
796
 
797
797
  if (binary->new_file.data) {
798
798
  patch->binary.new_file.data = git__malloc(binary->new_file.datalen);
799
- GITERR_CHECK_ALLOC(patch->binary.new_file.data);
799
+ GIT_ERROR_CHECK_ALLOC(patch->binary.new_file.data);
800
800
 
801
801
  memcpy((char *)patch->binary.new_file.data,
802
802
  binary->new_file.data, binary->new_file.datalen);
@@ -816,7 +816,7 @@ static int git_patch_hunk_cb(
816
816
  GIT_UNUSED(delta);
817
817
 
818
818
  hunk = git_array_alloc(patch->base.hunks);
819
- GITERR_CHECK_ALLOC(hunk);
819
+ GIT_ERROR_CHECK_ALLOC(hunk);
820
820
 
821
821
  memcpy(&hunk->hunk, hunk_, sizeof(hunk->hunk));
822
822
 
@@ -836,7 +836,7 @@ static int patch_generated_line_cb(
836
836
  {
837
837
  git_patch_generated *patch = payload;
838
838
  git_patch_hunk *hunk;
839
- git_diff_line *line;
839
+ git_diff_line *line;
840
840
 
841
841
  GIT_UNUSED(delta);
842
842
  GIT_UNUSED(hunk_);
@@ -845,7 +845,7 @@ static int patch_generated_line_cb(
845
845
  assert(hunk); /* programmer error if no hunk is available */
846
846
 
847
847
  line = git_array_alloc(patch->base.lines);
848
- GITERR_CHECK_ALLOC(line);
848
+ GIT_ERROR_CHECK_ALLOC(line);
849
849
 
850
850
  memcpy(line, line_, sizeof(*line));
851
851
 
@@ -33,7 +33,19 @@ typedef struct {
33
33
  char *old_prefix, *new_prefix;
34
34
  } git_patch_parsed;
35
35
 
36
- static int header_path_len(git_patch_parse_ctx *ctx)
36
+ static int git_parse_err(const char *fmt, ...) GIT_FORMAT_PRINTF(1, 2);
37
+ static int git_parse_err(const char *fmt, ...)
38
+ {
39
+ va_list ap;
40
+
41
+ va_start(ap, fmt);
42
+ git_error_vset(GIT_ERROR_PATCH, fmt, ap);
43
+ va_end(ap);
44
+
45
+ return -1;
46
+ }
47
+
48
+ static size_t header_path_len(git_patch_parse_ctx *ctx)
37
49
  {
38
50
  bool inquote = 0;
39
51
  bool quoted = git_parse_ctx_contains_s(&ctx->parse_ctx, "\"");
@@ -58,31 +70,36 @@ static int parse_header_path_buf(git_buf *path, git_patch_parse_ctx *ctx, size_t
58
70
  int error;
59
71
 
60
72
  if ((error = git_buf_put(path, ctx->parse_ctx.line, path_len)) < 0)
61
- goto done;
73
+ return error;
62
74
 
63
75
  git_parse_advance_chars(&ctx->parse_ctx, path_len);
64
76
 
65
77
  git_buf_rtrim(path);
66
78
 
67
- if (path->size > 0 && path->ptr[0] == '"')
68
- error = git_buf_unquote(path);
69
-
70
- if (error < 0)
71
- goto done;
79
+ if (path->size > 0 && path->ptr[0] == '"' &&
80
+ (error = git_buf_unquote(path)) < 0)
81
+ return error;
72
82
 
73
83
  git_path_squash_slashes(path);
74
84
 
75
- done:
76
- return error;
85
+ if (!path->size)
86
+ return git_parse_err("patch contains empty path at line %"PRIuZ,
87
+ ctx->parse_ctx.line_num);
88
+
89
+ return 0;
77
90
  }
78
91
 
79
92
  static int parse_header_path(char **out, git_patch_parse_ctx *ctx)
80
93
  {
81
94
  git_buf path = GIT_BUF_INIT;
82
- int error = parse_header_path_buf(&path, ctx, header_path_len(ctx));
95
+ int error;
83
96
 
97
+ if ((error = parse_header_path_buf(&path, ctx, header_path_len(ctx))) < 0)
98
+ goto out;
84
99
  *out = git_buf_detach(&path);
85
100
 
101
+ out:
102
+ git_buf_dispose(&path);
86
103
  return error;
87
104
  }
88
105
 
@@ -92,13 +109,19 @@ static int parse_header_git_oldpath(
92
109
  git_buf old_path = GIT_BUF_INIT;
93
110
  int error;
94
111
 
112
+ if (patch->old_path) {
113
+ error = git_parse_err("patch contains duplicate old path at line %"PRIuZ,
114
+ ctx->parse_ctx.line_num);
115
+ goto out;
116
+ }
117
+
95
118
  if ((error = parse_header_path_buf(&old_path, ctx, ctx->parse_ctx.line_len - 1)) < 0)
96
119
  goto out;
97
120
 
98
121
  patch->old_path = git_buf_detach(&old_path);
99
122
 
100
123
  out:
101
- git_buf_free(&old_path);
124
+ git_buf_dispose(&old_path);
102
125
  return error;
103
126
  }
104
127
 
@@ -108,13 +131,18 @@ static int parse_header_git_newpath(
108
131
  git_buf new_path = GIT_BUF_INIT;
109
132
  int error;
110
133
 
111
- if ((error = parse_header_path_buf(&new_path, ctx, ctx->parse_ctx.line_len - 1)) < 0)
134
+ if (patch->new_path) {
135
+ error = git_parse_err("patch contains duplicate new path at line %"PRIuZ,
136
+ ctx->parse_ctx.line_num);
112
137
  goto out;
138
+ }
113
139
 
140
+ if ((error = parse_header_path_buf(&new_path, ctx, ctx->parse_ctx.line_len - 1)) < 0)
141
+ goto out;
114
142
  patch->new_path = git_buf_detach(&new_path);
115
143
 
116
144
  out:
117
- git_buf_free(&new_path);
145
+ git_buf_dispose(&new_path);
118
146
  return error;
119
147
  }
120
148
 
@@ -203,9 +231,9 @@ static int parse_header_git_deletedfilemode(
203
231
  git_patch_parsed *patch,
204
232
  git_patch_parse_ctx *ctx)
205
233
  {
206
- git__free((char *)patch->base.delta->old_file.path);
234
+ git__free((char *)patch->base.delta->new_file.path);
207
235
 
208
- patch->base.delta->old_file.path = NULL;
236
+ patch->base.delta->new_file.path = NULL;
209
237
  patch->base.delta->status = GIT_DELTA_DELETED;
210
238
  patch->base.delta->nfiles = 1;
211
239
 
@@ -216,9 +244,9 @@ static int parse_header_git_newfilemode(
216
244
  git_patch_parsed *patch,
217
245
  git_patch_parse_ctx *ctx)
218
246
  {
219
- git__free((char *)patch->base.delta->new_file.path);
247
+ git__free((char *)patch->base.delta->old_file.path);
220
248
 
221
- patch->base.delta->new_file.path = NULL;
249
+ patch->base.delta->old_file.path = NULL;
222
250
  patch->base.delta->status = GIT_DELTA_ADDED;
223
251
  patch->base.delta->nfiles = 1;
224
252
 
@@ -282,7 +310,7 @@ static int parse_header_percent(uint16_t *out, git_patch_parse_ctx *ctx)
282
310
  if (val < 0 || val > 100)
283
311
  return -1;
284
312
 
285
- *out = val;
313
+ *out = (uint16_t)val;
286
314
  return 0;
287
315
  }
288
316
 
@@ -328,7 +356,8 @@ static int parse_header_start(git_patch_parsed *patch, git_patch_parse_ctx *ctx)
328
356
  * proceeed here. We then hope for the "---" and "+++" lines to fix that
329
357
  * for us.
330
358
  */
331
- if (!git_parse_ctx_contains(&ctx->parse_ctx, "\n", 1)) {
359
+ if (!git_parse_ctx_contains(&ctx->parse_ctx, "\n", 1) &&
360
+ !git_parse_ctx_contains(&ctx->parse_ctx, "\r\n", 2)) {
332
361
  git_parse_advance_chars(&ctx->parse_ctx, ctx->parse_ctx.line_len - 1);
333
362
 
334
363
  git__free(patch->header_old_path);
@@ -376,6 +405,7 @@ static const parse_header_transition transitions[] = {
376
405
  { "index " , STATE_DIFF, STATE_INDEX, parse_header_git_index },
377
406
  { "index " , STATE_END, STATE_INDEX, parse_header_git_index },
378
407
 
408
+ { "--- " , STATE_DIFF, STATE_PATH, parse_header_git_oldpath },
379
409
  { "--- " , STATE_INDEX, STATE_PATH, parse_header_git_oldpath },
380
410
  { "+++ " , STATE_PATH, STATE_END, parse_header_git_newpath },
381
411
  { "GIT binary patch" , STATE_INDEX, STATE_END, NULL },
@@ -393,6 +423,7 @@ static const parse_header_transition transitions[] = {
393
423
  /* Next patch */
394
424
  { "diff --git " , STATE_END, 0, NULL },
395
425
  { "@@ -" , STATE_END, 0, NULL },
426
+ { "-- " , STATE_INDEX, 0, NULL },
396
427
  { "-- " , STATE_END, 0, NULL },
397
428
  };
398
429
 
@@ -460,7 +491,7 @@ done:
460
491
 
461
492
  static int parse_int(int *out, git_patch_parse_ctx *ctx)
462
493
  {
463
- git_off_t num;
494
+ int64_t num;
464
495
 
465
496
  if (git_parse_advance_digit(&num, &ctx->parse_ctx, 10) < 0 || !git__is_int(num))
466
497
  return -1;
@@ -518,11 +549,19 @@ static int parse_hunk_header(
518
549
  return 0;
519
550
 
520
551
  fail:
521
- giterr_set(GITERR_PATCH, "invalid patch hunk header at line %"PRIuZ,
552
+ git_error_set(GIT_ERROR_PATCH, "invalid patch hunk header at line %"PRIuZ,
522
553
  ctx->parse_ctx.line_num);
523
554
  return -1;
524
555
  }
525
556
 
557
+ static int eof_for_origin(int origin) {
558
+ if (origin == GIT_DIFF_LINE_ADDITION)
559
+ return GIT_DIFF_LINE_ADD_EOFNL;
560
+ if (origin == GIT_DIFF_LINE_DELETION)
561
+ return GIT_DIFF_LINE_DEL_EOFNL;
562
+ return GIT_DIFF_LINE_CONTEXT_EOFNL;
563
+ }
564
+
526
565
  static int parse_hunk_body(
527
566
  git_patch_parsed *patch,
528
567
  git_patch_hunk *hunk,
@@ -533,6 +572,7 @@ static int parse_hunk_body(
533
572
 
534
573
  int oldlines = hunk->hunk.old_lines;
535
574
  int newlines = hunk->hunk.new_lines;
575
+ int last_origin = 0;
536
576
 
537
577
  for (;
538
578
  ctx->parse_ctx.remain_len > 1 &&
@@ -540,11 +580,17 @@ static int parse_hunk_body(
540
580
  !git_parse_ctx_contains_s(&ctx->parse_ctx, "@@ -");
541
581
  git_parse_advance_line(&ctx->parse_ctx)) {
542
582
 
583
+ int old_lineno, new_lineno, origin, prefix = 1;
543
584
  char c;
544
- int origin;
545
- int prefix = 1;
546
- int old_lineno = hunk->hunk.old_start + (hunk->hunk.old_lines - oldlines);
547
- int new_lineno = hunk->hunk.new_start + (hunk->hunk.new_lines - newlines);
585
+
586
+ if (git__add_int_overflow(&old_lineno, hunk->hunk.old_start, hunk->hunk.old_lines) ||
587
+ git__sub_int_overflow(&old_lineno, old_lineno, oldlines) ||
588
+ git__add_int_overflow(&new_lineno, hunk->hunk.new_start, hunk->hunk.new_lines) ||
589
+ git__sub_int_overflow(&new_lineno, new_lineno, newlines)) {
590
+ error = git_parse_err("unrepresentable line count at line %"PRIuZ,
591
+ ctx->parse_ctx.line_num);
592
+ goto done;
593
+ }
548
594
 
549
595
  if (ctx->parse_ctx.line_len == 0 || ctx->parse_ctx.line[ctx->parse_ctx.line_len - 1] != '\n') {
550
596
  error = git_parse_err("invalid patch instruction at line %"PRIuZ,
@@ -577,18 +623,34 @@ static int parse_hunk_body(
577
623
  old_lineno = -1;
578
624
  break;
579
625
 
626
+ case '\\':
627
+ /*
628
+ * If there are no oldlines left, then this is probably
629
+ * the "" marker. Do not
630
+ * verify its format, as it may be localized.
631
+ */
632
+ if (!oldlines) {
633
+ prefix = 0;
634
+ origin = eof_for_origin(last_origin);
635
+ old_lineno = -1;
636
+ new_lineno = -1;
637
+ break;
638
+ }
639
+ /* fall through */
640
+
580
641
  default:
581
642
  error = git_parse_err("invalid patch hunk at line %"PRIuZ, ctx->parse_ctx.line_num);
582
643
  goto done;
583
644
  }
584
645
 
585
646
  line = git_array_alloc(patch->base.lines);
586
- GITERR_CHECK_ALLOC(line);
647
+ GIT_ERROR_CHECK_ALLOC(line);
587
648
 
588
649
  memset(line, 0x0, sizeof(git_diff_line));
589
650
 
590
- line->content = ctx->parse_ctx.line + prefix;
591
651
  line->content_len = ctx->parse_ctx.line_len - prefix;
652
+ line->content = git__strndup(ctx->parse_ctx.line + prefix, line->content_len);
653
+ GIT_ERROR_CHECK_ALLOC(line->content);
592
654
  line->content_offset = ctx->parse_ctx.content_len - ctx->parse_ctx.remain_len;
593
655
  line->origin = origin;
594
656
  line->num_lines = 1;
@@ -596,6 +658,8 @@ static int parse_hunk_body(
596
658
  line->new_lineno = new_lineno;
597
659
 
598
660
  hunk->line_count++;
661
+
662
+ last_origin = origin;
599
663
  }
600
664
 
601
665
  if (oldlines || newlines) {
@@ -605,7 +669,8 @@ static int parse_hunk_body(
605
669
  goto done;
606
670
  }
607
671
 
608
- /* Handle "". Only expect the leading
672
+ /*
673
+ * Handle "". Only expect the leading
609
674
  * backslash, though, because the rest of the string could be
610
675
  * localized. Because `diff` optimizes for the case where you
611
676
  * want to apply the patch by hand.
@@ -616,11 +681,25 @@ static int parse_hunk_body(
616
681
  line = git_array_get(patch->base.lines, git_array_size(patch->base.lines) - 1);
617
682
 
618
683
  if (line->content_len < 1) {
619
- error = git_parse_err("cannot trim trailing newline of empty line");
684
+ error = git_parse_err("last line has no trailing newline");
620
685
  goto done;
621
686
  }
622
687
 
623
- line->content_len--;
688
+ line = git_array_alloc(patch->base.lines);
689
+ GIT_ERROR_CHECK_ALLOC(line);
690
+
691
+ memset(line, 0x0, sizeof(git_diff_line));
692
+
693
+ line->content_len = ctx->parse_ctx.line_len;
694
+ line->content = git__strndup(ctx->parse_ctx.line, line->content_len);
695
+ GIT_ERROR_CHECK_ALLOC(line->content);
696
+ line->content_offset = ctx->parse_ctx.content_len - ctx->parse_ctx.remain_len;
697
+ line->origin = eof_for_origin(last_origin);
698
+ line->num_lines = 1;
699
+ line->old_lineno = -1;
700
+ line->new_lineno = -1;
701
+
702
+ hunk->line_count++;
624
703
 
625
704
  git_parse_advance_line(&ctx->parse_ctx);
626
705
  }
@@ -650,7 +729,7 @@ static int parse_patch_header(
650
729
  * noise, continue.
651
730
  */
652
731
  if (parse_hunk_header(&hunk, ctx) < 0) {
653
- giterr_clear();
732
+ git_error_clear();
654
733
  continue;
655
734
  }
656
735
 
@@ -673,7 +752,7 @@ static int parse_patch_header(
673
752
  continue;
674
753
  }
675
754
 
676
- giterr_set(GITERR_PATCH, "no patch found");
755
+ git_error_set(GIT_ERROR_PATCH, "no patch found");
677
756
  error = GIT_ENOTFOUND;
678
757
 
679
758
  done:
@@ -686,7 +765,7 @@ static int parse_patch_binary_side(
686
765
  {
687
766
  git_diff_binary_t type = GIT_DIFF_BINARY_NONE;
688
767
  git_buf base85 = GIT_BUF_INIT, decoded = GIT_BUF_INIT;
689
- git_off_t len;
768
+ int64_t len;
690
769
  int error = 0;
691
770
 
692
771
  if (git_parse_ctx_contains_s(&ctx->parse_ctx, "literal ")) {
@@ -729,7 +808,7 @@ static int parse_patch_binary_side(
729
808
 
730
809
  encoded_len = ((decoded_len / 4) + !!(decoded_len % 4)) * 5;
731
810
 
732
- if (encoded_len > ctx->parse_ctx.line_len - 1) {
811
+ if (!encoded_len || !ctx->parse_ctx.line_len || encoded_len > ctx->parse_ctx.line_len - 1) {
733
812
  error = git_parse_err("truncated binary data at line %"PRIuZ, ctx->parse_ctx.line_num);
734
813
  goto done;
735
814
  }
@@ -757,8 +836,8 @@ static int parse_patch_binary_side(
757
836
  binary->data = git_buf_detach(&decoded);
758
837
 
759
838
  done:
760
- git_buf_free(&base85);
761
- git_buf_free(&decoded);
839
+ git_buf_dispose(&base85);
840
+ git_buf_dispose(&decoded);
762
841
  return error;
763
842
  }
764
843
 
@@ -799,12 +878,23 @@ static int parse_patch_binary_nodata(
799
878
  git_patch_parsed *patch,
800
879
  git_patch_parse_ctx *ctx)
801
880
  {
881
+ const char *old = patch->old_path ? patch->old_path : patch->header_old_path;
882
+ const char *new = patch->new_path ? patch->new_path : patch->header_new_path;
883
+
884
+ if (!old || !new)
885
+ return git_parse_err("corrupt binary data without paths at line %"PRIuZ, ctx->parse_ctx.line_num);
886
+
887
+ if (patch->base.delta->status == GIT_DELTA_ADDED)
888
+ old = "/dev/null";
889
+ else if (patch->base.delta->status == GIT_DELTA_DELETED)
890
+ new = "/dev/null";
891
+
802
892
  if (git_parse_advance_expected_str(&ctx->parse_ctx, "Binary files ") < 0 ||
803
- git_parse_advance_expected_str(&ctx->parse_ctx, patch->header_old_path) < 0 ||
804
- git_parse_advance_expected_str(&ctx->parse_ctx, " and ") < 0 ||
805
- git_parse_advance_expected_str(&ctx->parse_ctx, patch->header_new_path) < 0 ||
806
- git_parse_advance_expected_str(&ctx->parse_ctx, " differ") < 0 ||
807
- git_parse_advance_nl(&ctx->parse_ctx) < 0)
893
+ git_parse_advance_expected_str(&ctx->parse_ctx, old) < 0 ||
894
+ git_parse_advance_expected_str(&ctx->parse_ctx, " and ") < 0 ||
895
+ git_parse_advance_expected_str(&ctx->parse_ctx, new) < 0 ||
896
+ git_parse_advance_expected_str(&ctx->parse_ctx, " differ") < 0 ||
897
+ git_parse_advance_nl(&ctx->parse_ctx) < 0)
808
898
  return git_parse_err("corrupt git binary header at line %"PRIuZ, ctx->parse_ctx.line_num);
809
899
 
810
900
  patch->base.binary.contains_data = 0;
@@ -821,7 +911,7 @@ static int parse_patch_hunks(
821
911
 
822
912
  while (git_parse_ctx_contains_s(&ctx->parse_ctx, "@@ -")) {
823
913
  hunk = git_array_alloc(patch->base.hunks);
824
- GITERR_CHECK_ALLOC(hunk);
914
+ GIT_ERROR_CHECK_ALLOC(hunk);
825
915
 
826
916
  memset(hunk, 0, sizeof(git_patch_hunk));
827
917
 
@@ -921,21 +1011,15 @@ static int check_filenames(git_patch_parsed *patch)
921
1011
  return git_parse_err("missing old path");
922
1012
 
923
1013
  /* Ensure (non-renamed) paths match */
924
- if (check_header_names(
925
- patch->header_old_path, patch->old_path, "old", added) < 0 ||
926
- check_header_names(
927
- patch->header_new_path, patch->new_path, "new", deleted) < 0)
1014
+ if (check_header_names(patch->header_old_path, patch->old_path, "old", added) < 0 ||
1015
+ check_header_names(patch->header_new_path, patch->new_path, "new", deleted) < 0)
928
1016
  return -1;
929
1017
 
930
- prefixed_old = (!added && patch->old_path) ? patch->old_path :
931
- patch->header_old_path;
932
- prefixed_new = (!deleted && patch->new_path) ? patch->new_path :
933
- patch->header_new_path;
1018
+ prefixed_old = (!added && patch->old_path) ? patch->old_path : patch->header_old_path;
1019
+ prefixed_new = (!deleted && patch->new_path) ? patch->new_path : patch->header_new_path;
934
1020
 
935
- if (check_prefix(
936
- &patch->old_prefix, &old_prefixlen, patch, prefixed_old) < 0 ||
937
- check_prefix(
938
- &patch->new_prefix, &new_prefixlen, patch, prefixed_new) < 0)
1021
+ if ((prefixed_old && check_prefix(&patch->old_prefix, &old_prefixlen, patch, prefixed_old) < 0) ||
1022
+ (prefixed_new && check_prefix(&patch->new_prefix, &new_prefixlen, patch, prefixed_new) < 0))
939
1023
  return -1;
940
1024
 
941
1025
  /* Prefer the rename filenames as they are unambiguous and unprefixed */
@@ -950,7 +1034,7 @@ static int check_filenames(git_patch_parsed *patch)
950
1034
  patch->base.delta->new_file.path = prefixed_new + new_prefixlen;
951
1035
 
952
1036
  if (!patch->base.delta->old_file.path &&
953
- !patch->base.delta->new_file.path)
1037
+ !patch->base.delta->new_file.path)
954
1038
  return git_parse_err("git diff header lacks old / new paths");
955
1039
 
956
1040
  return 0;
@@ -964,14 +1048,14 @@ static int check_patch(git_patch_parsed *patch)
964
1048
  return -1;
965
1049
 
966
1050
  if (delta->old_file.path &&
967
- delta->status != GIT_DELTA_DELETED &&
968
- !delta->new_file.mode)
1051
+ delta->status != GIT_DELTA_DELETED &&
1052
+ !delta->new_file.mode)
969
1053
  delta->new_file.mode = delta->old_file.mode;
970
1054
 
971
1055
  if (delta->status == GIT_DELTA_MODIFIED &&
972
- !(delta->flags & GIT_DIFF_FLAG_BINARY) &&
973
- delta->new_file.mode == delta->old_file.mode &&
974
- git_array_size(patch->base.hunks) == 0)
1056
+ !(delta->flags & GIT_DIFF_FLAG_BINARY) &&
1057
+ delta->new_file.mode == delta->old_file.mode &&
1058
+ git_array_size(patch->base.hunks) == 0)
975
1059
  return git_parse_err("patch with no hunks");
976
1060
 
977
1061
  if (delta->status == GIT_DELTA_ADDED) {
@@ -1043,6 +1127,8 @@ int git_patch_parsed_from_diff(git_patch **out, git_diff *d, size_t idx)
1043
1127
  static void patch_parsed__free(git_patch *p)
1044
1128
  {
1045
1129
  git_patch_parsed *patch = (git_patch_parsed *)p;
1130
+ git_diff_line *line;
1131
+ size_t i;
1046
1132
 
1047
1133
  if (!patch)
1048
1134
  return;
@@ -1052,6 +1138,8 @@ static void patch_parsed__free(git_patch *p)
1052
1138
  git__free((char *)patch->base.binary.old_file.data);
1053
1139
  git__free((char *)patch->base.binary.new_file.data);
1054
1140
  git_array_clear(patch->base.hunks);
1141
+ git_array_foreach(patch->base.lines, i, line)
1142
+ git__free((char *) line->content);
1055
1143
  git_array_clear(patch->base.lines);
1056
1144
  git__free(patch->base.delta);
1057
1145
 
@@ -1079,7 +1167,7 @@ int git_patch_parse(
1079
1167
  *out = NULL;
1080
1168
 
1081
1169
  patch = git__calloc(1, sizeof(git_patch_parsed));
1082
- GITERR_CHECK_ALLOC(patch);
1170
+ GIT_ERROR_CHECK_ALLOC(patch);
1083
1171
 
1084
1172
  patch->ctx = ctx;
1085
1173
  GIT_REFCOUNT_INC(patch->ctx);
@@ -1087,7 +1175,7 @@ int git_patch_parse(
1087
1175
  patch->base.free_fn = patch_parsed__free;
1088
1176
 
1089
1177
  patch->base.delta = git__calloc(1, sizeof(git_diff_delta));
1090
- GITERR_CHECK_ALLOC(patch->base.delta);
1178
+ GIT_ERROR_CHECK_ALLOC(patch->base.delta);
1091
1179
 
1092
1180
  patch->base.delta->status = GIT_DELTA_MODIFIED;
1093
1181
  patch->base.delta->nfiles = 2;
@@ -1126,7 +1214,7 @@ int git_patch_from_buffer(
1126
1214
  int error;
1127
1215
 
1128
1216
  ctx = git_patch_parse_ctx_init(content, content_len, opts);
1129
- GITERR_CHECK_ALLOC(ctx);
1217
+ GIT_ERROR_CHECK_ALLOC(ctx);
1130
1218
 
1131
1219
  error = git_patch_parse(out, ctx);
1132
1220