rugged 1.6.3 → 1.9.0

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 (443) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/rugged_allocator.c +0 -54
  3. data/lib/rugged/version.rb +1 -1
  4. data/vendor/libgit2/AUTHORS +1 -0
  5. data/vendor/libgit2/CMakeLists.txt +25 -17
  6. data/vendor/libgit2/COPYING +195 -1
  7. data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
  8. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  9. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  10. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +4 -4
  11. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  12. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +34 -6
  13. data/vendor/libgit2/cmake/SelectHashes.cmake +32 -11
  14. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  15. data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
  16. data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
  17. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  18. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  19. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  20. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  21. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  22. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  23. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  24. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  25. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  26. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  27. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  28. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  29. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  30. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  31. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  32. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  33. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  34. data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
  35. data/vendor/libgit2/deps/pcre/LICENCE +5 -5
  36. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  37. data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
  38. data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
  39. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
  40. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/git-xdiff.h +4 -1
  41. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.c +19 -18
  42. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.h +2 -4
  43. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.c +3 -3
  44. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xhistogram.c +7 -18
  45. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmacros.h +18 -1
  46. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmerge.c +22 -20
  47. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xpatience.c +21 -30
  48. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.c +13 -30
  49. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.c +18 -1
  50. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.h +2 -1
  51. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  52. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  53. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  54. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  55. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  56. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  57. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  58. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  59. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  60. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  61. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  62. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  63. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  64. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  65. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  66. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  67. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  68. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  69. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  70. data/vendor/libgit2/include/git2/apply.h +27 -6
  71. data/vendor/libgit2/include/git2/attr.h +17 -4
  72. data/vendor/libgit2/include/git2/blame.h +133 -28
  73. data/vendor/libgit2/include/git2/blob.h +71 -28
  74. data/vendor/libgit2/include/git2/branch.h +22 -15
  75. data/vendor/libgit2/include/git2/buffer.h +6 -4
  76. data/vendor/libgit2/include/git2/cert.h +2 -1
  77. data/vendor/libgit2/include/git2/checkout.h +83 -32
  78. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  79. data/vendor/libgit2/include/git2/clone.h +25 -9
  80. data/vendor/libgit2/include/git2/commit.h +132 -3
  81. data/vendor/libgit2/include/git2/common.h +138 -56
  82. data/vendor/libgit2/include/git2/config.h +93 -23
  83. data/vendor/libgit2/include/git2/credential.h +30 -2
  84. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  85. data/vendor/libgit2/include/git2/deprecated.h +133 -3
  86. data/vendor/libgit2/include/git2/describe.h +13 -1
  87. data/vendor/libgit2/include/git2/diff.h +77 -9
  88. data/vendor/libgit2/include/git2/email.h +9 -29
  89. data/vendor/libgit2/include/git2/errors.h +49 -74
  90. data/vendor/libgit2/include/git2/filter.h +14 -7
  91. data/vendor/libgit2/include/git2/global.h +8 -1
  92. data/vendor/libgit2/include/git2/graph.h +3 -2
  93. data/vendor/libgit2/include/git2/ignore.h +10 -0
  94. data/vendor/libgit2/include/git2/index.h +100 -6
  95. data/vendor/libgit2/include/git2/indexer.h +21 -4
  96. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  97. data/vendor/libgit2/include/git2/merge.h +46 -1
  98. data/vendor/libgit2/include/git2/message.h +2 -2
  99. data/vendor/libgit2/include/git2/net.h +3 -1
  100. data/vendor/libgit2/include/git2/notes.h +9 -6
  101. data/vendor/libgit2/include/git2/object.h +9 -8
  102. data/vendor/libgit2/include/git2/odb.h +91 -49
  103. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  104. data/vendor/libgit2/include/git2/oid.h +24 -25
  105. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  106. data/vendor/libgit2/include/git2/pack.h +13 -1
  107. data/vendor/libgit2/include/git2/patch.h +2 -3
  108. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  109. data/vendor/libgit2/include/git2/proxy.h +10 -0
  110. data/vendor/libgit2/include/git2/rebase.h +9 -6
  111. data/vendor/libgit2/include/git2/refdb.h +2 -2
  112. data/vendor/libgit2/include/git2/reflog.h +3 -2
  113. data/vendor/libgit2/include/git2/refs.h +9 -6
  114. data/vendor/libgit2/include/git2/refspec.h +14 -4
  115. data/vendor/libgit2/include/git2/remote.h +112 -18
  116. data/vendor/libgit2/include/git2/repository.h +61 -15
  117. data/vendor/libgit2/include/git2/reset.h +16 -3
  118. data/vendor/libgit2/include/git2/revert.h +9 -4
  119. data/vendor/libgit2/include/git2/revparse.h +3 -3
  120. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  121. data/vendor/libgit2/include/git2/signature.h +46 -1
  122. data/vendor/libgit2/include/git2/stash.h +17 -3
  123. data/vendor/libgit2/include/git2/status.h +10 -6
  124. data/vendor/libgit2/include/git2/stdint.h +87 -85
  125. data/vendor/libgit2/include/git2/strarray.h +2 -3
  126. data/vendor/libgit2/include/git2/submodule.h +20 -9
  127. data/vendor/libgit2/include/git2/sys/alloc.h +12 -34
  128. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  129. data/vendor/libgit2/include/git2/sys/commit_graph.h +109 -58
  130. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  131. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  132. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  133. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  134. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  135. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  136. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  137. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  138. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  139. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  140. data/vendor/libgit2/include/git2/sys/midx.h +47 -4
  141. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  142. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  143. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  144. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  145. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  146. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  147. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  148. data/vendor/libgit2/include/git2/sys/stream.h +25 -2
  149. data/vendor/libgit2/include/git2/sys/transport.h +44 -5
  150. data/vendor/libgit2/include/git2/tag.h +3 -1
  151. data/vendor/libgit2/include/git2/trace.h +9 -3
  152. data/vendor/libgit2/include/git2/transaction.h +3 -2
  153. data/vendor/libgit2/include/git2/transport.h +11 -3
  154. data/vendor/libgit2/include/git2/tree.h +16 -5
  155. data/vendor/libgit2/include/git2/types.h +19 -3
  156. data/vendor/libgit2/include/git2/version.h +44 -8
  157. data/vendor/libgit2/include/git2/worktree.h +19 -7
  158. data/vendor/libgit2/src/CMakeLists.txt +40 -15
  159. data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
  160. data/vendor/libgit2/src/cli/cmd.c +1 -1
  161. data/vendor/libgit2/src/cli/cmd.h +4 -0
  162. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  163. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  164. data/vendor/libgit2/src/cli/cmd_clone.c +27 -13
  165. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  166. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  167. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  168. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  169. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  170. data/vendor/libgit2/src/cli/common.c +168 -0
  171. data/vendor/libgit2/src/cli/common.h +63 -0
  172. data/vendor/libgit2/src/cli/error.h +1 -1
  173. data/vendor/libgit2/src/cli/main.c +52 -24
  174. data/vendor/libgit2/src/cli/opt.c +29 -3
  175. data/vendor/libgit2/src/cli/opt.h +21 -3
  176. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  177. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  178. data/vendor/libgit2/src/cli/progress.c +60 -10
  179. data/vendor/libgit2/src/cli/progress.h +16 -4
  180. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  181. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  182. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  183. data/vendor/libgit2/src/libgit2/CMakeLists.txt +27 -27
  184. data/vendor/libgit2/src/libgit2/annotated_commit.c +2 -2
  185. data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
  186. data/vendor/libgit2/src/libgit2/apply.c +14 -16
  187. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  188. data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
  189. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  190. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  191. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  192. data/vendor/libgit2/src/libgit2/blame.c +152 -59
  193. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  194. data/vendor/libgit2/src/libgit2/blame_git.c +0 -1
  195. data/vendor/libgit2/src/libgit2/branch.c +2 -2
  196. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  197. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  198. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  199. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  200. data/vendor/libgit2/src/libgit2/cherrypick.c +4 -5
  201. data/vendor/libgit2/src/libgit2/clone.c +186 -164
  202. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  203. data/vendor/libgit2/src/libgit2/commit.c +123 -9
  204. data/vendor/libgit2/src/libgit2/commit_graph.c +166 -88
  205. data/vendor/libgit2/src/libgit2/commit_graph.h +21 -6
  206. data/vendor/libgit2/src/libgit2/commit_list.c +12 -5
  207. data/vendor/libgit2/src/libgit2/commit_list.h +1 -0
  208. data/vendor/libgit2/src/libgit2/config.c +394 -300
  209. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  210. data/vendor/libgit2/src/libgit2/config.h +9 -4
  211. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  212. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  213. data/vendor/libgit2/src/libgit2/config_file.c +113 -96
  214. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  215. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  216. data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
  217. data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
  218. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  219. data/vendor/libgit2/src/libgit2/describe.c +34 -31
  220. data/vendor/libgit2/src/libgit2/diff.c +17 -8
  221. data/vendor/libgit2/src/libgit2/diff.h +6 -6
  222. data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
  223. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  224. data/vendor/libgit2/src/libgit2/diff_file.c +7 -7
  225. data/vendor/libgit2/src/libgit2/diff_generate.c +39 -18
  226. data/vendor/libgit2/src/libgit2/diff_parse.c +22 -6
  227. data/vendor/libgit2/src/libgit2/diff_print.c +88 -13
  228. data/vendor/libgit2/src/libgit2/diff_tform.c +40 -12
  229. data/vendor/libgit2/src/libgit2/diff_xdiff.h +1 -1
  230. data/vendor/libgit2/src/libgit2/email.c +5 -3
  231. data/vendor/libgit2/src/libgit2/fetch.c +39 -9
  232. data/vendor/libgit2/src/libgit2/fetch.h +0 -2
  233. data/vendor/libgit2/src/libgit2/fetchhead.c +11 -9
  234. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  235. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  236. data/vendor/libgit2/src/libgit2/grafts.c +270 -0
  237. data/vendor/libgit2/src/libgit2/grafts.h +35 -0
  238. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  239. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  240. data/vendor/libgit2/src/libgit2/ident.c +3 -3
  241. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  242. data/vendor/libgit2/src/libgit2/index.c +392 -208
  243. data/vendor/libgit2/src/libgit2/index.h +16 -3
  244. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  245. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  246. data/vendor/libgit2/src/libgit2/indexer.c +44 -41
  247. data/vendor/libgit2/src/libgit2/iterator.c +34 -13
  248. data/vendor/libgit2/src/libgit2/iterator.h +3 -0
  249. data/vendor/libgit2/src/libgit2/libgit2.c +155 -331
  250. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  251. data/vendor/libgit2/src/libgit2/merge.c +56 -46
  252. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  253. data/vendor/libgit2/src/libgit2/merge_file.c +0 -2
  254. data/vendor/libgit2/src/libgit2/midx.c +86 -44
  255. data/vendor/libgit2/src/libgit2/midx.h +13 -3
  256. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  257. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  258. data/vendor/libgit2/src/libgit2/notes.c +9 -8
  259. data/vendor/libgit2/src/libgit2/object.c +42 -16
  260. data/vendor/libgit2/src/libgit2/object.h +6 -0
  261. data/vendor/libgit2/src/libgit2/odb.c +16 -9
  262. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  263. data/vendor/libgit2/src/libgit2/odb_pack.c +28 -7
  264. data/vendor/libgit2/src/libgit2/oid.c +35 -2
  265. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  266. data/vendor/libgit2/src/libgit2/oidarray.c +49 -3
  267. data/vendor/libgit2/src/libgit2/oidarray.h +5 -1
  268. data/vendor/libgit2/src/libgit2/pack-objects.c +77 -43
  269. data/vendor/libgit2/src/libgit2/pack-objects.h +17 -6
  270. data/vendor/libgit2/src/libgit2/pack.c +33 -27
  271. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  272. data/vendor/libgit2/src/libgit2/parse.c +7 -4
  273. data/vendor/libgit2/src/libgit2/parse.h +1 -1
  274. data/vendor/libgit2/src/libgit2/patch.h +7 -1
  275. data/vendor/libgit2/src/libgit2/patch_generate.c +24 -5
  276. data/vendor/libgit2/src/libgit2/patch_parse.c +18 -10
  277. data/vendor/libgit2/src/libgit2/path.c +1 -1
  278. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  279. data/vendor/libgit2/src/libgit2/push.c +81 -30
  280. data/vendor/libgit2/src/libgit2/push.h +1 -0
  281. data/vendor/libgit2/src/libgit2/reader.c +1 -1
  282. data/vendor/libgit2/src/libgit2/rebase.c +72 -84
  283. data/vendor/libgit2/src/libgit2/refdb_fs.c +146 -70
  284. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  285. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  286. data/vendor/libgit2/src/libgit2/refs.c +34 -8
  287. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  288. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  289. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  290. data/vendor/libgit2/src/libgit2/remote.c +136 -67
  291. data/vendor/libgit2/src/libgit2/remote.h +1 -0
  292. data/vendor/libgit2/src/libgit2/repository.c +789 -330
  293. data/vendor/libgit2/src/libgit2/repository.h +22 -3
  294. data/vendor/libgit2/src/libgit2/reset.c +2 -2
  295. data/vendor/libgit2/src/libgit2/revert.c +9 -13
  296. data/vendor/libgit2/src/libgit2/revparse.c +6 -3
  297. data/vendor/libgit2/src/libgit2/revwalk.c +36 -11
  298. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  299. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  300. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  301. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  302. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  303. data/vendor/libgit2/src/libgit2/stash.c +9 -8
  304. data/vendor/libgit2/src/libgit2/status.c +1 -1
  305. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -61
  306. data/vendor/libgit2/src/libgit2/streams/openssl.c +40 -23
  307. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  308. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  309. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  310. data/vendor/libgit2/src/libgit2/streams/schannel.c +715 -0
  311. data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
  312. data/vendor/libgit2/src/libgit2/streams/socket.c +237 -51
  313. data/vendor/libgit2/src/libgit2/streams/socket.h +3 -1
  314. data/vendor/libgit2/src/libgit2/streams/stransport.c +79 -19
  315. data/vendor/libgit2/src/libgit2/streams/tls.c +5 -0
  316. data/vendor/libgit2/src/libgit2/submodule.c +106 -63
  317. data/vendor/libgit2/src/libgit2/submodule.h +9 -10
  318. data/vendor/libgit2/src/libgit2/tag.c +1 -1
  319. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  320. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  321. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  322. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  323. data/vendor/libgit2/src/libgit2/transports/auth.h +1 -2
  324. data/vendor/libgit2/src/libgit2/transports/{auth_negotiate.c → auth_gssapi.c} +32 -32
  325. data/vendor/libgit2/src/libgit2/transports/auth_negotiate.h +1 -1
  326. data/vendor/libgit2/src/libgit2/transports/auth_ntlm.h +1 -1
  327. data/vendor/libgit2/src/libgit2/transports/{auth_ntlm.c → auth_ntlmclient.c} +12 -12
  328. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
  329. data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
  330. data/vendor/libgit2/src/libgit2/transports/git.c +7 -8
  331. data/vendor/libgit2/src/libgit2/transports/http.c +8 -4
  332. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  333. data/vendor/libgit2/src/libgit2/transports/httpclient.c +117 -72
  334. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  335. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  336. data/vendor/libgit2/src/libgit2/transports/local.c +21 -11
  337. data/vendor/libgit2/src/libgit2/transports/smart.c +50 -32
  338. data/vendor/libgit2/src/libgit2/transports/smart.h +26 -9
  339. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +139 -18
  340. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +209 -57
  341. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  342. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
  343. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  344. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  345. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  346. data/vendor/libgit2/src/libgit2/transports/winhttp.c +48 -21
  347. data/vendor/libgit2/src/libgit2/tree-cache.c +26 -16
  348. data/vendor/libgit2/src/libgit2/tree-cache.h +5 -3
  349. data/vendor/libgit2/src/libgit2/tree.c +35 -27
  350. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  351. data/vendor/libgit2/src/libgit2/worktree.c +39 -27
  352. data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
  353. data/vendor/libgit2/src/util/alloc.c +69 -7
  354. data/vendor/libgit2/src/util/alloc.h +34 -9
  355. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  356. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  357. data/vendor/libgit2/src/util/allocators/failalloc.c +0 -60
  358. data/vendor/libgit2/src/util/allocators/failalloc.h +0 -6
  359. data/vendor/libgit2/src/util/allocators/stdalloc.c +2 -115
  360. data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +0 -68
  361. data/vendor/libgit2/src/util/array.h +24 -18
  362. data/vendor/libgit2/src/util/cc-compat.h +4 -0
  363. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  364. data/vendor/libgit2/src/util/date.c +22 -14
  365. data/vendor/libgit2/src/util/date.h +12 -0
  366. data/vendor/libgit2/src/util/errors.c +401 -0
  367. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  368. data/vendor/libgit2/src/util/filebuf.c +6 -1
  369. data/vendor/libgit2/src/util/filebuf.h +19 -6
  370. data/vendor/libgit2/src/util/fs_path.c +16 -5
  371. data/vendor/libgit2/src/util/fs_path.h +23 -0
  372. data/vendor/libgit2/src/util/futils.c +14 -10
  373. data/vendor/libgit2/src/util/futils.h +13 -4
  374. data/vendor/libgit2/src/util/git2_features.h.in +21 -4
  375. data/vendor/libgit2/src/util/git2_util.h +6 -0
  376. data/vendor/libgit2/src/util/hash/openssl.c +152 -0
  377. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  378. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  379. data/vendor/libgit2/src/util/hashmap.h +424 -0
  380. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  381. data/vendor/libgit2/src/util/integer.h +3 -1
  382. data/vendor/libgit2/src/util/net.c +318 -161
  383. data/vendor/libgit2/src/util/net.h +27 -0
  384. data/vendor/libgit2/src/util/pool.c +1 -1
  385. data/vendor/libgit2/src/util/pool.h +5 -0
  386. data/vendor/libgit2/src/util/posix.c +54 -0
  387. data/vendor/libgit2/src/util/posix.h +22 -0
  388. data/vendor/libgit2/src/util/pqueue.h +1 -1
  389. data/vendor/libgit2/src/util/process.h +222 -0
  390. data/vendor/libgit2/src/util/rand.c +6 -10
  391. data/vendor/libgit2/src/util/regexp.c +1 -1
  392. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  393. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  394. data/vendor/libgit2/src/util/staticstr.h +66 -0
  395. data/vendor/libgit2/src/util/str.c +2 -2
  396. data/vendor/libgit2/src/util/strlist.c +108 -0
  397. data/vendor/libgit2/src/util/strlist.h +36 -0
  398. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  399. data/vendor/libgit2/src/util/unix/process.c +629 -0
  400. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  401. data/vendor/libgit2/src/util/util.c +17 -12
  402. data/vendor/libgit2/src/util/util.h +28 -54
  403. data/vendor/libgit2/src/util/vector.c +3 -3
  404. data/vendor/libgit2/src/util/vector.h +2 -2
  405. data/vendor/libgit2/src/util/win32/error.c +1 -1
  406. data/vendor/libgit2/src/util/win32/path_w32.c +8 -8
  407. data/vendor/libgit2/src/util/win32/posix_w32.c +30 -7
  408. data/vendor/libgit2/src/util/win32/process.c +506 -0
  409. data/vendor/libgit2/src/util/win32/utf-conv.c +73 -75
  410. data/vendor/libgit2/src/util/win32/utf-conv.h +81 -14
  411. data/vendor/libgit2/src/util/win32/w32_util.c +1 -1
  412. metadata +72 -49
  413. data/vendor/libgit2/cmake/SelectWinHTTP.cmake +0 -17
  414. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  415. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  416. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  417. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  418. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  419. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  420. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  421. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  422. data/vendor/libgit2/src/libgit2/errors.c +0 -238
  423. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  424. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  425. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  426. data/vendor/libgit2/src/libgit2/netops.c +0 -124
  427. data/vendor/libgit2/src/libgit2/netops.h +0 -68
  428. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  429. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  430. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  431. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  432. data/vendor/libgit2/src/libgit2/threadstate.c +0 -84
  433. data/vendor/libgit2/src/libgit2/threadstate.h +0 -24
  434. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  435. data/vendor/libgit2/src/util/khash.h +0 -615
  436. data/vendor/libgit2/src/util/strmap.c +0 -100
  437. data/vendor/libgit2/src/util/strmap.h +0 -131
  438. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
  439. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiff.h +0 -0
  440. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.h +0 -0
  441. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xinclude.h +0 -0
  442. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.h +0 -0
  443. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xtypes.h +0 -0
@@ -7,7 +7,7 @@
7
7
 
8
8
  #include "common.h"
9
9
 
10
- #include "netops.h"
10
+ #include "net.h"
11
11
  #include "stream.h"
12
12
  #include "streams/socket.h"
13
13
  #include "git2/sys/transport.h"
@@ -95,22 +95,21 @@ static int git_proto_stream_read(
95
95
  size_t buf_size,
96
96
  size_t *bytes_read)
97
97
  {
98
- int error;
99
98
  git_proto_stream *s = (git_proto_stream *)stream;
100
- gitno_buffer buf;
99
+ ssize_t ret;
100
+ int error;
101
101
 
102
102
  *bytes_read = 0;
103
103
 
104
104
  if (!s->sent_command && (error = send_command(s)) < 0)
105
105
  return error;
106
106
 
107
- gitno_buffer_setup_fromstream(s->io, &buf, buffer, buf_size);
107
+ ret = git_stream_read(s->io, buffer, min(buf_size, INT_MAX));
108
108
 
109
- if ((error = gitno_recv(&buf)) < 0)
110
- return error;
111
-
112
- *bytes_read = buf.offset;
109
+ if (ret < 0)
110
+ return -1;
113
111
 
112
+ *bytes_read = (size_t)ret;
114
113
  return 0;
115
114
  }
116
115
 
@@ -9,9 +9,7 @@
9
9
 
10
10
  #ifndef GIT_WINHTTP
11
11
 
12
- #include "http_parser.h"
13
12
  #include "net.h"
14
- #include "netops.h"
15
13
  #include "remote.h"
16
14
  #include "smart.h"
17
15
  #include "auth.h"
@@ -335,10 +333,16 @@ static int lookup_proxy(
335
333
  return 0;
336
334
  }
337
335
 
338
- if (!proxy ||
339
- (error = git_net_url_parse(&transport->proxy.url, proxy)) < 0)
336
+ if (!proxy || !*proxy ||
337
+ (error = git_net_url_parse_http(&transport->proxy.url, proxy)) < 0)
340
338
  goto done;
341
339
 
340
+ if (!git_net_url_valid(&transport->proxy.url)) {
341
+ git_error_set(GIT_ERROR_HTTP, "invalid URL: '%s'", proxy);
342
+ error = -1;
343
+ goto done;
344
+ }
345
+
342
346
  *out_use = true;
343
347
 
344
348
  done:
@@ -15,14 +15,4 @@
15
15
 
16
16
  extern bool git_http__expect_continue;
17
17
 
18
- GIT_INLINE(int) git_http__user_agent(git_str *buf)
19
- {
20
- const char *ua = git_libgit2__user_agent();
21
-
22
- if (!ua)
23
- ua = "libgit2 " LIBGIT2_VERSION;
24
-
25
- return git_str_printf(buf, "git/2.0 (%s)", ua);
26
- }
27
-
28
18
  #endif
@@ -7,7 +7,7 @@
7
7
 
8
8
  #include "common.h"
9
9
  #include "git2.h"
10
- #include "http_parser.h"
10
+
11
11
  #include "vector.h"
12
12
  #include "trace.h"
13
13
  #include "httpclient.h"
@@ -21,6 +21,7 @@
21
21
  #include "streams/socket.h"
22
22
  #include "streams/tls.h"
23
23
  #include "auth.h"
24
+ #include "httpparser.h"
24
25
 
25
26
  static git_http_auth_scheme auth_schemes[] = {
26
27
  { GIT_HTTP_AUTH_NEGOTIATE, "Negotiate", GIT_CREDENTIAL_DEFAULT, git_http_auth_negotiate },
@@ -108,7 +109,7 @@ struct git_http_client {
108
109
  git_http_server_t current_server;
109
110
  http_client_state state;
110
111
 
111
- http_parser parser;
112
+ git_http_parser parser;
112
113
 
113
114
  git_http_server server;
114
115
  git_http_server proxy;
@@ -154,7 +155,7 @@ void git_http_response_dispose(git_http_response *response)
154
155
  memset(response, 0, sizeof(git_http_response));
155
156
  }
156
157
 
157
- static int on_header_complete(http_parser *parser)
158
+ static int on_header_complete(git_http_parser *parser)
158
159
  {
159
160
  http_parser_context *ctx = (http_parser_context *) parser->data;
160
161
  git_http_client *client = ctx->client;
@@ -219,7 +220,7 @@ static int on_header_complete(http_parser *parser)
219
220
  return 0;
220
221
  }
221
222
 
222
- static int on_header_field(http_parser *parser, const char *str, size_t len)
223
+ static int on_header_field(git_http_parser *parser, const char *str, size_t len)
223
224
  {
224
225
  http_parser_context *ctx = (http_parser_context *) parser->data;
225
226
 
@@ -254,7 +255,7 @@ static int on_header_field(http_parser *parser, const char *str, size_t len)
254
255
  return 0;
255
256
  }
256
257
 
257
- static int on_header_value(http_parser *parser, const char *str, size_t len)
258
+ static int on_header_value(git_http_parser *parser, const char *str, size_t len)
258
259
  {
259
260
  http_parser_context *ctx = (http_parser_context *) parser->data;
260
261
 
@@ -342,7 +343,7 @@ static int resend_needed(git_http_client *client, git_http_response *response)
342
343
  return 0;
343
344
  }
344
345
 
345
- static int on_headers_complete(http_parser *parser)
346
+ static int on_headers_complete(git_http_parser *parser)
346
347
  {
347
348
  http_parser_context *ctx = (http_parser_context *) parser->data;
348
349
 
@@ -364,8 +365,8 @@ static int on_headers_complete(http_parser *parser)
364
365
  return ctx->parse_status = PARSE_STATUS_ERROR;
365
366
  }
366
367
 
367
- ctx->response->status = parser->status_code;
368
- ctx->client->keepalive = http_should_keep_alive(parser);
368
+ ctx->response->status = git_http_parser_status_code(parser);
369
+ ctx->client->keepalive = git_http_parser_keep_alive(parser);
369
370
 
370
371
  /* Prepare for authentication */
371
372
  collect_authinfo(&ctx->response->server_auth_schemetypes,
@@ -378,18 +379,15 @@ static int on_headers_complete(http_parser *parser)
378
379
  ctx->response->resend_credentials = resend_needed(ctx->client,
379
380
  ctx->response);
380
381
 
381
- /* Stop parsing. */
382
- http_parser_pause(parser, 1);
383
-
384
382
  if (ctx->response->content_type || ctx->response->chunked)
385
383
  ctx->client->state = READING_BODY;
386
384
  else
387
385
  ctx->client->state = DONE;
388
386
 
389
- return 0;
387
+ return git_http_parser_pause(parser);
390
388
  }
391
389
 
392
- static int on_body(http_parser *parser, const char *buf, size_t len)
390
+ static int on_body(git_http_parser *parser, const char *buf, size_t len)
393
391
  {
394
392
  http_parser_context *ctx = (http_parser_context *) parser->data;
395
393
  size_t max_len;
@@ -411,7 +409,7 @@ static int on_body(http_parser *parser, const char *buf, size_t len)
411
409
  return 0;
412
410
  }
413
411
 
414
- static int on_message_complete(http_parser *parser)
412
+ static int on_message_complete(git_http_parser *parser)
415
413
  {
416
414
  http_parser_context *ctx = (http_parser_context *) parser->data;
417
415
 
@@ -651,6 +649,30 @@ static int puts_host_and_port(git_str *buf, git_net_url *url, bool force_port)
651
649
  return git_str_oom(buf) ? -1 : 0;
652
650
  }
653
651
 
652
+ static int append_user_agent(git_str *buf)
653
+ {
654
+ const char *product = git_settings__user_agent_product();
655
+ const char *comment = git_settings__user_agent();
656
+
657
+ GIT_ASSERT(product && comment);
658
+
659
+ if (!*product)
660
+ return 0;
661
+
662
+ git_str_puts(buf, "User-Agent: ");
663
+ git_str_puts(buf, product);
664
+
665
+ if (*comment) {
666
+ git_str_puts(buf, " (");
667
+ git_str_puts(buf, comment);
668
+ git_str_puts(buf, ")");
669
+ }
670
+
671
+ git_str_puts(buf, "\r\n");
672
+
673
+ return git_str_oom(buf) ? -1 : 0;
674
+ }
675
+
654
676
  static int generate_connect_request(
655
677
  git_http_client *client,
656
678
  git_http_request *request)
@@ -665,9 +687,7 @@ static int generate_connect_request(
665
687
  puts_host_and_port(buf, &client->server.url, true);
666
688
  git_str_puts(buf, " HTTP/1.1\r\n");
667
689
 
668
- git_str_puts(buf, "User-Agent: ");
669
- git_http__user_agent(buf);
670
- git_str_puts(buf, "\r\n");
690
+ append_user_agent(buf);
671
691
 
672
692
  git_str_puts(buf, "Host: ");
673
693
  puts_host_and_port(buf, &client->server.url, true);
@@ -711,9 +731,7 @@ static int generate_request(
711
731
 
712
732
  git_str_puts(buf, " HTTP/1.1\r\n");
713
733
 
714
- git_str_puts(buf, "User-Agent: ");
715
- git_http__user_agent(buf);
716
- git_str_puts(buf, "\r\n");
734
+ append_user_agent(buf);
717
735
 
718
736
  git_str_puts(buf, "Host: ");
719
737
  puts_host_and_port(buf, request->url, false);
@@ -768,25 +786,37 @@ static int check_certificate(
768
786
  void *cert_cb_payload)
769
787
  {
770
788
  git_cert *cert;
771
- git_error_state last_error = {0};
789
+ git_error *last_error;
772
790
  int error;
773
791
 
774
792
  if ((error = git_stream_certificate(&cert, stream)) < 0)
775
793
  return error;
776
794
 
777
- git_error_state_capture(&last_error, GIT_ECERTIFICATE);
795
+ /*
796
+ * Allow callers to set an error - but save ours and clear
797
+ * it, so that we can detect if they set one and restore it
798
+ * if we need to.
799
+ */
800
+ git_error_save(&last_error);
801
+ git_error_clear();
778
802
 
779
803
  error = cert_cb(cert, is_valid, url->host, cert_cb_payload);
780
804
 
781
- if (error == GIT_PASSTHROUGH && !is_valid)
782
- return git_error_state_restore(&last_error);
783
- else if (error == GIT_PASSTHROUGH)
784
- error = 0;
785
- else if (error && !git_error_last())
786
- git_error_set(GIT_ERROR_HTTP,
787
- "user rejected certificate for %s", url->host);
805
+ if (error == GIT_PASSTHROUGH) {
806
+ error = is_valid ? 0 : -1;
788
807
 
789
- git_error_state_free(&last_error);
808
+ if (error) {
809
+ git_error_restore(last_error);
810
+ last_error = NULL;
811
+ }
812
+ } else if (error) {
813
+ if (!git_error_exists())
814
+ git_error_set(GIT_ERROR_HTTP,
815
+ "user rejected certificate for %s",
816
+ url->host);
817
+ }
818
+
819
+ git_error_free(last_error);
790
820
  return error;
791
821
  }
792
822
 
@@ -837,6 +867,11 @@ GIT_INLINE(int) server_setup_from_url(
837
867
  git_http_server *server,
838
868
  git_net_url *url)
839
869
  {
870
+ GIT_ASSERT_ARG(url);
871
+ GIT_ASSERT_ARG(url->scheme);
872
+ GIT_ASSERT_ARG(url->host);
873
+ GIT_ASSERT_ARG(url->port);
874
+
840
875
  if (!server->url.scheme || strcmp(server->url.scheme, url->scheme) ||
841
876
  !server->url.host || strcmp(server->url.host, url->host) ||
842
877
  !server->url.port || strcmp(server->url.port, url->port)) {
@@ -859,9 +894,29 @@ GIT_INLINE(int) server_setup_from_url(
859
894
  return 0;
860
895
  }
861
896
 
897
+ static bool parser_settings_initialized;
898
+ static git_http_parser_settings parser_settings;
899
+
900
+ GIT_INLINE(git_http_parser_settings *) http_client_parser_settings(void)
901
+ {
902
+ if (!parser_settings_initialized) {
903
+ parser_settings.on_header_field = on_header_field;
904
+ parser_settings.on_header_value = on_header_value;
905
+ parser_settings.on_headers_complete = on_headers_complete;
906
+ parser_settings.on_body = on_body;
907
+ parser_settings.on_message_complete = on_message_complete;
908
+
909
+ parser_settings_initialized = true;
910
+ }
911
+
912
+ return &parser_settings;
913
+ }
914
+
862
915
  static void reset_parser(git_http_client *client)
863
916
  {
864
- http_parser_init(&client->parser, HTTP_RESPONSE);
917
+ git_http_parser_init(&client->parser,
918
+ GIT_HTTP_PARSER_RESPONSE,
919
+ http_client_parser_settings());
865
920
  }
866
921
 
867
922
  static int setup_hosts(
@@ -1104,27 +1159,9 @@ GIT_INLINE(int) client_read(git_http_client *client)
1104
1159
  return (int)read_len;
1105
1160
  }
1106
1161
 
1107
- static bool parser_settings_initialized;
1108
- static http_parser_settings parser_settings;
1109
-
1110
- GIT_INLINE(http_parser_settings *) http_client_parser_settings(void)
1111
- {
1112
- if (!parser_settings_initialized) {
1113
- parser_settings.on_header_field = on_header_field;
1114
- parser_settings.on_header_value = on_header_value;
1115
- parser_settings.on_headers_complete = on_headers_complete;
1116
- parser_settings.on_body = on_body;
1117
- parser_settings.on_message_complete = on_message_complete;
1118
-
1119
- parser_settings_initialized = true;
1120
- }
1121
-
1122
- return &parser_settings;
1123
- }
1124
-
1125
1162
  GIT_INLINE(int) client_read_and_parse(git_http_client *client)
1126
1163
  {
1127
- http_parser *parser = &client->parser;
1164
+ git_http_parser *parser = &client->parser;
1128
1165
  http_parser_context *ctx = (http_parser_context *) parser->data;
1129
1166
  unsigned char http_errno;
1130
1167
  int read_len;
@@ -1138,11 +1175,10 @@ GIT_INLINE(int) client_read_and_parse(git_http_client *client)
1138
1175
  if (!client->read_buf.size && (read_len = client_read(client)) < 0)
1139
1176
  return read_len;
1140
1177
 
1141
- parsed_len = http_parser_execute(parser,
1142
- http_client_parser_settings(),
1178
+ parsed_len = git_http_parser_execute(parser,
1143
1179
  client->read_buf.ptr,
1144
1180
  client->read_buf.size);
1145
- http_errno = client->parser.http_errno;
1181
+ http_errno = git_http_parser_errno(parser);
1146
1182
 
1147
1183
  if (parsed_len > INT_MAX) {
1148
1184
  git_error_set(GIT_ERROR_HTTP, "unexpectedly large parse");
@@ -1161,26 +1197,29 @@ GIT_INLINE(int) client_read_and_parse(git_http_client *client)
1161
1197
  * (This can happen in response to an expect/continue request,
1162
1198
  * where the server gives you a 100 and 200 simultaneously.)
1163
1199
  */
1164
- if (http_errno == HPE_PAUSED) {
1200
+ if (http_errno == GIT_HTTP_PARSER_PAUSED) {
1201
+ size_t additional_size;
1202
+
1203
+ git_http_parser_resume(parser);
1204
+
1165
1205
  /*
1166
- * http-parser has a "feature" where it will not deliver the
1167
- * final byte when paused in a callback. Consume that byte.
1168
- * https://github.com/nodejs/http-parser/issues/97
1206
+ * http-parser has a "feature" where it will not deliver
1207
+ * the final byte when paused in a callback. Consume
1208
+ * that byte.
1169
1209
  */
1170
- GIT_ASSERT(client->read_buf.size > parsed_len);
1210
+ if ((additional_size = git_http_parser_remain_after_pause(parser)) > 0) {
1211
+ GIT_ASSERT((client->read_buf.size - parsed_len) >= additional_size);
1171
1212
 
1172
- http_parser_pause(parser, 0);
1173
-
1174
- parsed_len += http_parser_execute(parser,
1175
- http_client_parser_settings(),
1176
- client->read_buf.ptr + parsed_len,
1177
- 1);
1213
+ parsed_len += git_http_parser_execute(parser,
1214
+ client->read_buf.ptr + parsed_len,
1215
+ additional_size);
1216
+ }
1178
1217
  }
1179
1218
 
1180
1219
  /* Most failures will be reported in http_errno */
1181
- else if (parser->http_errno != HPE_OK) {
1220
+ else if (git_http_parser_errno(parser) != GIT_HTTP_PARSER_OK) {
1182
1221
  git_error_set(GIT_ERROR_HTTP, "http parser error: %s",
1183
- http_errno_description(http_errno));
1222
+ git_http_parser_errmsg(parser, http_errno));
1184
1223
  return -1;
1185
1224
  }
1186
1225
 
@@ -1188,7 +1227,7 @@ GIT_INLINE(int) client_read_and_parse(git_http_client *client)
1188
1227
  else if (parsed_len != client->read_buf.size) {
1189
1228
  git_error_set(GIT_ERROR_HTTP,
1190
1229
  "http parser did not consume entire buffer: %s",
1191
- http_errno_description(http_errno));
1230
+ git_http_parser_errmsg(parser, http_errno));
1192
1231
  return -1;
1193
1232
  }
1194
1233
 
@@ -1227,7 +1266,7 @@ static void complete_response_body(git_http_client *client)
1227
1266
 
1228
1267
  /* If there was an error, just close the connection. */
1229
1268
  if (client_read_and_parse(client) < 0 ||
1230
- parser_context.error != HPE_OK ||
1269
+ parser_context.error != GIT_HTTP_PARSER_OK ||
1231
1270
  (parser_context.parse_status != PARSE_STATUS_OK &&
1232
1271
  parser_context.parse_status != PARSE_STATUS_NO_OUTPUT)) {
1233
1272
  git_error_clear();
@@ -1235,6 +1274,7 @@ static void complete_response_body(git_http_client *client)
1235
1274
  }
1236
1275
 
1237
1276
  done:
1277
+ client->parser.data = NULL;
1238
1278
  git_str_clear(&client->read_buf);
1239
1279
  }
1240
1280
 
@@ -1402,9 +1442,9 @@ int git_http_client_read_response(
1402
1442
  git_http_response_dispose(response);
1403
1443
 
1404
1444
  if (client->current_server == PROXY) {
1405
- git_vector_free_deep(&client->proxy.auth_challenges);
1445
+ git_vector_dispose_deep(&client->proxy.auth_challenges);
1406
1446
  } else if(client->current_server == SERVER) {
1407
- git_vector_free_deep(&client->server.auth_challenges);
1447
+ git_vector_dispose_deep(&client->server.auth_challenges);
1408
1448
  }
1409
1449
 
1410
1450
  client->state = READING_RESPONSE;
@@ -1424,6 +1464,7 @@ int git_http_client_read_response(
1424
1464
  done:
1425
1465
  git_str_dispose(&parser_context.parse_header_name);
1426
1466
  git_str_dispose(&parser_context.parse_header_value);
1467
+ client->parser.data = NULL;
1427
1468
 
1428
1469
  return error;
1429
1470
  }
@@ -1479,6 +1520,8 @@ done:
1479
1520
  if (error < 0)
1480
1521
  client->connected = 0;
1481
1522
 
1523
+ client->parser.data = NULL;
1524
+
1482
1525
  return error;
1483
1526
  }
1484
1527
 
@@ -1501,7 +1544,7 @@ int git_http_client_skip_body(git_http_client *client)
1501
1544
  do {
1502
1545
  error = client_read_and_parse(client);
1503
1546
 
1504
- if (parser_context.error != HPE_OK ||
1547
+ if (parser_context.error != GIT_HTTP_PARSER_OK ||
1505
1548
  (parser_context.parse_status != PARSE_STATUS_OK &&
1506
1549
  parser_context.parse_status != PARSE_STATUS_NO_OUTPUT)) {
1507
1550
  git_error_set(GIT_ERROR_HTTP,
@@ -1513,6 +1556,8 @@ int git_http_client_skip_body(git_http_client *client)
1513
1556
  if (error < 0)
1514
1557
  client->connected = 0;
1515
1558
 
1559
+ client->parser.data = NULL;
1560
+
1516
1561
  return error;
1517
1562
  }
1518
1563
 
@@ -1560,7 +1605,7 @@ GIT_INLINE(void) http_server_close(git_http_server *server)
1560
1605
 
1561
1606
  git_net_url_dispose(&server->url);
1562
1607
 
1563
- git_vector_free_deep(&server->auth_challenges);
1608
+ git_vector_dispose_deep(&server->auth_challenges);
1564
1609
  free_auth_context(server);
1565
1610
  }
1566
1611
 
@@ -0,0 +1,128 @@
1
+ /*
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
+ *
4
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
5
+ * a Linking Exception. For full terms see the included COPYING file.
6
+ */
7
+
8
+ #include "httpparser.h"
9
+
10
+ #include <string.h>
11
+
12
+ #if defined(GIT_HTTPPARSER_HTTPPARSER)
13
+
14
+ #include "http_parser.h"
15
+
16
+ static int on_message_begin(http_parser *p)
17
+ {
18
+ git_http_parser *parser = (git_http_parser *)p;
19
+ return parser->settings.on_message_begin(parser);
20
+ }
21
+
22
+ static int on_url(http_parser *p, const char *str, size_t len)
23
+ {
24
+ git_http_parser *parser = (git_http_parser *)p;
25
+ return parser->settings.on_url(parser, str, len);
26
+ }
27
+
28
+ static int on_header_field(http_parser *p, const char *str, size_t len)
29
+ {
30
+ git_http_parser *parser = (git_http_parser *)p;
31
+ return parser->settings.on_header_field(parser, str, len);
32
+ }
33
+
34
+ static int on_header_value(http_parser *p, const char *str, size_t len)
35
+ {
36
+ git_http_parser *parser = (git_http_parser *)p;
37
+ return parser->settings.on_header_value(parser, str, len);
38
+ }
39
+
40
+ static int on_headers_complete(http_parser *p)
41
+ {
42
+ git_http_parser *parser = (git_http_parser *)p;
43
+ return parser->settings.on_headers_complete(parser);
44
+ }
45
+
46
+ static int on_body(http_parser *p, const char *buf, size_t len)
47
+ {
48
+ git_http_parser *parser = (git_http_parser *)p;
49
+ return parser->settings.on_body(parser, buf, len);
50
+ }
51
+
52
+ static int on_message_complete(http_parser *p)
53
+ {
54
+ git_http_parser *parser = (git_http_parser *)p;
55
+ return parser->settings.on_message_complete(parser);
56
+ }
57
+
58
+ void git_http_parser_init(
59
+ git_http_parser *parser,
60
+ git_http_parser_t type,
61
+ git_http_parser_settings *settings)
62
+ {
63
+ http_parser_init(&parser->parser, (enum http_parser_type)type);
64
+ memcpy(&parser->settings, settings, sizeof(git_http_parser_settings));
65
+ }
66
+
67
+ size_t git_http_parser_execute(
68
+ git_http_parser *parser,
69
+ const char *data,
70
+ size_t len)
71
+ {
72
+ struct http_parser_settings settings_proxy;
73
+
74
+ memset(&settings_proxy, 0, sizeof(struct http_parser_settings));
75
+
76
+ settings_proxy.on_message_begin = parser->settings.on_message_begin ? on_message_begin : NULL;
77
+ settings_proxy.on_url = parser->settings.on_url ? on_url : NULL;
78
+ settings_proxy.on_header_field = parser->settings.on_header_field ? on_header_field : NULL;
79
+ settings_proxy.on_header_value = parser->settings.on_header_value ? on_header_value : NULL;
80
+ settings_proxy.on_headers_complete = parser->settings.on_headers_complete ? on_headers_complete : NULL;
81
+ settings_proxy.on_body = parser->settings.on_body ? on_body : NULL;
82
+ settings_proxy.on_message_complete = parser->settings.on_message_complete ? on_message_complete : NULL;
83
+
84
+ return http_parser_execute(&parser->parser, &settings_proxy, data, len);
85
+ }
86
+
87
+ #elif defined(GIT_HTTPPARSER_LLHTTP) || defined(GIT_HTTPPARSER_BUILTIN)
88
+
89
+ # include <llhttp.h>
90
+
91
+ size_t git_http_parser_execute(
92
+ git_http_parser *parser,
93
+ const char* data,
94
+ size_t len)
95
+ {
96
+ llhttp_errno_t error;
97
+ size_t parsed_len;
98
+
99
+ /*
100
+ * Unlike http_parser, which returns the number of parsed
101
+ * bytes in the _execute() call, llhttp returns an error
102
+ * code.
103
+ */
104
+
105
+ if (data == NULL || len == 0)
106
+ error = llhttp_finish(parser);
107
+ else
108
+ error = llhttp_execute(parser, data, len);
109
+
110
+ parsed_len = len;
111
+
112
+ /*
113
+ * Adjust number of parsed bytes in case of error.
114
+ */
115
+ if (error != HPE_OK) {
116
+ parsed_len = llhttp_get_error_pos(parser) - data;
117
+
118
+ /* This isn't a real pause, just a way to stop parsing early. */
119
+ if (error == HPE_PAUSED_UPGRADE)
120
+ llhttp_resume_after_upgrade(parser);
121
+ }
122
+
123
+ return parsed_len;
124
+ }
125
+
126
+ #else
127
+ # error unknown http-parser
128
+ #endif