rugged 1.7.2 → 1.9.4
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.
- checksums.yaml +4 -4
- data/ext/rugged/extconf.rb +4 -4
- data/ext/rugged/rugged.c +12 -1
- data/ext/rugged/rugged_blame.c +22 -6
- data/ext/rugged/rugged_blob.c +24 -9
- data/ext/rugged/rugged_branch.c +10 -7
- data/ext/rugged/rugged_branch_collection.c +8 -6
- data/ext/rugged/rugged_commit.c +7 -6
- data/ext/rugged/rugged_config.c +20 -11
- data/ext/rugged/rugged_diff.c +26 -12
- data/ext/rugged/rugged_diff_hunk.c +2 -1
- data/ext/rugged/rugged_index.c +39 -29
- data/ext/rugged/rugged_note.c +7 -6
- data/ext/rugged/rugged_object.c +3 -2
- data/ext/rugged/rugged_patch.c +23 -9
- data/ext/rugged/rugged_rebase.c +22 -10
- data/ext/rugged/rugged_reference.c +22 -13
- data/ext/rugged/rugged_reference_collection.c +9 -7
- data/ext/rugged/rugged_remote.c +23 -12
- data/ext/rugged/rugged_remote_collection.c +11 -9
- data/ext/rugged/rugged_repo.c +60 -45
- data/ext/rugged/rugged_revwalk.c +22 -12
- data/ext/rugged/rugged_submodule.c +23 -20
- data/ext/rugged/rugged_submodule_collection.c +20 -9
- data/ext/rugged/rugged_tag.c +6 -4
- data/ext/rugged/rugged_tag_collection.c +7 -5
- data/ext/rugged/rugged_tree.c +27 -15
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +3 -0
- data/vendor/libgit2/CMakeLists.txt +23 -10
- data/vendor/libgit2/COPYING +195 -1
- data/vendor/libgit2/cmake/DefaultCFlags.cmake +4 -1
- data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
- data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
- data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
- data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
- data/vendor/libgit2/cmake/SelectSSH.cmake +30 -19
- data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
- data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
- data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
- data/vendor/libgit2/deps/llhttp/api.c +510 -0
- data/vendor/libgit2/deps/llhttp/http.c +170 -0
- data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
- data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
- data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +3 -3
- data/vendor/libgit2/deps/xdiff/CMakeLists.txt +1 -1
- data/vendor/libgit2/deps/xdiff/xmerge.c +16 -12
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
- data/vendor/libgit2/deps/zlib/LICENSE +22 -0
- data/vendor/libgit2/deps/zlib/adler32.c +5 -27
- data/vendor/libgit2/deps/zlib/crc32.c +94 -167
- data/vendor/libgit2/deps/zlib/deflate.c +358 -435
- data/vendor/libgit2/deps/zlib/deflate.h +41 -10
- data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
- data/vendor/libgit2/deps/zlib/infback.c +17 -30
- data/vendor/libgit2/deps/zlib/inffast.c +1 -4
- data/vendor/libgit2/deps/zlib/inffast.h +1 -1
- data/vendor/libgit2/deps/zlib/inflate.c +36 -102
- data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
- data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
- data/vendor/libgit2/deps/zlib/trees.c +287 -352
- data/vendor/libgit2/deps/zlib/zconf.h +23 -14
- data/vendor/libgit2/deps/zlib/zlib.h +202 -202
- data/vendor/libgit2/deps/zlib/zutil.c +18 -44
- data/vendor/libgit2/deps/zlib/zutil.h +13 -33
- data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
- data/vendor/libgit2/include/git2/apply.h +27 -6
- data/vendor/libgit2/include/git2/attr.h +17 -4
- data/vendor/libgit2/include/git2/blame.h +133 -28
- data/vendor/libgit2/include/git2/blob.h +71 -28
- data/vendor/libgit2/include/git2/branch.h +22 -15
- data/vendor/libgit2/include/git2/buffer.h +6 -4
- data/vendor/libgit2/include/git2/cert.h +2 -1
- data/vendor/libgit2/include/git2/checkout.h +83 -32
- data/vendor/libgit2/include/git2/cherrypick.h +10 -3
- data/vendor/libgit2/include/git2/clone.h +25 -9
- data/vendor/libgit2/include/git2/commit.h +132 -3
- data/vendor/libgit2/include/git2/common.h +120 -63
- data/vendor/libgit2/include/git2/config.h +93 -23
- data/vendor/libgit2/include/git2/credential.h +30 -2
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +134 -4
- data/vendor/libgit2/include/git2/describe.h +13 -1
- data/vendor/libgit2/include/git2/diff.h +38 -8
- data/vendor/libgit2/include/git2/email.h +9 -29
- data/vendor/libgit2/include/git2/errors.h +46 -73
- data/vendor/libgit2/include/git2/filter.h +14 -7
- data/vendor/libgit2/include/git2/global.h +8 -1
- data/vendor/libgit2/include/git2/graph.h +3 -2
- data/vendor/libgit2/include/git2/ignore.h +10 -0
- data/vendor/libgit2/include/git2/index.h +100 -15
- data/vendor/libgit2/include/git2/indexer.h +21 -4
- data/vendor/libgit2/include/git2/mailmap.h +7 -1
- data/vendor/libgit2/include/git2/merge.h +50 -3
- data/vendor/libgit2/include/git2/message.h +2 -2
- data/vendor/libgit2/include/git2/net.h +3 -1
- data/vendor/libgit2/include/git2/notes.h +9 -6
- data/vendor/libgit2/include/git2/object.h +9 -8
- data/vendor/libgit2/include/git2/odb.h +91 -49
- data/vendor/libgit2/include/git2/odb_backend.h +80 -52
- data/vendor/libgit2/include/git2/oid.h +23 -25
- data/vendor/libgit2/include/git2/oidarray.h +7 -1
- data/vendor/libgit2/include/git2/pack.h +13 -1
- data/vendor/libgit2/include/git2/patch.h +2 -3
- data/vendor/libgit2/include/git2/pathspec.h +9 -0
- data/vendor/libgit2/include/git2/proxy.h +12 -3
- data/vendor/libgit2/include/git2/rebase.h +9 -6
- data/vendor/libgit2/include/git2/refdb.h +2 -2
- data/vendor/libgit2/include/git2/reflog.h +3 -2
- data/vendor/libgit2/include/git2/refs.h +9 -6
- data/vendor/libgit2/include/git2/refspec.h +14 -4
- data/vendor/libgit2/include/git2/remote.h +113 -25
- data/vendor/libgit2/include/git2/repository.h +57 -21
- data/vendor/libgit2/include/git2/reset.h +16 -3
- data/vendor/libgit2/include/git2/revert.h +9 -4
- data/vendor/libgit2/include/git2/revparse.h +3 -3
- data/vendor/libgit2/include/git2/revwalk.h +3 -2
- data/vendor/libgit2/include/git2/signature.h +46 -1
- data/vendor/libgit2/include/git2/stash.h +17 -3
- data/vendor/libgit2/include/git2/status.h +10 -6
- data/vendor/libgit2/include/git2/stdint.h +87 -85
- data/vendor/libgit2/include/git2/strarray.h +2 -3
- data/vendor/libgit2/include/git2/submodule.h +20 -9
- data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
- data/vendor/libgit2/include/git2/sys/commit.h +77 -3
- data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
- data/vendor/libgit2/include/git2/sys/config.h +80 -4
- data/vendor/libgit2/include/git2/sys/credential.h +4 -3
- data/vendor/libgit2/include/git2/sys/diff.h +21 -1
- data/vendor/libgit2/include/git2/sys/email.h +7 -0
- data/vendor/libgit2/include/git2/sys/errors.h +76 -0
- data/vendor/libgit2/include/git2/sys/filter.h +66 -3
- data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
- data/vendor/libgit2/include/git2/sys/index.h +3 -2
- data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
- data/vendor/libgit2/include/git2/sys/merge.h +55 -7
- data/vendor/libgit2/include/git2/sys/midx.h +43 -4
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
- data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
- data/vendor/libgit2/include/git2/sys/path.h +12 -1
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
- data/vendor/libgit2/include/git2/sys/refs.h +3 -2
- data/vendor/libgit2/include/git2/sys/remote.h +8 -1
- data/vendor/libgit2/include/git2/sys/repository.h +63 -3
- data/vendor/libgit2/include/git2/sys/stream.h +11 -2
- data/vendor/libgit2/include/git2/sys/transport.h +25 -4
- data/vendor/libgit2/include/git2/tag.h +3 -1
- data/vendor/libgit2/include/git2/trace.h +9 -3
- data/vendor/libgit2/include/git2/transaction.h +3 -2
- data/vendor/libgit2/include/git2/transport.h +11 -3
- data/vendor/libgit2/include/git2/tree.h +16 -5
- data/vendor/libgit2/include/git2/types.h +19 -3
- data/vendor/libgit2/include/git2/version.h +46 -8
- data/vendor/libgit2/include/git2/worktree.h +16 -6
- data/vendor/libgit2/src/CMakeLists.txt +6 -4
- data/vendor/libgit2/src/cli/CMakeLists.txt +3 -4
- data/vendor/libgit2/src/cli/cmd.c +1 -1
- data/vendor/libgit2/src/cli/cmd.h +4 -0
- data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
- data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
- data/vendor/libgit2/src/cli/cmd_config.c +241 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
- data/vendor/libgit2/src/cli/cmd_help.c +6 -7
- data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
- data/vendor/libgit2/src/cli/cmd_init.c +102 -0
- data/vendor/libgit2/src/cli/common.c +168 -0
- data/vendor/libgit2/src/cli/common.h +63 -0
- data/vendor/libgit2/src/cli/error.h +1 -1
- data/vendor/libgit2/src/cli/main.c +52 -24
- data/vendor/libgit2/src/cli/opt.c +31 -5
- data/vendor/libgit2/src/cli/opt.h +21 -3
- data/vendor/libgit2/src/cli/opt_usage.c +102 -33
- data/vendor/libgit2/src/cli/opt_usage.h +6 -1
- data/vendor/libgit2/src/cli/progress.c +51 -2
- data/vendor/libgit2/src/cli/progress.h +12 -0
- data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
- data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
- data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +55 -21
- data/vendor/libgit2/src/libgit2/apply.c +10 -13
- data/vendor/libgit2/src/libgit2/attr.c +30 -13
- data/vendor/libgit2/src/libgit2/attr_file.c +17 -5
- data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
- data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
- data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
- data/vendor/libgit2/src/libgit2/blame.c +130 -44
- data/vendor/libgit2/src/libgit2/blame.h +1 -0
- data/vendor/libgit2/src/libgit2/cache.c +22 -17
- data/vendor/libgit2/src/libgit2/cache.h +7 -9
- data/vendor/libgit2/src/libgit2/checkout.c +34 -24
- data/vendor/libgit2/src/libgit2/checkout.h +0 -2
- data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
- data/vendor/libgit2/src/libgit2/clone.c +192 -166
- data/vendor/libgit2/src/libgit2/clone.h +4 -1
- data/vendor/libgit2/src/libgit2/commit.c +93 -1
- data/vendor/libgit2/src/libgit2/commit_graph.c +68 -58
- data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
- data/vendor/libgit2/src/libgit2/config.c +390 -299
- data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
- data/vendor/libgit2/src/libgit2/config.h +9 -4
- data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
- data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
- data/vendor/libgit2/src/libgit2/config_file.c +101 -89
- data/vendor/libgit2/src/libgit2/config_list.c +285 -0
- data/vendor/libgit2/src/libgit2/config_list.h +32 -0
- data/vendor/libgit2/src/libgit2/config_mem.c +195 -40
- data/vendor/libgit2/src/libgit2/config_parse.c +12 -10
- data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
- data/vendor/libgit2/src/libgit2/delta.c +5 -1
- data/vendor/libgit2/src/libgit2/describe.c +24 -24
- data/vendor/libgit2/src/libgit2/diff.c +1 -1
- data/vendor/libgit2/src/libgit2/diff_driver.c +13 -20
- data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
- data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
- data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
- data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
- data/vendor/libgit2/src/libgit2/diff_stats.c +19 -12
- data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
- data/vendor/libgit2/src/libgit2/email.c +1 -0
- data/vendor/libgit2/src/libgit2/fetch.c +5 -3
- data/vendor/libgit2/src/libgit2/fetchhead.c +1 -1
- data/vendor/libgit2/src/libgit2/filter.c +5 -5
- data/vendor/libgit2/src/libgit2/git2.rc +3 -3
- data/vendor/libgit2/src/libgit2/grafts.c +18 -20
- data/vendor/libgit2/src/libgit2/grafts.h +0 -1
- data/vendor/libgit2/src/libgit2/graph.c +1 -1
- data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
- data/vendor/libgit2/src/libgit2/ignore.c +9 -5
- data/vendor/libgit2/src/libgit2/index.c +76 -98
- data/vendor/libgit2/src/libgit2/index.h +5 -2
- data/vendor/libgit2/src/libgit2/index_map.c +95 -0
- data/vendor/libgit2/src/libgit2/index_map.h +28 -0
- data/vendor/libgit2/src/libgit2/indexer.c +36 -40
- data/vendor/libgit2/src/libgit2/iterator.c +14 -8
- data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
- data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
- data/vendor/libgit2/src/libgit2/merge.c +43 -38
- data/vendor/libgit2/src/libgit2/merge.h +4 -0
- data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
- data/vendor/libgit2/src/libgit2/merge_file.c +43 -30
- data/vendor/libgit2/src/libgit2/message.c +1 -1
- data/vendor/libgit2/src/libgit2/midx.c +30 -18
- data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
- data/vendor/libgit2/src/libgit2/object.c +6 -5
- data/vendor/libgit2/src/libgit2/odb.c +7 -10
- data/vendor/libgit2/src/libgit2/odb_loose.c +24 -14
- data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
- data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
- data/vendor/libgit2/src/libgit2/oid.c +36 -10
- data/vendor/libgit2/src/libgit2/oid.h +11 -0
- data/vendor/libgit2/src/libgit2/pack-objects.c +59 -34
- data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
- data/vendor/libgit2/src/libgit2/pack.c +33 -24
- data/vendor/libgit2/src/libgit2/pack.h +15 -10
- data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
- data/vendor/libgit2/src/libgit2/path.c +1 -1
- data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
- data/vendor/libgit2/src/libgit2/push.c +79 -28
- data/vendor/libgit2/src/libgit2/push.h +1 -0
- data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
- data/vendor/libgit2/src/libgit2/reflog.c +1 -2
- data/vendor/libgit2/src/libgit2/reflog.h +2 -0
- data/vendor/libgit2/src/libgit2/refs.c +41 -13
- data/vendor/libgit2/src/libgit2/refs.h +6 -1
- data/vendor/libgit2/src/libgit2/refspec.c +28 -1
- data/vendor/libgit2/src/libgit2/refspec.h +8 -0
- data/vendor/libgit2/src/libgit2/remote.c +125 -62
- data/vendor/libgit2/src/libgit2/remote.h +0 -1
- data/vendor/libgit2/src/libgit2/repository.c +235 -54
- data/vendor/libgit2/src/libgit2/repository.h +10 -6
- data/vendor/libgit2/src/libgit2/revert.c +1 -2
- data/vendor/libgit2/src/libgit2/revparse.c +2 -2
- data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
- data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
- data/vendor/libgit2/src/libgit2/settings.c +468 -0
- data/vendor/libgit2/src/libgit2/settings.h +6 -2
- data/vendor/libgit2/src/libgit2/signature.c +132 -15
- data/vendor/libgit2/src/libgit2/signature.h +0 -1
- data/vendor/libgit2/src/libgit2/status.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
- data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
- data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
- data/vendor/libgit2/src/libgit2/streams/socket.c +30 -0
- data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
- data/vendor/libgit2/src/libgit2/submodule.c +118 -68
- data/vendor/libgit2/src/libgit2/submodule.h +6 -7
- data/vendor/libgit2/src/libgit2/tag.c +4 -2
- data/vendor/libgit2/src/libgit2/trailer.c +6 -6
- data/vendor/libgit2/src/libgit2/transaction.c +26 -20
- data/vendor/libgit2/src/libgit2/transaction.h +4 -1
- data/vendor/libgit2/src/libgit2/transport.c +4 -1
- data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +2 -0
- data/vendor/libgit2/src/libgit2/transports/credential.c +2 -2
- data/vendor/libgit2/src/libgit2/transports/git.c +1 -1
- data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
- data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +124 -81
- data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
- data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
- data/vendor/libgit2/src/libgit2/transports/local.c +16 -8
- data/vendor/libgit2/src/libgit2/transports/smart.c +25 -13
- data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +5 -5
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
- data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +386 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
- data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
- data/vendor/libgit2/src/libgit2/tree.c +34 -26
- data/vendor/libgit2/src/libgit2/tree.h +3 -2
- data/vendor/libgit2/src/libgit2/worktree.c +14 -17
- data/vendor/libgit2/src/util/CMakeLists.txt +7 -10
- data/vendor/libgit2/src/util/alloc.c +4 -1
- data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
- data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
- data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
- data/vendor/libgit2/src/util/array.h +18 -17
- data/vendor/libgit2/src/util/cc-compat.h +2 -0
- data/vendor/libgit2/src/util/ctype_compat.h +70 -0
- data/vendor/libgit2/src/util/date.c +22 -14
- data/vendor/libgit2/src/util/date.h +12 -0
- data/vendor/libgit2/src/util/errors.c +401 -0
- data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
- data/vendor/libgit2/src/util/fs_path.c +81 -10
- data/vendor/libgit2/src/util/fs_path.h +29 -0
- data/vendor/libgit2/src/util/futils.c +6 -5
- data/vendor/libgit2/src/util/futils.h +24 -7
- data/vendor/libgit2/src/util/git2_features.h.in +12 -1
- data/vendor/libgit2/src/util/git2_util.h +6 -0
- data/vendor/libgit2/src/util/hash/builtin.c +14 -4
- data/vendor/libgit2/src/util/hash/openssl.c +148 -0
- data/vendor/libgit2/src/util/hash/openssl.h +17 -1
- data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +8 -6
- data/vendor/libgit2/src/util/hash/sha.h +4 -1
- data/vendor/libgit2/src/util/hashmap.h +425 -0
- data/vendor/libgit2/src/util/hashmap_str.h +43 -0
- data/vendor/libgit2/src/util/integer.h +3 -1
- data/vendor/libgit2/src/util/net.c +17 -11
- data/vendor/libgit2/src/util/net.h +2 -0
- data/vendor/libgit2/src/util/pool.c +1 -1
- data/vendor/libgit2/src/util/pool.h +5 -0
- data/vendor/libgit2/src/util/pqueue.h +1 -1
- data/vendor/libgit2/src/util/process.h +223 -0
- data/vendor/libgit2/src/util/rand.c +1 -7
- data/vendor/libgit2/src/util/regexp.c +1 -1
- data/vendor/libgit2/src/util/runtime.c +2 -2
- data/vendor/libgit2/src/util/sortedcache.c +14 -13
- data/vendor/libgit2/src/util/sortedcache.h +3 -3
- data/vendor/libgit2/src/util/str.c +20 -8
- data/vendor/libgit2/src/util/str.h +5 -3
- data/vendor/libgit2/src/util/strlist.c +108 -0
- data/vendor/libgit2/src/util/strlist.h +36 -0
- data/vendor/libgit2/src/util/unix/posix.h +0 -2
- data/vendor/libgit2/src/util/unix/process.c +706 -0
- data/vendor/libgit2/src/util/unix/realpath.c +23 -5
- data/vendor/libgit2/src/util/util.c +18 -5
- data/vendor/libgit2/src/util/util.h +5 -38
- data/vendor/libgit2/src/util/vector.c +3 -3
- data/vendor/libgit2/src/util/vector.h +2 -2
- data/vendor/libgit2/src/util/win32/path_w32.c +81 -5
- data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
- data/vendor/libgit2/src/util/win32/process.c +522 -0
- metadata +60 -32
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
- data/vendor/libgit2/deps/http-parser/COPYING +0 -23
- data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
- data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
- data/vendor/libgit2/deps/zlib/COPYING +0 -27
- data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
- data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
- data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
- data/vendor/libgit2/src/libgit2/errors.c +0 -293
- data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
- data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
- data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
- data/vendor/libgit2/src/libgit2/offmap.c +0 -101
- data/vendor/libgit2/src/libgit2/offmap.h +0 -133
- data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
- data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
- data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
- data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
- data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
- data/vendor/libgit2/src/util/khash.h +0 -615
- data/vendor/libgit2/src/util/strmap.c +0 -100
- data/vendor/libgit2/src/util/strmap.h +0 -131
- /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
|
@@ -419,6 +419,16 @@ int git_fs_path_to_dir(git_str *path)
|
|
|
419
419
|
return git_str_oom(path) ? -1 : 0;
|
|
420
420
|
}
|
|
421
421
|
|
|
422
|
+
size_t git_fs_path_dirlen(const char *path)
|
|
423
|
+
{
|
|
424
|
+
size_t len = strlen(path);
|
|
425
|
+
|
|
426
|
+
while (len > 1 && path[len - 1] == '/')
|
|
427
|
+
len--;
|
|
428
|
+
|
|
429
|
+
return len;
|
|
430
|
+
}
|
|
431
|
+
|
|
422
432
|
void git_fs_path_string_to_dir(char *path, size_t size)
|
|
423
433
|
{
|
|
424
434
|
size_t end = strlen(path);
|
|
@@ -601,6 +611,37 @@ bool git_fs_path_isfile(const char *path)
|
|
|
601
611
|
return S_ISREG(st.st_mode) != 0;
|
|
602
612
|
}
|
|
603
613
|
|
|
614
|
+
#ifdef GIT_WIN32
|
|
615
|
+
|
|
616
|
+
bool git_fs_path_isexecutable(const char *path)
|
|
617
|
+
{
|
|
618
|
+
struct stat st;
|
|
619
|
+
|
|
620
|
+
GIT_ASSERT_ARG_WITH_RETVAL(path, false);
|
|
621
|
+
|
|
622
|
+
if (git__suffixcmp_icase(path, ".exe") != 0 &&
|
|
623
|
+
git__suffixcmp_icase(path, ".cmd") != 0)
|
|
624
|
+
return false;
|
|
625
|
+
|
|
626
|
+
return (p_stat(path, &st) == 0);
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
#else
|
|
630
|
+
|
|
631
|
+
bool git_fs_path_isexecutable(const char *path)
|
|
632
|
+
{
|
|
633
|
+
struct stat st;
|
|
634
|
+
|
|
635
|
+
GIT_ASSERT_ARG_WITH_RETVAL(path, false);
|
|
636
|
+
if (p_stat(path, &st) < 0)
|
|
637
|
+
return false;
|
|
638
|
+
|
|
639
|
+
return S_ISREG(st.st_mode) != 0 &&
|
|
640
|
+
((st.st_mode & S_IXUSR) != 0);
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
#endif
|
|
644
|
+
|
|
604
645
|
bool git_fs_path_islink(const char *path)
|
|
605
646
|
{
|
|
606
647
|
struct stat st;
|
|
@@ -1938,12 +1979,13 @@ static int sudo_uid_lookup(uid_t *out)
|
|
|
1938
1979
|
{
|
|
1939
1980
|
git_str uid_str = GIT_STR_INIT;
|
|
1940
1981
|
int64_t uid;
|
|
1941
|
-
int error;
|
|
1982
|
+
int error = -1;
|
|
1942
1983
|
|
|
1943
|
-
if (
|
|
1944
|
-
|
|
1945
|
-
|
|
1984
|
+
if (git__getenv(&uid_str, "SUDO_UID") == 0 &&
|
|
1985
|
+
git__strntol64(&uid, uid_str.ptr, uid_str.size, NULL, 10) == 0 &&
|
|
1986
|
+
uid == (int64_t)((uid_t)uid)) {
|
|
1946
1987
|
*out = (uid_t)uid;
|
|
1988
|
+
error = 0;
|
|
1947
1989
|
}
|
|
1948
1990
|
|
|
1949
1991
|
git_str_dispose(&uid_str);
|
|
@@ -2009,9 +2051,10 @@ int git_fs_path_owner_is_system(bool *out, const char *path)
|
|
|
2009
2051
|
return git_fs_path_owner_is(out, path, GIT_FS_PATH_OWNER_ADMINISTRATOR);
|
|
2010
2052
|
}
|
|
2011
2053
|
|
|
2012
|
-
int git_fs_path_find_executable(git_str *fullpath, const char *executable)
|
|
2013
|
-
{
|
|
2014
2054
|
#ifdef GIT_WIN32
|
|
2055
|
+
|
|
2056
|
+
static int find_executable(git_str *fullpath, const char *executable)
|
|
2057
|
+
{
|
|
2015
2058
|
git_win32_path fullpath_w, executable_w;
|
|
2016
2059
|
int error;
|
|
2017
2060
|
|
|
@@ -2024,9 +2067,15 @@ int git_fs_path_find_executable(git_str *fullpath, const char *executable)
|
|
|
2024
2067
|
error = git_str_put_w(fullpath, fullpath_w, wcslen(fullpath_w));
|
|
2025
2068
|
|
|
2026
2069
|
return error;
|
|
2070
|
+
}
|
|
2071
|
+
|
|
2027
2072
|
#else
|
|
2073
|
+
|
|
2074
|
+
static int find_executable(git_str *fullpath, const char *executable)
|
|
2075
|
+
{
|
|
2028
2076
|
git_str path = GIT_STR_INIT;
|
|
2029
2077
|
const char *current_dir, *term;
|
|
2078
|
+
size_t current_dirlen;
|
|
2030
2079
|
bool found = false;
|
|
2031
2080
|
|
|
2032
2081
|
if (git__getenv(&path, "PATH") < 0)
|
|
@@ -2038,20 +2087,28 @@ int git_fs_path_find_executable(git_str *fullpath, const char *executable)
|
|
|
2038
2087
|
if (! (term = strchr(current_dir, GIT_PATH_LIST_SEPARATOR)))
|
|
2039
2088
|
term = strchr(current_dir, '\0');
|
|
2040
2089
|
|
|
2090
|
+
current_dirlen = term - current_dir;
|
|
2041
2091
|
git_str_clear(fullpath);
|
|
2042
|
-
|
|
2043
|
-
|
|
2092
|
+
|
|
2093
|
+
/* An empty path segment is treated as '.' */
|
|
2094
|
+
if (current_dirlen == 0 && git_str_putc(fullpath, '.'))
|
|
2095
|
+
return -1;
|
|
2096
|
+
else if (current_dirlen != 0 &&
|
|
2097
|
+
git_str_put(fullpath, current_dir, current_dirlen) < 0)
|
|
2098
|
+
return -1;
|
|
2099
|
+
|
|
2100
|
+
if (git_str_putc(fullpath, '/') < 0 ||
|
|
2044
2101
|
git_str_puts(fullpath, executable) < 0)
|
|
2045
2102
|
return -1;
|
|
2046
2103
|
|
|
2047
|
-
if (
|
|
2104
|
+
if (git_fs_path_isexecutable(fullpath->ptr)) {
|
|
2048
2105
|
found = true;
|
|
2049
2106
|
break;
|
|
2050
2107
|
}
|
|
2051
2108
|
|
|
2052
2109
|
current_dir = term;
|
|
2053
2110
|
|
|
2054
|
-
|
|
2111
|
+
if (*current_dir == GIT_PATH_LIST_SEPARATOR)
|
|
2055
2112
|
current_dir++;
|
|
2056
2113
|
}
|
|
2057
2114
|
|
|
@@ -2062,5 +2119,19 @@ int git_fs_path_find_executable(git_str *fullpath, const char *executable)
|
|
|
2062
2119
|
|
|
2063
2120
|
git_str_clear(fullpath);
|
|
2064
2121
|
return GIT_ENOTFOUND;
|
|
2122
|
+
}
|
|
2123
|
+
|
|
2065
2124
|
#endif
|
|
2125
|
+
|
|
2126
|
+
int git_fs_path_find_executable(git_str *fullpath, const char *executable)
|
|
2127
|
+
{
|
|
2128
|
+
/* For qualified paths we do not look in PATH */
|
|
2129
|
+
if (strchr(executable, '/') != NULL) {
|
|
2130
|
+
if (!git_fs_path_isexecutable(executable))
|
|
2131
|
+
return GIT_ENOTFOUND;
|
|
2132
|
+
|
|
2133
|
+
return git_str_puts(fullpath, executable);
|
|
2134
|
+
}
|
|
2135
|
+
|
|
2136
|
+
return find_executable(fullpath, executable);
|
|
2066
2137
|
}
|
|
@@ -86,6 +86,29 @@ extern int git_fs_path_to_dir(git_str *path);
|
|
|
86
86
|
*/
|
|
87
87
|
extern void git_fs_path_string_to_dir(char *path, size_t size);
|
|
88
88
|
|
|
89
|
+
/**
|
|
90
|
+
* Provides the length of the given path string with no trailing
|
|
91
|
+
* slashes.
|
|
92
|
+
*/
|
|
93
|
+
size_t git_fs_path_dirlen(const char *path);
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Returns nonzero if the given path is a filesystem root; on Windows, this
|
|
97
|
+
* means a drive letter (eg `A:/`, `C:\`). On POSIX this is `/`.
|
|
98
|
+
*/
|
|
99
|
+
GIT_INLINE(int) git_fs_path_is_root(const char *name)
|
|
100
|
+
{
|
|
101
|
+
#ifdef GIT_WIN32
|
|
102
|
+
if (((name[0] >= 'A' && name[0] <= 'Z') || (name[0] >= 'a' && name[0] <= 'z')) &&
|
|
103
|
+
name[1] == ':' &&
|
|
104
|
+
(name[2] == '/' || name[2] == '\\') &&
|
|
105
|
+
name[3] == '\0')
|
|
106
|
+
return 1;
|
|
107
|
+
#endif
|
|
108
|
+
|
|
109
|
+
return (name[0] == '/' && name[1] == '\0');
|
|
110
|
+
}
|
|
111
|
+
|
|
89
112
|
/**
|
|
90
113
|
* Taken from git.git; returns nonzero if the given path is "." or "..".
|
|
91
114
|
*/
|
|
@@ -181,6 +204,12 @@ extern bool git_fs_path_isdir(const char *path);
|
|
|
181
204
|
*/
|
|
182
205
|
extern bool git_fs_path_isfile(const char *path);
|
|
183
206
|
|
|
207
|
+
/**
|
|
208
|
+
* Check if the given path points to an executable.
|
|
209
|
+
* @return true or false
|
|
210
|
+
*/
|
|
211
|
+
extern bool git_fs_path_isexecutable(const char *path);
|
|
212
|
+
|
|
184
213
|
/**
|
|
185
214
|
* Check if the given path points to a symbolic link.
|
|
186
215
|
* @return true or false
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
#include "futils.h"
|
|
9
9
|
|
|
10
10
|
#include "runtime.h"
|
|
11
|
-
#include "strmap.h"
|
|
12
11
|
#include "hash.h"
|
|
13
12
|
#include "rand.h"
|
|
13
|
+
#include "hashmap_str.h"
|
|
14
14
|
|
|
15
15
|
#include <ctype.h>
|
|
16
16
|
|
|
@@ -653,7 +653,8 @@ int git_futils_mkdir_relative(
|
|
|
653
653
|
*tail = '\0';
|
|
654
654
|
st.st_mode = 0;
|
|
655
655
|
|
|
656
|
-
if (opts->
|
|
656
|
+
if (opts->cache_pathset &&
|
|
657
|
+
git_hashset_str_contains(opts->cache_pathset, make_path.ptr))
|
|
657
658
|
continue;
|
|
658
659
|
|
|
659
660
|
/* See what's going on with this path component */
|
|
@@ -688,17 +689,17 @@ retry_lstat:
|
|
|
688
689
|
make_path.ptr, &st, (lastch == '\0'), mode, flags, opts)) < 0)
|
|
689
690
|
goto done;
|
|
690
691
|
|
|
691
|
-
if (opts->
|
|
692
|
+
if (opts->cache_pathset && opts->cache_pool) {
|
|
692
693
|
char *cache_path;
|
|
693
694
|
size_t alloc_size;
|
|
694
695
|
|
|
695
696
|
GIT_ERROR_CHECK_ALLOC_ADD(&alloc_size, make_path.size, 1);
|
|
696
|
-
cache_path = git_pool_malloc(opts->
|
|
697
|
+
cache_path = git_pool_malloc(opts->cache_pool, alloc_size);
|
|
697
698
|
GIT_ERROR_CHECK_ALLOC(cache_path);
|
|
698
699
|
|
|
699
700
|
memcpy(cache_path, make_path.ptr, make_path.size + 1);
|
|
700
701
|
|
|
701
|
-
if ((error =
|
|
702
|
+
if ((error = git_hashset_str_add(opts->cache_pathset, cache_path)) < 0)
|
|
702
703
|
goto done;
|
|
703
704
|
}
|
|
704
705
|
}
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
#include "posix.h"
|
|
14
14
|
#include "fs_path.h"
|
|
15
15
|
#include "pool.h"
|
|
16
|
-
#include "strmap.h"
|
|
17
16
|
#include "hash.h"
|
|
17
|
+
#include "hashmap_str.h"
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* Filebuffer methods
|
|
@@ -25,16 +25,24 @@ extern int git_futils_readbuffer(git_str *obj, const char *path);
|
|
|
25
25
|
extern int git_futils_readbuffer_updated(
|
|
26
26
|
git_str *obj,
|
|
27
27
|
const char *path,
|
|
28
|
-
unsigned char checksum[
|
|
28
|
+
unsigned char checksum[GIT_HASH_SHA256_SIZE],
|
|
29
29
|
int *updated);
|
|
30
30
|
extern int git_futils_readbuffer_fd_full(git_str *obj, git_file fd);
|
|
31
31
|
extern int git_futils_readbuffer_fd(git_str *obj, git_file fd, size_t len);
|
|
32
32
|
|
|
33
33
|
/* Additional constants for `git_futils_writebuffer`'s `open_flags`. We
|
|
34
34
|
* support these internally and they will be removed before the `open` call.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
*
|
|
36
|
+
* Not all platforms define O_FSYNC. Fall back to O_SYNC (the POSIX
|
|
37
|
+
* standard name; O_FSYNC is a non-standard alias) when available,
|
|
38
|
+
* otherwise use a sentinel value that won't collide with real open
|
|
39
|
+
* flags. Avoid (1 << 31) since left-shifting into the sign bit of
|
|
40
|
+
* a signed int is undefined behavior.
|
|
41
|
+
*/
|
|
42
|
+
#if !defined(O_FSYNC) && defined(O_SYNC)
|
|
43
|
+
# define O_FSYNC O_SYNC
|
|
44
|
+
#elif !defined(O_FSYNC)
|
|
45
|
+
# define O_FSYNC (1 << 30)
|
|
38
46
|
#endif
|
|
39
47
|
|
|
40
48
|
extern int git_futils_writebuffer(
|
|
@@ -109,8 +117,17 @@ struct git_futils_mkdir_perfdata
|
|
|
109
117
|
|
|
110
118
|
struct git_futils_mkdir_options
|
|
111
119
|
{
|
|
112
|
-
|
|
113
|
-
|
|
120
|
+
/*
|
|
121
|
+
* Callers can optionally pass an allocation pool and a
|
|
122
|
+
* hashset of strings; mkdir will populate these with the
|
|
123
|
+
* path(s) it creates; this can be useful for repeated calls
|
|
124
|
+
* to mkdir. This will reduce I/O by avoiding testing for the
|
|
125
|
+
* existence of intermediate directories that it knows already
|
|
126
|
+
* exist (because it created them).
|
|
127
|
+
*/
|
|
128
|
+
git_pool *cache_pool;
|
|
129
|
+
git_hashset_str *cache_pathset;
|
|
130
|
+
|
|
114
131
|
struct git_futils_mkdir_perfdata perfdata;
|
|
115
132
|
};
|
|
116
133
|
|
|
@@ -30,7 +30,9 @@
|
|
|
30
30
|
#cmakedefine GIT_QSORT_MSC
|
|
31
31
|
|
|
32
32
|
#cmakedefine GIT_SSH 1
|
|
33
|
-
#cmakedefine
|
|
33
|
+
#cmakedefine GIT_SSH_EXEC 1
|
|
34
|
+
#cmakedefine GIT_SSH_LIBSSH2 1
|
|
35
|
+
#cmakedefine GIT_SSH_LIBSSH2_MEMORY_CREDENTIALS 1
|
|
34
36
|
|
|
35
37
|
#cmakedefine GIT_NTLM 1
|
|
36
38
|
#cmakedefine GIT_GSSAPI 1
|
|
@@ -44,10 +46,15 @@
|
|
|
44
46
|
#cmakedefine GIT_MBEDTLS 1
|
|
45
47
|
#cmakedefine GIT_SCHANNEL 1
|
|
46
48
|
|
|
49
|
+
#cmakedefine GIT_HTTPPARSER_HTTPPARSER 1
|
|
50
|
+
#cmakedefine GIT_HTTPPARSER_LLHTTP 1
|
|
51
|
+
#cmakedefine GIT_HTTPPARSER_BUILTIN 1
|
|
52
|
+
|
|
47
53
|
#cmakedefine GIT_SHA1_COLLISIONDETECT 1
|
|
48
54
|
#cmakedefine GIT_SHA1_WIN32 1
|
|
49
55
|
#cmakedefine GIT_SHA1_COMMON_CRYPTO 1
|
|
50
56
|
#cmakedefine GIT_SHA1_OPENSSL 1
|
|
57
|
+
#cmakedefine GIT_SHA1_OPENSSL_FIPS 1
|
|
51
58
|
#cmakedefine GIT_SHA1_OPENSSL_DYNAMIC 1
|
|
52
59
|
#cmakedefine GIT_SHA1_MBEDTLS 1
|
|
53
60
|
|
|
@@ -55,9 +62,13 @@
|
|
|
55
62
|
#cmakedefine GIT_SHA256_WIN32 1
|
|
56
63
|
#cmakedefine GIT_SHA256_COMMON_CRYPTO 1
|
|
57
64
|
#cmakedefine GIT_SHA256_OPENSSL 1
|
|
65
|
+
#cmakedefine GIT_SHA256_OPENSSL_FIPS 1
|
|
58
66
|
#cmakedefine GIT_SHA256_OPENSSL_DYNAMIC 1
|
|
59
67
|
#cmakedefine GIT_SHA256_MBEDTLS 1
|
|
60
68
|
|
|
69
|
+
#cmakedefine GIT_COMPRESSION_BUILTIN 1
|
|
70
|
+
#cmakedefine GIT_COMPRESSION_ZLIB 1
|
|
71
|
+
|
|
61
72
|
#cmakedefine GIT_RAND_GETENTROPY 1
|
|
62
73
|
#cmakedefine GIT_RAND_GETLOADAVG 1
|
|
63
74
|
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
#endif
|
|
13
13
|
|
|
14
14
|
#include "git2/common.h"
|
|
15
|
+
#include "git2/sys/errors.h"
|
|
15
16
|
#include "cc-compat.h"
|
|
16
17
|
|
|
17
18
|
typedef struct git_str git_str;
|
|
@@ -48,6 +49,10 @@ typedef struct git_str git_str;
|
|
|
48
49
|
# define GIT_WARN_UNUSED_RESULT
|
|
49
50
|
#endif
|
|
50
51
|
|
|
52
|
+
#if (defined(_WIN32)) && !defined(__CYGWIN__)
|
|
53
|
+
# define GIT_WIN32 1
|
|
54
|
+
#endif
|
|
55
|
+
|
|
51
56
|
#include <assert.h>
|
|
52
57
|
#include <errno.h>
|
|
53
58
|
#include <limits.h>
|
|
@@ -164,5 +169,6 @@ typedef struct git_str git_str;
|
|
|
164
169
|
if (GIT_MULTIPLY_SIZET_OVERFLOW(out, nelem, elsize)) { return -1; }
|
|
165
170
|
|
|
166
171
|
#include "util.h"
|
|
172
|
+
#include "ctype_compat.h"
|
|
167
173
|
|
|
168
174
|
#endif
|
|
@@ -32,13 +32,23 @@ int git_hash_sha256_init(git_hash_sha256_ctx *ctx)
|
|
|
32
32
|
return 0;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
int git_hash_sha256_update(git_hash_sha256_ctx *ctx, const void *
|
|
35
|
+
int git_hash_sha256_update(git_hash_sha256_ctx *ctx, const void *_data, size_t len)
|
|
36
36
|
{
|
|
37
|
+
const unsigned char *data = _data;
|
|
37
38
|
GIT_ASSERT_ARG(ctx);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
|
|
40
|
+
while (len > 0) {
|
|
41
|
+
unsigned int chunk = (len > UINT_MAX) ? UINT_MAX : (unsigned int)len;
|
|
42
|
+
|
|
43
|
+
if (SHA256Input(&ctx->c, data, chunk)) {
|
|
44
|
+
git_error_set(GIT_ERROR_SHA, "SHA256 error");
|
|
45
|
+
return -1;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
data += chunk;
|
|
49
|
+
len -= chunk;
|
|
41
50
|
}
|
|
51
|
+
|
|
42
52
|
return 0;
|
|
43
53
|
}
|
|
44
54
|
|
|
@@ -120,6 +120,80 @@ int git_hash_sha1_final(unsigned char *out, git_hash_sha1_ctx *ctx)
|
|
|
120
120
|
|
|
121
121
|
#endif
|
|
122
122
|
|
|
123
|
+
#ifdef GIT_SHA1_OPENSSL_FIPS
|
|
124
|
+
|
|
125
|
+
static const EVP_MD *SHA1_ENGINE_DIGEST_TYPE = NULL;
|
|
126
|
+
|
|
127
|
+
int git_hash_sha1_global_init(void)
|
|
128
|
+
{
|
|
129
|
+
SHA1_ENGINE_DIGEST_TYPE = EVP_sha1();
|
|
130
|
+
return SHA1_ENGINE_DIGEST_TYPE != NULL ? 0 : -1;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
int git_hash_sha1_ctx_init(git_hash_sha1_ctx *ctx)
|
|
134
|
+
{
|
|
135
|
+
return git_hash_sha1_init(ctx);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
void git_hash_sha1_ctx_cleanup(git_hash_sha1_ctx *ctx)
|
|
139
|
+
{
|
|
140
|
+
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
141
|
+
EVP_MD_CTX_destroy(ctx->c);
|
|
142
|
+
#else
|
|
143
|
+
EVP_MD_CTX_free(ctx->c);
|
|
144
|
+
#endif
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
int git_hash_sha1_init(git_hash_sha1_ctx *ctx)
|
|
148
|
+
{
|
|
149
|
+
GIT_ASSERT_ARG(ctx);
|
|
150
|
+
GIT_ASSERT(SHA1_ENGINE_DIGEST_TYPE);
|
|
151
|
+
|
|
152
|
+
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
153
|
+
ctx->c = EVP_MD_CTX_create();
|
|
154
|
+
#else
|
|
155
|
+
ctx->c = EVP_MD_CTX_new();
|
|
156
|
+
#endif
|
|
157
|
+
|
|
158
|
+
GIT_ASSERT(ctx->c);
|
|
159
|
+
|
|
160
|
+
if (EVP_DigestInit_ex(ctx->c, SHA1_ENGINE_DIGEST_TYPE, NULL) != 1) {
|
|
161
|
+
git_hash_sha1_ctx_cleanup(ctx);
|
|
162
|
+
git_error_set(GIT_ERROR_SHA, "failed to initialize sha1 context");
|
|
163
|
+
return -1;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return 0;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
int git_hash_sha1_update(git_hash_sha1_ctx *ctx, const void *data, size_t len)
|
|
170
|
+
{
|
|
171
|
+
GIT_ASSERT_ARG(ctx && ctx->c);
|
|
172
|
+
|
|
173
|
+
if (EVP_DigestUpdate(ctx->c, data, len) != 1) {
|
|
174
|
+
git_error_set(GIT_ERROR_SHA, "failed to update sha1");
|
|
175
|
+
return -1;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return 0;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
int git_hash_sha1_final(unsigned char *out, git_hash_sha1_ctx *ctx)
|
|
182
|
+
{
|
|
183
|
+
unsigned int len = 0;
|
|
184
|
+
|
|
185
|
+
GIT_ASSERT_ARG(ctx && ctx->c);
|
|
186
|
+
|
|
187
|
+
if (EVP_DigestFinal(ctx->c, out, &len) != 1) {
|
|
188
|
+
git_error_set(GIT_ERROR_SHA, "failed to finalize sha1");
|
|
189
|
+
return -1;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return 0;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
#endif
|
|
196
|
+
|
|
123
197
|
#ifdef GIT_SHA256_OPENSSL
|
|
124
198
|
|
|
125
199
|
# ifdef GIT_OPENSSL_DYNAMIC
|
|
@@ -193,3 +267,77 @@ int git_hash_sha256_final(unsigned char *out, git_hash_sha256_ctx *ctx)
|
|
|
193
267
|
}
|
|
194
268
|
|
|
195
269
|
#endif
|
|
270
|
+
|
|
271
|
+
#ifdef GIT_SHA256_OPENSSL_FIPS
|
|
272
|
+
|
|
273
|
+
static const EVP_MD *SHA256_ENGINE_DIGEST_TYPE = NULL;
|
|
274
|
+
|
|
275
|
+
int git_hash_sha256_global_init(void)
|
|
276
|
+
{
|
|
277
|
+
SHA256_ENGINE_DIGEST_TYPE = EVP_sha256();
|
|
278
|
+
return SHA256_ENGINE_DIGEST_TYPE != NULL ? 0 : -1;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
int git_hash_sha256_ctx_init(git_hash_sha256_ctx *ctx)
|
|
282
|
+
{
|
|
283
|
+
return git_hash_sha256_init(ctx);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
void git_hash_sha256_ctx_cleanup(git_hash_sha256_ctx *ctx)
|
|
287
|
+
{
|
|
288
|
+
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
289
|
+
EVP_MD_CTX_destroy(ctx->c);
|
|
290
|
+
#else
|
|
291
|
+
EVP_MD_CTX_free(ctx->c);
|
|
292
|
+
#endif
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
int git_hash_sha256_init(git_hash_sha256_ctx *ctx)
|
|
296
|
+
{
|
|
297
|
+
GIT_ASSERT_ARG(ctx);
|
|
298
|
+
GIT_ASSERT(SHA256_ENGINE_DIGEST_TYPE);
|
|
299
|
+
|
|
300
|
+
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
301
|
+
ctx->c = EVP_MD_CTX_create();
|
|
302
|
+
#else
|
|
303
|
+
ctx->c = EVP_MD_CTX_new();
|
|
304
|
+
#endif
|
|
305
|
+
|
|
306
|
+
GIT_ASSERT(ctx->c);
|
|
307
|
+
|
|
308
|
+
if (EVP_DigestInit_ex(ctx->c, SHA256_ENGINE_DIGEST_TYPE, NULL) != 1) {
|
|
309
|
+
git_hash_sha256_ctx_cleanup(ctx);
|
|
310
|
+
git_error_set(GIT_ERROR_SHA, "failed to initialize sha256 context");
|
|
311
|
+
return -1;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
return 0;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
int git_hash_sha256_update(git_hash_sha256_ctx *ctx, const void *data, size_t len)
|
|
318
|
+
{
|
|
319
|
+
GIT_ASSERT_ARG(ctx && ctx->c);
|
|
320
|
+
|
|
321
|
+
if (EVP_DigestUpdate(ctx->c, data, len) != 1) {
|
|
322
|
+
git_error_set(GIT_ERROR_SHA, "failed to update sha256");
|
|
323
|
+
return -1;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
return 0;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
int git_hash_sha256_final(unsigned char *out, git_hash_sha256_ctx *ctx)
|
|
330
|
+
{
|
|
331
|
+
unsigned int len = 0;
|
|
332
|
+
|
|
333
|
+
GIT_ASSERT_ARG(ctx && ctx->c);
|
|
334
|
+
|
|
335
|
+
if (EVP_DigestFinal(ctx->c, out, &len) != 1) {
|
|
336
|
+
git_error_set(GIT_ERROR_SHA, "failed to finalize sha256");
|
|
337
|
+
return -1;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
return 0;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
#endif
|
|
@@ -11,7 +11,11 @@
|
|
|
11
11
|
#include "hash/sha.h"
|
|
12
12
|
|
|
13
13
|
#ifndef GIT_OPENSSL_DYNAMIC
|
|
14
|
-
#
|
|
14
|
+
# if defined(GIT_SHA1_OPENSSL_FIPS) || defined(GIT_SHA256_OPENSSL_FIPS)
|
|
15
|
+
# include <openssl/evp.h>
|
|
16
|
+
# else
|
|
17
|
+
# include <openssl/sha.h>
|
|
18
|
+
# endif
|
|
15
19
|
#else
|
|
16
20
|
|
|
17
21
|
typedef struct {
|
|
@@ -36,10 +40,22 @@ struct git_hash_sha1_ctx {
|
|
|
36
40
|
};
|
|
37
41
|
#endif
|
|
38
42
|
|
|
43
|
+
#ifdef GIT_SHA1_OPENSSL_FIPS
|
|
44
|
+
struct git_hash_sha1_ctx {
|
|
45
|
+
EVP_MD_CTX* c;
|
|
46
|
+
};
|
|
47
|
+
#endif
|
|
48
|
+
|
|
39
49
|
#ifdef GIT_SHA256_OPENSSL
|
|
40
50
|
struct git_hash_sha256_ctx {
|
|
41
51
|
SHA256_CTX c;
|
|
42
52
|
};
|
|
43
53
|
#endif
|
|
44
54
|
|
|
55
|
+
#ifdef GIT_SHA256_OPENSSL_FIPS
|
|
56
|
+
struct git_hash_sha256_ctx {
|
|
57
|
+
EVP_MD_CTX* c;
|
|
58
|
+
};
|
|
59
|
+
#endif
|
|
60
|
+
|
|
45
61
|
#endif
|
|
@@ -83,12 +83,14 @@
|
|
|
83
83
|
* Add "length" to the length.
|
|
84
84
|
* Set Corrupted when overflow has occurred.
|
|
85
85
|
*/
|
|
86
|
-
static
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
86
|
+
static int SHA224_256AddLength(SHA256Context *context, unsigned int length)
|
|
87
|
+
{
|
|
88
|
+
uint32_t addTemp = context->Length_Low;
|
|
89
|
+
context->Length_Low += length;
|
|
90
|
+
if (context->Length_Low < addTemp && ++context->Length_High == 0)
|
|
91
|
+
context->Corrupted = shaInputTooLong;
|
|
92
|
+
return context->Corrupted;
|
|
93
|
+
}
|
|
92
94
|
|
|
93
95
|
/* Local Function Prototypes */
|
|
94
96
|
static int SHA224_256Reset(SHA256Context *context, uint32_t *H0);
|
|
@@ -17,7 +17,10 @@ typedef struct git_hash_sha256_ctx git_hash_sha256_ctx;
|
|
|
17
17
|
# include "common_crypto.h"
|
|
18
18
|
#endif
|
|
19
19
|
|
|
20
|
-
#if defined(GIT_SHA1_OPENSSL) ||
|
|
20
|
+
#if defined(GIT_SHA1_OPENSSL) || \
|
|
21
|
+
defined(GIT_SHA1_OPENSSL_FIPS) || \
|
|
22
|
+
defined(GIT_SHA256_OPENSSL) || \
|
|
23
|
+
defined(GIT_SHA256_OPENSSL_FIPS)
|
|
21
24
|
# include "openssl.h"
|
|
22
25
|
#endif
|
|
23
26
|
|