rugged 0.27.7 → 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.
- checksums.yaml +4 -4
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +99 -51
- data/vendor/libgit2/COPYING +28 -0
- data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +15 -1
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +29 -0
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +96 -0
- data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +9 -8
- data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +2 -2
- data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +1 -1
- data/vendor/libgit2/cmake/Modules/FindGSSFramework.cmake +28 -0
- data/vendor/libgit2/cmake/Modules/FindIconv.cmake +11 -6
- data/vendor/libgit2/cmake/Modules/FindPCRE.cmake +38 -0
- data/vendor/libgit2/cmake/Modules/FindPCRE2.cmake +37 -0
- data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +2 -2
- data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +6 -0
- data/vendor/libgit2/cmake/Modules/PkgBuildConfig.cmake +110 -0
- data/vendor/libgit2/cmake/Modules/SelectGSSAPI.cmake +53 -0
- data/vendor/libgit2/cmake/Modules/SelectHTTPSBackend.cmake +124 -0
- data/vendor/libgit2/cmake/Modules/SelectHashes.cmake +66 -0
- data/vendor/libgit2/deps/http-parser/http_parser.c +11 -6
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +21 -0
- data/vendor/libgit2/deps/ntlmclient/compat.h +33 -0
- data/vendor/libgit2/deps/ntlmclient/crypt.h +64 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +120 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +18 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +145 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +18 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +130 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +21 -0
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +1420 -0
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +174 -0
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +320 -0
- data/vendor/libgit2/deps/ntlmclient/unicode.h +36 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +445 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +201 -0
- data/vendor/libgit2/deps/ntlmclient/utf8.h +1257 -0
- data/vendor/libgit2/deps/ntlmclient/util.c +21 -0
- data/vendor/libgit2/deps/ntlmclient/util.h +14 -0
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +140 -0
- data/vendor/libgit2/deps/pcre/COPYING +5 -0
- data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
- data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +17 -0
- data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
- data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +29 -0
- data/vendor/libgit2/deps/pcre/config.h.in +57 -0
- data/vendor/libgit2/deps/pcre/pcre.h +641 -0
- data/vendor/libgit2/deps/pcre/pcre_byte_order.c +319 -0
- data/vendor/libgit2/deps/pcre/pcre_chartables.c +198 -0
- data/vendor/libgit2/deps/pcre/pcre_compile.c +9800 -0
- data/vendor/libgit2/deps/pcre/pcre_config.c +190 -0
- data/vendor/libgit2/deps/pcre/pcre_dfa_exec.c +3676 -0
- data/vendor/libgit2/deps/pcre/pcre_exec.c +7173 -0
- data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +245 -0
- data/vendor/libgit2/deps/pcre/pcre_get.c +669 -0
- data/vendor/libgit2/deps/pcre/pcre_globals.c +86 -0
- data/vendor/libgit2/deps/pcre/pcre_internal.h +2787 -0
- data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +11913 -0
- data/vendor/libgit2/deps/pcre/pcre_maketables.c +156 -0
- data/vendor/libgit2/deps/pcre/pcre_newline.c +210 -0
- data/vendor/libgit2/deps/pcre/pcre_ord2utf8.c +94 -0
- data/vendor/libgit2/deps/pcre/pcre_printint.c +834 -0
- data/vendor/libgit2/deps/pcre/pcre_refcount.c +92 -0
- data/vendor/libgit2/deps/pcre/pcre_string_utils.c +211 -0
- data/vendor/libgit2/deps/pcre/pcre_study.c +1686 -0
- data/vendor/libgit2/deps/pcre/pcre_tables.c +727 -0
- data/vendor/libgit2/deps/pcre/pcre_ucd.c +3644 -0
- data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +301 -0
- data/vendor/libgit2/deps/pcre/pcre_version.c +98 -0
- data/vendor/libgit2/deps/pcre/pcre_xclass.c +268 -0
- data/vendor/libgit2/deps/pcre/pcreposix.c +421 -0
- data/vendor/libgit2/deps/pcre/pcreposix.h +117 -0
- data/vendor/libgit2/deps/pcre/ucp.h +224 -0
- data/vendor/libgit2/deps/winhttp/COPYING.GPL +993 -0
- data/vendor/libgit2/deps/winhttp/COPYING.LGPL +502 -0
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +1 -0
- data/vendor/libgit2/deps/zlib/COPYING +27 -0
- data/vendor/libgit2/deps/zlib/adler32.c +0 -7
- data/vendor/libgit2/deps/zlib/crc32.c +0 -7
- data/vendor/libgit2/include/git2/annotated_commit.h +9 -0
- data/vendor/libgit2/include/git2/apply.h +149 -0
- data/vendor/libgit2/include/git2/attr.h +20 -13
- data/vendor/libgit2/include/git2/blame.h +4 -4
- data/vendor/libgit2/include/git2/blob.h +44 -12
- data/vendor/libgit2/include/git2/buffer.h +20 -26
- data/vendor/libgit2/include/git2/cert.h +135 -0
- data/vendor/libgit2/include/git2/checkout.h +53 -21
- data/vendor/libgit2/include/git2/cherrypick.h +3 -3
- data/vendor/libgit2/include/git2/clone.h +5 -5
- data/vendor/libgit2/include/git2/commit.h +25 -3
- data/vendor/libgit2/include/git2/common.h +35 -10
- data/vendor/libgit2/include/git2/config.h +29 -19
- data/vendor/libgit2/include/git2/cred.h +308 -0
- data/vendor/libgit2/include/git2/deprecated.h +493 -0
- data/vendor/libgit2/include/git2/describe.h +4 -4
- data/vendor/libgit2/include/git2/diff.h +177 -135
- data/vendor/libgit2/include/git2/errors.h +53 -46
- data/vendor/libgit2/include/git2/filter.h +8 -0
- data/vendor/libgit2/include/git2/index.h +74 -52
- data/vendor/libgit2/include/git2/indexer.h +76 -6
- data/vendor/libgit2/include/git2/merge.h +25 -10
- data/vendor/libgit2/include/git2/net.h +0 -5
- data/vendor/libgit2/include/git2/notes.h +1 -1
- data/vendor/libgit2/include/git2/object.h +17 -29
- data/vendor/libgit2/include/git2/odb.h +12 -11
- data/vendor/libgit2/include/git2/odb_backend.h +10 -9
- data/vendor/libgit2/include/git2/oid.h +2 -2
- data/vendor/libgit2/include/git2/pack.h +14 -3
- data/vendor/libgit2/include/git2/proxy.h +5 -3
- data/vendor/libgit2/include/git2/rebase.h +46 -2
- data/vendor/libgit2/include/git2/refs.h +34 -16
- data/vendor/libgit2/include/git2/remote.h +111 -14
- data/vendor/libgit2/include/git2/repository.h +69 -34
- data/vendor/libgit2/include/git2/revert.h +1 -1
- data/vendor/libgit2/include/git2/revwalk.h +7 -7
- data/vendor/libgit2/include/git2/signature.h +2 -2
- data/vendor/libgit2/include/git2/stash.h +5 -5
- data/vendor/libgit2/include/git2/status.h +26 -17
- data/vendor/libgit2/include/git2/submodule.h +23 -6
- data/vendor/libgit2/include/git2/sys/alloc.h +18 -18
- data/vendor/libgit2/include/git2/sys/commit.h +1 -1
- data/vendor/libgit2/include/git2/sys/config.h +13 -13
- data/vendor/libgit2/include/git2/sys/cred.h +90 -0
- data/vendor/libgit2/include/git2/sys/filter.h +6 -6
- data/vendor/libgit2/include/git2/sys/merge.h +3 -3
- data/vendor/libgit2/include/git2/sys/odb_backend.h +66 -22
- data/vendor/libgit2/include/git2/sys/path.h +14 -5
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +76 -40
- data/vendor/libgit2/include/git2/sys/repository.h +5 -1
- data/vendor/libgit2/include/git2/sys/stream.h +92 -12
- data/vendor/libgit2/include/git2/sys/transport.h +129 -83
- data/vendor/libgit2/include/git2/tag.h +13 -4
- data/vendor/libgit2/include/git2/trace.h +2 -2
- data/vendor/libgit2/include/git2/transport.h +11 -311
- data/vendor/libgit2/include/git2/tree.h +4 -4
- data/vendor/libgit2/include/git2/types.h +25 -106
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/include/git2/worktree.h +5 -5
- data/vendor/libgit2/include/git2.h +4 -0
- data/vendor/libgit2/src/CMakeLists.txt +104 -235
- data/vendor/libgit2/src/alloc.c +14 -18
- data/vendor/libgit2/src/{stdalloc.c → allocators/stdalloc.c} +7 -8
- data/vendor/libgit2/src/{stdalloc.h → allocators/stdalloc.h} +4 -4
- data/vendor/libgit2/src/allocators/win32_crtdbg.c +118 -0
- data/vendor/libgit2/src/{transports/cred.h → allocators/win32_crtdbg.h} +5 -4
- data/vendor/libgit2/src/annotated_commit.c +18 -11
- data/vendor/libgit2/src/apply.c +535 -28
- data/vendor/libgit2/src/apply.h +3 -1
- data/vendor/libgit2/src/array.h +2 -2
- data/vendor/libgit2/src/attr.c +77 -71
- data/vendor/libgit2/src/attr_file.c +203 -117
- data/vendor/libgit2/src/attr_file.h +9 -9
- data/vendor/libgit2/src/attrcache.c +49 -51
- data/vendor/libgit2/src/attrcache.h +2 -1
- data/vendor/libgit2/src/blame.c +38 -18
- data/vendor/libgit2/src/blame.h +1 -1
- data/vendor/libgit2/src/blame_git.c +29 -15
- data/vendor/libgit2/src/blob.c +123 -37
- data/vendor/libgit2/src/blob.h +19 -2
- data/vendor/libgit2/src/branch.c +47 -23
- data/vendor/libgit2/src/buf_text.c +7 -6
- data/vendor/libgit2/src/buffer.c +60 -53
- data/vendor/libgit2/src/cache.c +38 -45
- data/vendor/libgit2/src/cache.h +3 -3
- data/vendor/libgit2/src/cc-compat.h +20 -3
- data/vendor/libgit2/src/checkout.c +77 -67
- data/vendor/libgit2/src/cherrypick.c +12 -6
- data/vendor/libgit2/src/clone.c +36 -14
- data/vendor/libgit2/src/clone.h +4 -0
- data/vendor/libgit2/src/commit.c +103 -48
- data/vendor/libgit2/src/commit.h +7 -0
- data/vendor/libgit2/src/commit_list.c +36 -78
- data/vendor/libgit2/src/commit_list.h +2 -2
- data/vendor/libgit2/src/common.h +24 -90
- data/vendor/libgit2/src/config.c +203 -176
- data/vendor/libgit2/src/config.h +8 -20
- data/vendor/libgit2/src/config_backend.h +96 -0
- data/vendor/libgit2/src/config_cache.c +41 -35
- data/vendor/libgit2/src/config_entries.c +229 -0
- data/vendor/libgit2/src/config_entries.h +24 -0
- data/vendor/libgit2/src/config_file.c +422 -680
- data/vendor/libgit2/src/config_mem.c +220 -0
- data/vendor/libgit2/src/config_parse.c +96 -68
- data/vendor/libgit2/src/config_parse.h +15 -14
- data/vendor/libgit2/src/config_snapshot.c +206 -0
- data/vendor/libgit2/src/crlf.c +219 -196
- data/vendor/libgit2/src/delta.c +25 -18
- data/vendor/libgit2/src/describe.c +42 -41
- data/vendor/libgit2/src/diff.c +52 -67
- data/vendor/libgit2/src/diff.h +2 -1
- data/vendor/libgit2/src/diff_driver.c +44 -46
- data/vendor/libgit2/src/diff_file.c +16 -14
- data/vendor/libgit2/src/diff_file.h +1 -1
- data/vendor/libgit2/src/diff_generate.c +158 -103
- data/vendor/libgit2/src/diff_generate.h +3 -3
- data/vendor/libgit2/src/diff_parse.c +4 -4
- data/vendor/libgit2/src/diff_print.c +34 -22
- data/vendor/libgit2/src/diff_stats.c +22 -7
- data/vendor/libgit2/src/diff_tform.c +18 -16
- data/vendor/libgit2/src/diff_xdiff.c +3 -3
- data/vendor/libgit2/src/errors.c +51 -39
- data/vendor/libgit2/src/errors.h +81 -0
- data/vendor/libgit2/src/features.h.in +9 -3
- data/vendor/libgit2/src/fetch.c +8 -3
- data/vendor/libgit2/src/fetchhead.c +12 -12
- data/vendor/libgit2/src/filebuf.c +28 -32
- data/vendor/libgit2/src/filebuf.h +2 -2
- data/vendor/libgit2/src/filter.c +47 -33
- data/vendor/libgit2/src/filter.h +0 -10
- data/vendor/libgit2/src/{fileops.c → futils.c} +70 -63
- data/vendor/libgit2/src/{fileops.h → futils.h} +6 -6
- data/vendor/libgit2/src/global.c +35 -55
- data/vendor/libgit2/src/global.h +0 -2
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +48 -0
- data/vendor/libgit2/src/hash/sha1/collisiondetect.h +19 -0
- data/vendor/libgit2/src/hash/{hash_common_crypto.h → sha1/common_crypto.c} +17 -17
- data/vendor/libgit2/src/hash/sha1/common_crypto.h +19 -0
- data/vendor/libgit2/src/hash/{hash_generic.c → sha1/generic.c} +22 -10
- data/vendor/libgit2/src/hash/{hash_generic.h → sha1/generic.h} +4 -10
- data/vendor/libgit2/src/hash/{hash_mbedtls.c → sha1/mbedtls.c} +15 -7
- data/vendor/libgit2/src/hash/{hash_mbedtls.h → sha1/mbedtls.h} +6 -7
- data/vendor/libgit2/src/hash/sha1/openssl.c +59 -0
- data/vendor/libgit2/src/hash/sha1/openssl.h +19 -0
- data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.c +14 -3
- data/vendor/libgit2/src/hash/{hash_win32.c → sha1/win32.c} +47 -37
- data/vendor/libgit2/src/hash/{hash_win32.h → sha1/win32.h} +6 -19
- data/vendor/libgit2/src/hash/sha1.h +38 -0
- data/vendor/libgit2/src/hash.c +61 -0
- data/vendor/libgit2/src/hash.h +20 -21
- data/vendor/libgit2/src/hashsig.c +5 -5
- data/vendor/libgit2/src/idxmap.c +107 -61
- data/vendor/libgit2/src/idxmap.h +153 -31
- data/vendor/libgit2/src/ignore.c +38 -42
- data/vendor/libgit2/src/index.c +264 -199
- data/vendor/libgit2/src/index.h +7 -1
- data/vendor/libgit2/src/indexer.c +338 -167
- data/vendor/libgit2/src/integer.h +71 -26
- data/vendor/libgit2/src/iterator.c +134 -62
- data/vendor/libgit2/src/iterator.h +15 -0
- data/vendor/libgit2/src/mailmap.c +8 -8
- data/vendor/libgit2/src/map.h +1 -1
- data/vendor/libgit2/src/merge.c +137 -93
- data/vendor/libgit2/src/merge_driver.c +11 -11
- data/vendor/libgit2/src/merge_file.c +2 -2
- data/vendor/libgit2/src/mwindow.c +24 -29
- data/vendor/libgit2/src/mwindow.h +4 -4
- data/vendor/libgit2/src/net.c +184 -0
- data/vendor/libgit2/src/net.h +36 -0
- data/vendor/libgit2/src/netops.c +55 -156
- data/vendor/libgit2/src/netops.h +3 -23
- data/vendor/libgit2/src/notes.c +14 -9
- data/vendor/libgit2/src/object.c +120 -69
- data/vendor/libgit2/src/object.h +22 -9
- data/vendor/libgit2/src/object_api.c +8 -8
- data/vendor/libgit2/src/odb.c +111 -88
- data/vendor/libgit2/src/odb.h +8 -7
- data/vendor/libgit2/src/odb_loose.c +58 -47
- data/vendor/libgit2/src/odb_mempack.c +21 -34
- data/vendor/libgit2/src/odb_pack.c +17 -13
- data/vendor/libgit2/src/offmap.c +53 -35
- data/vendor/libgit2/src/offmap.h +108 -21
- data/vendor/libgit2/src/oid.c +12 -7
- data/vendor/libgit2/src/oidmap.c +49 -47
- data/vendor/libgit2/src/oidmap.h +101 -24
- data/vendor/libgit2/src/pack-objects.c +87 -86
- data/vendor/libgit2/src/pack-objects.h +2 -8
- data/vendor/libgit2/src/pack.c +94 -96
- data/vendor/libgit2/src/pack.h +16 -18
- data/vendor/libgit2/src/parse.c +17 -4
- data/vendor/libgit2/src/parse.h +3 -3
- data/vendor/libgit2/src/patch.c +3 -3
- data/vendor/libgit2/src/patch_generate.c +18 -18
- data/vendor/libgit2/src/patch_parse.c +147 -79
- data/vendor/libgit2/src/path.c +207 -62
- data/vendor/libgit2/src/path.h +14 -0
- data/vendor/libgit2/src/pathspec.c +18 -18
- data/vendor/libgit2/src/pool.c +26 -22
- data/vendor/libgit2/src/pool.h +7 -7
- data/vendor/libgit2/src/posix.c +10 -10
- data/vendor/libgit2/src/posix.h +12 -1
- data/vendor/libgit2/src/proxy.c +8 -3
- data/vendor/libgit2/src/push.c +35 -29
- data/vendor/libgit2/src/push.h +2 -1
- data/vendor/libgit2/src/reader.c +265 -0
- data/vendor/libgit2/src/reader.h +107 -0
- data/vendor/libgit2/src/rebase.c +97 -38
- data/vendor/libgit2/src/refdb.c +15 -3
- data/vendor/libgit2/src/refdb_fs.c +318 -222
- data/vendor/libgit2/src/reflog.c +13 -15
- data/vendor/libgit2/src/refs.c +122 -89
- data/vendor/libgit2/src/refs.h +5 -3
- data/vendor/libgit2/src/refspec.c +27 -33
- data/vendor/libgit2/src/regexp.c +221 -0
- data/vendor/libgit2/src/regexp.h +97 -0
- data/vendor/libgit2/src/remote.c +229 -178
- data/vendor/libgit2/src/remote.h +11 -2
- data/vendor/libgit2/src/repository.c +227 -172
- data/vendor/libgit2/src/repository.h +52 -40
- data/vendor/libgit2/src/reset.c +7 -7
- data/vendor/libgit2/src/revert.c +11 -6
- data/vendor/libgit2/src/revparse.c +46 -46
- data/vendor/libgit2/src/revwalk.c +89 -54
- data/vendor/libgit2/src/revwalk.h +20 -0
- data/vendor/libgit2/src/settings.c +22 -9
- data/vendor/libgit2/src/signature.c +15 -13
- data/vendor/libgit2/src/sortedcache.c +22 -36
- data/vendor/libgit2/src/sortedcache.h +1 -1
- data/vendor/libgit2/src/stash.c +56 -76
- data/vendor/libgit2/src/status.c +27 -21
- data/vendor/libgit2/src/stream.h +17 -2
- data/vendor/libgit2/src/streams/mbedtls.c +100 -80
- data/vendor/libgit2/src/streams/mbedtls.h +5 -2
- data/vendor/libgit2/src/streams/openssl.c +93 -81
- data/vendor/libgit2/src/streams/openssl.h +5 -2
- data/vendor/libgit2/src/streams/registry.c +118 -0
- data/vendor/libgit2/src/streams/registry.h +19 -0
- data/vendor/libgit2/src/streams/socket.c +55 -30
- data/vendor/libgit2/src/streams/stransport.c +57 -32
- data/vendor/libgit2/src/streams/stransport.h +5 -0
- data/vendor/libgit2/src/streams/tls.c +48 -20
- data/vendor/libgit2/src/streams/tls.h +12 -4
- data/vendor/libgit2/src/strmap.c +47 -74
- data/vendor/libgit2/src/strmap.h +108 -33
- data/vendor/libgit2/src/submodule.c +190 -169
- data/vendor/libgit2/src/submodule.h +1 -1
- data/vendor/libgit2/src/sysdir.c +25 -15
- data/vendor/libgit2/src/tag.c +39 -26
- data/vendor/libgit2/src/tag.h +2 -1
- data/vendor/libgit2/src/trace.c +2 -2
- data/vendor/libgit2/src/trace.h +2 -2
- data/vendor/libgit2/src/trailer.c +46 -32
- data/vendor/libgit2/src/transaction.c +30 -29
- data/vendor/libgit2/src/transport.c +3 -3
- data/vendor/libgit2/src/transports/auth.c +14 -10
- data/vendor/libgit2/src/transports/auth.h +10 -3
- data/vendor/libgit2/src/transports/auth_negotiate.c +31 -16
- data/vendor/libgit2/src/transports/auth_negotiate.h +2 -2
- data/vendor/libgit2/src/transports/auth_ntlm.c +223 -0
- data/vendor/libgit2/src/transports/auth_ntlm.h +35 -0
- data/vendor/libgit2/src/transports/cred.c +24 -24
- data/vendor/libgit2/src/transports/git.c +25 -30
- data/vendor/libgit2/src/transports/http.c +871 -335
- data/vendor/libgit2/src/transports/http.h +2 -0
- data/vendor/libgit2/src/transports/local.c +28 -28
- data/vendor/libgit2/src/transports/smart.c +64 -46
- data/vendor/libgit2/src/transports/smart.h +5 -6
- data/vendor/libgit2/src/transports/smart_pkt.c +162 -151
- data/vendor/libgit2/src/transports/smart_protocol.c +64 -94
- data/vendor/libgit2/src/transports/ssh.c +76 -65
- data/vendor/libgit2/src/transports/winhttp.c +328 -319
- data/vendor/libgit2/src/tree-cache.c +21 -14
- data/vendor/libgit2/src/tree.c +119 -112
- data/vendor/libgit2/src/tree.h +1 -0
- data/vendor/libgit2/src/unix/map.c +3 -3
- data/vendor/libgit2/src/unix/posix.h +1 -11
- data/vendor/libgit2/src/userdiff.h +3 -1
- data/vendor/libgit2/src/util.c +154 -93
- data/vendor/libgit2/src/util.h +19 -23
- data/vendor/libgit2/src/vector.c +15 -10
- data/vendor/libgit2/src/wildmatch.c +320 -0
- data/vendor/libgit2/src/wildmatch.h +23 -0
- data/vendor/libgit2/src/win32/dir.c +3 -3
- data/vendor/libgit2/src/win32/findfile.c +1 -1
- data/vendor/libgit2/src/win32/map.c +9 -11
- data/vendor/libgit2/src/win32/msvc-compat.h +6 -0
- data/vendor/libgit2/src/win32/path_w32.c +113 -9
- data/vendor/libgit2/src/win32/path_w32.h +18 -29
- data/vendor/libgit2/src/win32/posix.h +1 -4
- data/vendor/libgit2/src/win32/posix_w32.c +69 -44
- data/vendor/libgit2/src/win32/precompiled.h +0 -2
- data/vendor/libgit2/src/win32/thread.c +5 -10
- data/vendor/libgit2/src/win32/w32_buffer.c +9 -5
- data/vendor/libgit2/src/win32/w32_common.h +39 -0
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +2 -95
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -2
- data/vendor/libgit2/src/win32/w32_stack.c +6 -11
- data/vendor/libgit2/src/win32/w32_stack.h +3 -3
- data/vendor/libgit2/src/win32/w32_util.c +27 -64
- data/vendor/libgit2/src/win32/w32_util.h +5 -49
- data/vendor/libgit2/src/worktree.c +44 -30
- data/vendor/libgit2/src/xdiff/xdiffi.c +5 -5
- data/vendor/libgit2/src/xdiff/xhistogram.c +1 -1
- data/vendor/libgit2/src/xdiff/xmerge.c +27 -15
- data/vendor/libgit2/src/xdiff/xpatience.c +3 -0
- data/vendor/libgit2/src/zstream.c +4 -4
- metadata +115 -38
- data/vendor/libgit2/deps/regex/CMakeLists.txt +0 -2
- data/vendor/libgit2/deps/regex/config.h +0 -7
- data/vendor/libgit2/deps/regex/regcomp.c +0 -3857
- data/vendor/libgit2/deps/regex/regex.c +0 -92
- data/vendor/libgit2/deps/regex/regex.h +0 -582
- data/vendor/libgit2/deps/regex/regex_internal.c +0 -1744
- data/vendor/libgit2/deps/regex/regex_internal.h +0 -819
- data/vendor/libgit2/deps/regex/regexec.c +0 -4369
- data/vendor/libgit2/include/git2/inttypes.h +0 -309
- data/vendor/libgit2/include/git2/sys/time.h +0 -31
- data/vendor/libgit2/libgit2.pc.in +0 -13
- data/vendor/libgit2/src/config_file.h +0 -73
- data/vendor/libgit2/src/fnmatch.c +0 -248
- data/vendor/libgit2/src/fnmatch.h +0 -48
- data/vendor/libgit2/src/hash/hash_collisiondetect.h +0 -47
- data/vendor/libgit2/src/hash/hash_openssl.h +0 -59
- data/vendor/libgit2/src/streams/curl.c +0 -385
- data/vendor/libgit2/src/streams/curl.h +0 -17
- /data/vendor/libgit2/deps/http-parser/{LICENSE-MIT → COPYING} +0 -0
- /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.h +0 -0
- /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.c +0 -0
- /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.h +0 -0
data/vendor/libgit2/src/path.c
CHANGED
|
@@ -14,13 +14,36 @@
|
|
|
14
14
|
#include "win32/w32_buffer.h"
|
|
15
15
|
#include "win32/w32_util.h"
|
|
16
16
|
#include "win32/version.h"
|
|
17
|
+
#include <aclapi.h>
|
|
17
18
|
#else
|
|
18
19
|
#include <dirent.h>
|
|
19
20
|
#endif
|
|
20
21
|
#include <stdio.h>
|
|
21
22
|
#include <ctype.h>
|
|
22
23
|
|
|
23
|
-
|
|
24
|
+
static int dos_drive_prefix_length(const char *path)
|
|
25
|
+
{
|
|
26
|
+
int i;
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
* Does it start with an ASCII letter (i.e. highest bit not set),
|
|
30
|
+
* followed by a colon?
|
|
31
|
+
*/
|
|
32
|
+
if (!(0x80 & (unsigned char)*path))
|
|
33
|
+
return *path && path[1] == ':' ? 2 : 0;
|
|
34
|
+
|
|
35
|
+
/*
|
|
36
|
+
* While drive letters must be letters of the English alphabet, it is
|
|
37
|
+
* possible to assign virtually _any_ Unicode character via `subst` as
|
|
38
|
+
* a drive letter to "virtual drives". Even `1`, or `ä`. Or fun stuff
|
|
39
|
+
* like this:
|
|
40
|
+
*
|
|
41
|
+
* subst ֍: %USERPROFILE%\Desktop
|
|
42
|
+
*/
|
|
43
|
+
for (i = 1; i < 4 && (0x80 & (unsigned char)path[i]); i++)
|
|
44
|
+
; /* skip first UTF-8 character */
|
|
45
|
+
return path[i] == ':' ? i + 1 : 0;
|
|
46
|
+
}
|
|
24
47
|
|
|
25
48
|
#ifdef GIT_WIN32
|
|
26
49
|
static bool looks_like_network_computer_name(const char *path, int pos)
|
|
@@ -122,11 +145,11 @@ static int win32_prefix_length(const char *path, int len)
|
|
|
122
145
|
GIT_UNUSED(len);
|
|
123
146
|
#else
|
|
124
147
|
/*
|
|
125
|
-
* Mimic unix behavior where '/.git' returns '/': 'C:/.git'
|
|
126
|
-
* 'C:/' here
|
|
148
|
+
* Mimic unix behavior where '/.git' returns '/': 'C:/.git'
|
|
149
|
+
* will return 'C:/' here
|
|
127
150
|
*/
|
|
128
|
-
if (
|
|
129
|
-
return
|
|
151
|
+
if (dos_drive_prefix_length(path) == len)
|
|
152
|
+
return len;
|
|
130
153
|
|
|
131
154
|
/*
|
|
132
155
|
* Similarly checks if we're dealing with a network computer name
|
|
@@ -160,7 +183,13 @@ int git_path_dirname_r(git_buf *buffer, const char *path)
|
|
|
160
183
|
while (endp > path && *endp == '/')
|
|
161
184
|
endp--;
|
|
162
185
|
|
|
163
|
-
if (
|
|
186
|
+
if (endp - path + 1 > INT_MAX) {
|
|
187
|
+
git_error_set(GIT_ERROR_INVALID, "path too long");
|
|
188
|
+
len = -1;
|
|
189
|
+
goto Exit;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if ((len = win32_prefix_length(path, (int)(endp - path + 1))) > 0) {
|
|
164
193
|
is_prefix = 1;
|
|
165
194
|
goto Exit;
|
|
166
195
|
}
|
|
@@ -180,7 +209,13 @@ int git_path_dirname_r(git_buf *buffer, const char *path)
|
|
|
180
209
|
endp--;
|
|
181
210
|
} while (endp > path && *endp == '/');
|
|
182
211
|
|
|
183
|
-
if (
|
|
212
|
+
if (endp - path + 1 > INT_MAX) {
|
|
213
|
+
git_error_set(GIT_ERROR_INVALID, "path too long");
|
|
214
|
+
len = -1;
|
|
215
|
+
goto Exit;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
if ((len = win32_prefix_length(path, (int)(endp - path + 1))) > 0) {
|
|
184
219
|
is_prefix = 1;
|
|
185
220
|
goto Exit;
|
|
186
221
|
}
|
|
@@ -259,11 +294,11 @@ const char *git_path_topdir(const char *path)
|
|
|
259
294
|
|
|
260
295
|
int git_path_root(const char *path)
|
|
261
296
|
{
|
|
262
|
-
int offset = 0;
|
|
297
|
+
int offset = 0, prefix_len;
|
|
263
298
|
|
|
264
299
|
/* Does the root of the path look like a windows drive ? */
|
|
265
|
-
if (
|
|
266
|
-
offset +=
|
|
300
|
+
if ((prefix_len = dos_drive_prefix_length(path)))
|
|
301
|
+
offset += prefix_len;
|
|
267
302
|
|
|
268
303
|
#ifdef GIT_WIN32
|
|
269
304
|
/* Are we dealing with a windows network path? */
|
|
@@ -276,9 +311,12 @@ int git_path_root(const char *path)
|
|
|
276
311
|
while (path[offset] && path[offset] != '/' && path[offset] != '\\')
|
|
277
312
|
offset++;
|
|
278
313
|
}
|
|
314
|
+
|
|
315
|
+
if (path[offset] == '\\')
|
|
316
|
+
return offset;
|
|
279
317
|
#endif
|
|
280
318
|
|
|
281
|
-
if (path[offset] == '/'
|
|
319
|
+
if (path[offset] == '/')
|
|
282
320
|
return offset;
|
|
283
321
|
|
|
284
322
|
return -1; /* Not a real error - signals that path is not rooted */
|
|
@@ -361,9 +399,9 @@ int git_path_prettify(git_buf *path_out, const char *path, const char *base)
|
|
|
361
399
|
}
|
|
362
400
|
|
|
363
401
|
if (p_realpath(path, buf) == NULL) {
|
|
364
|
-
/*
|
|
402
|
+
/* git_error_set resets the errno when dealing with a GIT_ERROR_OS kind of error */
|
|
365
403
|
int error = (errno == ENOENT || errno == ENOTDIR) ? GIT_ENOTFOUND : -1;
|
|
366
|
-
|
|
404
|
+
git_error_set(GIT_ERROR_OS, "failed to resolve path '%s'", path);
|
|
367
405
|
|
|
368
406
|
git_buf_clear(path_out);
|
|
369
407
|
|
|
@@ -436,7 +474,7 @@ append:
|
|
|
436
474
|
|
|
437
475
|
static int error_invalid_local_file_uri(const char *uri)
|
|
438
476
|
{
|
|
439
|
-
|
|
477
|
+
git_error_set(GIT_ERROR_CONFIG, "'%s' is not a valid local file URI", uri);
|
|
440
478
|
return -1;
|
|
441
479
|
}
|
|
442
480
|
|
|
@@ -502,7 +540,7 @@ int git_path_walk_up(
|
|
|
502
540
|
if (!scan) {
|
|
503
541
|
error = cb(data, "");
|
|
504
542
|
if (error)
|
|
505
|
-
|
|
543
|
+
git_error_set_after_callback(error);
|
|
506
544
|
return error;
|
|
507
545
|
}
|
|
508
546
|
|
|
@@ -515,7 +553,7 @@ int git_path_walk_up(
|
|
|
515
553
|
iter.ptr[scan] = oldc;
|
|
516
554
|
|
|
517
555
|
if (error) {
|
|
518
|
-
|
|
556
|
+
git_error_set_after_callback(error);
|
|
519
557
|
break;
|
|
520
558
|
}
|
|
521
559
|
|
|
@@ -535,7 +573,7 @@ int git_path_walk_up(
|
|
|
535
573
|
if (!error && stop == 0 && iter.ptr[0] != '/') {
|
|
536
574
|
error = cb(data, "");
|
|
537
575
|
if (error)
|
|
538
|
-
|
|
576
|
+
git_error_set_after_callback(error);
|
|
539
577
|
}
|
|
540
578
|
|
|
541
579
|
return error;
|
|
@@ -638,7 +676,7 @@ bool git_path_is_empty_dir(const char *path)
|
|
|
638
676
|
return false;
|
|
639
677
|
|
|
640
678
|
if ((error = git_buf_sets(&dir, path)) != 0)
|
|
641
|
-
|
|
679
|
+
git_error_clear();
|
|
642
680
|
else
|
|
643
681
|
error = git_path_direach(&dir, 0, path_found_entry, NULL);
|
|
644
682
|
|
|
@@ -654,24 +692,24 @@ int git_path_set_error(int errno_value, const char *path, const char *action)
|
|
|
654
692
|
switch (errno_value) {
|
|
655
693
|
case ENOENT:
|
|
656
694
|
case ENOTDIR:
|
|
657
|
-
|
|
695
|
+
git_error_set(GIT_ERROR_OS, "could not find '%s' to %s", path, action);
|
|
658
696
|
return GIT_ENOTFOUND;
|
|
659
697
|
|
|
660
698
|
case EINVAL:
|
|
661
699
|
case ENAMETOOLONG:
|
|
662
|
-
|
|
700
|
+
git_error_set(GIT_ERROR_OS, "invalid path for filesystem '%s'", path);
|
|
663
701
|
return GIT_EINVALIDSPEC;
|
|
664
702
|
|
|
665
703
|
case EEXIST:
|
|
666
|
-
|
|
704
|
+
git_error_set(GIT_ERROR_OS, "failed %s - '%s' already exists", action, path);
|
|
667
705
|
return GIT_EEXISTS;
|
|
668
706
|
|
|
669
707
|
case EACCES:
|
|
670
|
-
|
|
708
|
+
git_error_set(GIT_ERROR_OS, "failed %s - '%s' is locked", action, path);
|
|
671
709
|
return GIT_ELOCKED;
|
|
672
710
|
|
|
673
711
|
default:
|
|
674
|
-
|
|
712
|
+
git_error_set(GIT_ERROR_OS, "could not %s '%s'", action, path);
|
|
675
713
|
return -1;
|
|
676
714
|
}
|
|
677
715
|
}
|
|
@@ -751,7 +789,7 @@ int git_path_resolve_relative(git_buf *path, size_t ceiling)
|
|
|
751
789
|
char *base, *to, *from, *next;
|
|
752
790
|
size_t len;
|
|
753
791
|
|
|
754
|
-
|
|
792
|
+
GIT_ERROR_CHECK_ALLOC_BUF(path);
|
|
755
793
|
|
|
756
794
|
if (ceiling > path->size)
|
|
757
795
|
ceiling = path->size;
|
|
@@ -780,7 +818,7 @@ int git_path_resolve_relative(git_buf *path, size_t ceiling)
|
|
|
780
818
|
else if (len == 2 && from[0] == '.' && from[1] == '.') {
|
|
781
819
|
/* error out if trying to up one from a hard base */
|
|
782
820
|
if (to == base && ceiling != 0) {
|
|
783
|
-
|
|
821
|
+
git_error_set(GIT_ERROR_INVALID,
|
|
784
822
|
"cannot strip root component off url");
|
|
785
823
|
return -1;
|
|
786
824
|
}
|
|
@@ -887,7 +925,7 @@ int git_path_make_relative(git_buf *path, const char *parent)
|
|
|
887
925
|
/* need at least 1 common path segment */
|
|
888
926
|
if ((p_dirsep == path->ptr || q_dirsep == parent) &&
|
|
889
927
|
(*p_dirsep != '/' || *q_dirsep != '/')) {
|
|
890
|
-
|
|
928
|
+
git_error_set(GIT_ERROR_INVALID,
|
|
891
929
|
"%s is not a parent of %s", parent, path->ptr);
|
|
892
930
|
return GIT_ENOTFOUND;
|
|
893
931
|
}
|
|
@@ -911,10 +949,10 @@ int git_path_make_relative(git_buf *path, const char *parent)
|
|
|
911
949
|
for (; (q = strchr(q, '/')) && *(q + 1); q++)
|
|
912
950
|
depth++;
|
|
913
951
|
|
|
914
|
-
|
|
915
|
-
|
|
952
|
+
GIT_ERROR_CHECK_ALLOC_MULTIPLY(&newlen, depth, 3);
|
|
953
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&newlen, newlen, plen);
|
|
916
954
|
|
|
917
|
-
|
|
955
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&alloclen, newlen, 1);
|
|
918
956
|
|
|
919
957
|
/* save the offset as we might realllocate the pointer */
|
|
920
958
|
offset = p - path->ptr;
|
|
@@ -973,7 +1011,7 @@ int git_path_iconv(git_path_iconv_t *ic, const char **in, size_t *inlen)
|
|
|
973
1011
|
git_buf_clear(&ic->buf);
|
|
974
1012
|
|
|
975
1013
|
while (1) {
|
|
976
|
-
|
|
1014
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&alloclen, wantlen, 1);
|
|
977
1015
|
if (git_buf_grow(&ic->buf, alloclen) < 0)
|
|
978
1016
|
return -1;
|
|
979
1017
|
|
|
@@ -1010,7 +1048,7 @@ int git_path_iconv(git_path_iconv_t *ic, const char **in, size_t *inlen)
|
|
|
1010
1048
|
return 0;
|
|
1011
1049
|
|
|
1012
1050
|
fail:
|
|
1013
|
-
|
|
1051
|
+
git_error_set(GIT_ERROR_OS, "unable to convert unicode path data");
|
|
1014
1052
|
return -1;
|
|
1015
1053
|
}
|
|
1016
1054
|
|
|
@@ -1103,7 +1141,7 @@ int git_path_direach(
|
|
|
1103
1141
|
wd_len = git_buf_len(path);
|
|
1104
1142
|
|
|
1105
1143
|
if ((dir = opendir(path->ptr)) == NULL) {
|
|
1106
|
-
|
|
1144
|
+
git_error_set(GIT_ERROR_OS, "failed to open directory '%s'", path->ptr);
|
|
1107
1145
|
if (errno == ENOENT)
|
|
1108
1146
|
return GIT_ENOTFOUND;
|
|
1109
1147
|
|
|
@@ -1130,15 +1168,15 @@ int git_path_direach(
|
|
|
1130
1168
|
if ((error = git_buf_put(path, de_path, de_len)) < 0)
|
|
1131
1169
|
break;
|
|
1132
1170
|
|
|
1133
|
-
|
|
1171
|
+
git_error_clear();
|
|
1134
1172
|
error = fn(arg, path);
|
|
1135
1173
|
|
|
1136
1174
|
git_buf_truncate(path, wd_len); /* restore path */
|
|
1137
1175
|
|
|
1138
1176
|
/* Only set our own error if the callback did not set one already */
|
|
1139
1177
|
if (error != 0) {
|
|
1140
|
-
if (!
|
|
1141
|
-
|
|
1178
|
+
if (!git_error_last())
|
|
1179
|
+
git_error_set_after_callback(error);
|
|
1142
1180
|
|
|
1143
1181
|
break;
|
|
1144
1182
|
}
|
|
@@ -1184,13 +1222,13 @@ int git_path_diriter_init(
|
|
|
1184
1222
|
git_path_trim_slashes(&diriter->path_utf8);
|
|
1185
1223
|
|
|
1186
1224
|
if (diriter->path_utf8.size == 0) {
|
|
1187
|
-
|
|
1225
|
+
git_error_set(GIT_ERROR_FILESYSTEM, "could not open directory '%s'", path);
|
|
1188
1226
|
return -1;
|
|
1189
1227
|
}
|
|
1190
1228
|
|
|
1191
1229
|
if ((diriter->parent_len = git_win32_path_from_utf8(diriter->path, diriter->path_utf8.ptr)) < 0 ||
|
|
1192
1230
|
!git_win32__findfirstfile_filter(path_filter, diriter->path_utf8.ptr)) {
|
|
1193
|
-
|
|
1231
|
+
git_error_set(GIT_ERROR_OS, "could not parse the directory path '%s'", path);
|
|
1194
1232
|
return -1;
|
|
1195
1233
|
}
|
|
1196
1234
|
|
|
@@ -1203,7 +1241,7 @@ int git_path_diriter_init(
|
|
|
1203
1241
|
is_win7_or_later ? FIND_FIRST_EX_LARGE_FETCH : 0);
|
|
1204
1242
|
|
|
1205
1243
|
if (diriter->handle == INVALID_HANDLE_VALUE) {
|
|
1206
|
-
|
|
1244
|
+
git_error_set(GIT_ERROR_OS, "could not open directory '%s'", path);
|
|
1207
1245
|
return -1;
|
|
1208
1246
|
}
|
|
1209
1247
|
|
|
@@ -1223,7 +1261,7 @@ static int diriter_update_paths(git_path_diriter *diriter)
|
|
|
1223
1261
|
return -1;
|
|
1224
1262
|
|
|
1225
1263
|
if (path_len > GIT_WIN_PATH_UTF16) {
|
|
1226
|
-
|
|
1264
|
+
git_error_set(GIT_ERROR_FILESYSTEM,
|
|
1227
1265
|
"invalid path '%.*ls\\%ls' (path too long)",
|
|
1228
1266
|
diriter->parent_len, diriter->path, diriter->current.cFileName);
|
|
1229
1267
|
return -1;
|
|
@@ -1333,14 +1371,14 @@ int git_path_diriter_init(
|
|
|
1333
1371
|
git_path_trim_slashes(&diriter->path);
|
|
1334
1372
|
|
|
1335
1373
|
if (diriter->path.size == 0) {
|
|
1336
|
-
|
|
1374
|
+
git_error_set(GIT_ERROR_FILESYSTEM, "could not open directory '%s'", path);
|
|
1337
1375
|
return -1;
|
|
1338
1376
|
}
|
|
1339
1377
|
|
|
1340
1378
|
if ((diriter->dir = opendir(diriter->path.ptr)) == NULL) {
|
|
1341
1379
|
git_buf_dispose(&diriter->path);
|
|
1342
1380
|
|
|
1343
|
-
|
|
1381
|
+
git_error_set(GIT_ERROR_OS, "failed to open directory '%s'", path);
|
|
1344
1382
|
return -1;
|
|
1345
1383
|
}
|
|
1346
1384
|
|
|
@@ -1372,7 +1410,7 @@ int git_path_diriter_next(git_path_diriter *diriter)
|
|
|
1372
1410
|
if (!errno)
|
|
1373
1411
|
return GIT_ITEROVER;
|
|
1374
1412
|
|
|
1375
|
-
|
|
1413
|
+
git_error_set(GIT_ERROR_OS,
|
|
1376
1414
|
"could not read directory '%s'", diriter->path.ptr);
|
|
1377
1415
|
return -1;
|
|
1378
1416
|
}
|
|
@@ -1477,7 +1515,7 @@ int git_path_dirload(
|
|
|
1477
1515
|
assert(name_len > prefix_len);
|
|
1478
1516
|
|
|
1479
1517
|
dup = git__strndup(name + prefix_len, name_len - prefix_len);
|
|
1480
|
-
|
|
1518
|
+
GIT_ERROR_CHECK_ALLOC(dup);
|
|
1481
1519
|
|
|
1482
1520
|
if ((error = git_vector_insert(contents, dup)) < 0)
|
|
1483
1521
|
break;
|
|
@@ -1608,8 +1646,12 @@ GIT_INLINE(bool) verify_dotgit_ntfs(git_repository *repo, const char *path, size
|
|
|
1608
1646
|
if (!start)
|
|
1609
1647
|
return true;
|
|
1610
1648
|
|
|
1611
|
-
/*
|
|
1612
|
-
|
|
1649
|
+
/*
|
|
1650
|
+
* Reject paths that start with Windows-style directory separators
|
|
1651
|
+
* (".git\") or NTFS alternate streams (".git:") and could be used
|
|
1652
|
+
* to write to the ".git" directory on Windows platforms.
|
|
1653
|
+
*/
|
|
1654
|
+
if (path[start] == '\\' || path[start] == ':')
|
|
1613
1655
|
return false;
|
|
1614
1656
|
|
|
1615
1657
|
/* Reject paths like '.git ' or '.git.' */
|
|
@@ -1621,12 +1663,21 @@ GIT_INLINE(bool) verify_dotgit_ntfs(git_repository *repo, const char *path, size
|
|
|
1621
1663
|
return false;
|
|
1622
1664
|
}
|
|
1623
1665
|
|
|
1624
|
-
|
|
1666
|
+
/*
|
|
1667
|
+
* Windows paths that end with spaces and/or dots are elided to the
|
|
1668
|
+
* path without them for backward compatibility. That is to say
|
|
1669
|
+
* that opening file "foo ", "foo." or even "foo . . ." will all
|
|
1670
|
+
* map to a filename of "foo". This function identifies spaces and
|
|
1671
|
+
* dots at the end of a filename, whether the proper end of the
|
|
1672
|
+
* filename (end of string) or a colon (which would indicate a
|
|
1673
|
+
* Windows alternate data stream.)
|
|
1674
|
+
*/
|
|
1675
|
+
GIT_INLINE(bool) ntfs_end_of_filename(const char *path)
|
|
1625
1676
|
{
|
|
1626
1677
|
const char *c = path;
|
|
1627
1678
|
|
|
1628
1679
|
for (;; c++) {
|
|
1629
|
-
if (*c == '\0')
|
|
1680
|
+
if (*c == '\0' || *c == ':')
|
|
1630
1681
|
return true;
|
|
1631
1682
|
if (*c != ' ' && *c != '.')
|
|
1632
1683
|
return false;
|
|
@@ -1641,13 +1692,13 @@ GIT_INLINE(bool) verify_dotgit_ntfs_generic(const char *name, size_t len, const
|
|
|
1641
1692
|
|
|
1642
1693
|
if (name[0] == '.' && len >= dotgit_len &&
|
|
1643
1694
|
!strncasecmp(name + 1, dotgit_name, dotgit_len)) {
|
|
1644
|
-
return !
|
|
1695
|
+
return !ntfs_end_of_filename(name + dotgit_len + 1);
|
|
1645
1696
|
}
|
|
1646
1697
|
|
|
1647
1698
|
/* Detect the basic NTFS shortname with the first six chars */
|
|
1648
1699
|
if (!strncasecmp(name, dotgit_name, 6) && name[6] == '~' &&
|
|
1649
1700
|
name[7] >= '1' && name[7] <= '4')
|
|
1650
|
-
return !
|
|
1701
|
+
return !ntfs_end_of_filename(name + 8);
|
|
1651
1702
|
|
|
1652
1703
|
/* Catch fallback names */
|
|
1653
1704
|
for (i = 0, saw_tilde = 0; i < 8; i++) {
|
|
@@ -1662,14 +1713,14 @@ GIT_INLINE(bool) verify_dotgit_ntfs_generic(const char *name, size_t len, const
|
|
|
1662
1713
|
saw_tilde = 1;
|
|
1663
1714
|
} else if (i >= 6) {
|
|
1664
1715
|
return true;
|
|
1665
|
-
} else if (name[i]
|
|
1716
|
+
} else if ((unsigned char)name[i] > 127) {
|
|
1666
1717
|
return true;
|
|
1667
1718
|
} else if (git__tolower(name[i]) != shortname_pfix[i]) {
|
|
1668
1719
|
return true;
|
|
1669
1720
|
}
|
|
1670
1721
|
}
|
|
1671
1722
|
|
|
1672
|
-
return !
|
|
1723
|
+
return !ntfs_end_of_filename(name + i);
|
|
1673
1724
|
}
|
|
1674
1725
|
|
|
1675
1726
|
GIT_INLINE(bool) verify_char(unsigned char c, unsigned int flags)
|
|
@@ -1803,7 +1854,7 @@ GIT_INLINE(unsigned int) dotgit_flags(
|
|
|
1803
1854
|
git_repository *repo,
|
|
1804
1855
|
unsigned int flags)
|
|
1805
1856
|
{
|
|
1806
|
-
int protectHFS = 0, protectNTFS =
|
|
1857
|
+
int protectHFS = 0, protectNTFS = 1;
|
|
1807
1858
|
int error = 0;
|
|
1808
1859
|
|
|
1809
1860
|
flags |= GIT_PATH_REJECT_DOT_GIT_LITERAL;
|
|
@@ -1812,17 +1863,13 @@ GIT_INLINE(unsigned int) dotgit_flags(
|
|
|
1812
1863
|
protectHFS = 1;
|
|
1813
1864
|
#endif
|
|
1814
1865
|
|
|
1815
|
-
#ifdef GIT_WIN32
|
|
1816
|
-
protectNTFS = 1;
|
|
1817
|
-
#endif
|
|
1818
|
-
|
|
1819
1866
|
if (repo && !protectHFS)
|
|
1820
|
-
error =
|
|
1867
|
+
error = git_repository__configmap_lookup(&protectHFS, repo, GIT_CONFIGMAP_PROTECTHFS);
|
|
1821
1868
|
if (!error && protectHFS)
|
|
1822
1869
|
flags |= GIT_PATH_REJECT_DOT_GIT_HFS;
|
|
1823
1870
|
|
|
1824
|
-
if (repo
|
|
1825
|
-
error =
|
|
1871
|
+
if (repo)
|
|
1872
|
+
error = git_repository__configmap_lookup(&protectNTFS, repo, GIT_CONFIGMAP_PROTECTNTFS);
|
|
1826
1873
|
if (!error && protectNTFS)
|
|
1827
1874
|
flags |= GIT_PATH_REJECT_DOT_GIT_NTFS;
|
|
1828
1875
|
|
|
@@ -1887,8 +1934,8 @@ extern int git_path_is_gitfile(const char *path, size_t pathlen, git_path_gitfil
|
|
|
1887
1934
|
const char *file, *hash;
|
|
1888
1935
|
size_t filelen;
|
|
1889
1936
|
|
|
1890
|
-
if (gitfile
|
|
1891
|
-
|
|
1937
|
+
if (!(gitfile >= GIT_PATH_GITFILE_GITIGNORE && gitfile < ARRAY_SIZE(gitfiles))) {
|
|
1938
|
+
git_error_set(GIT_ERROR_OS, "invalid gitfile for path validation");
|
|
1892
1939
|
return -1;
|
|
1893
1940
|
}
|
|
1894
1941
|
|
|
@@ -1905,7 +1952,105 @@ extern int git_path_is_gitfile(const char *path, size_t pathlen, git_path_gitfil
|
|
|
1905
1952
|
case GIT_PATH_FS_HFS:
|
|
1906
1953
|
return !verify_dotgit_hfs_generic(path, pathlen, file, filelen);
|
|
1907
1954
|
default:
|
|
1908
|
-
|
|
1955
|
+
git_error_set(GIT_ERROR_OS, "invalid filesystem for path validation");
|
|
1956
|
+
return -1;
|
|
1957
|
+
}
|
|
1958
|
+
}
|
|
1959
|
+
|
|
1960
|
+
bool git_path_supports_symlinks(const char *dir)
|
|
1961
|
+
{
|
|
1962
|
+
git_buf path = GIT_BUF_INIT;
|
|
1963
|
+
bool supported = false;
|
|
1964
|
+
struct stat st;
|
|
1965
|
+
int fd;
|
|
1966
|
+
|
|
1967
|
+
if ((fd = git_futils_mktmp(&path, dir, 0666)) < 0 ||
|
|
1968
|
+
p_close(fd) < 0 ||
|
|
1969
|
+
p_unlink(path.ptr) < 0 ||
|
|
1970
|
+
p_symlink("testing", path.ptr) < 0 ||
|
|
1971
|
+
p_lstat(path.ptr, &st) < 0)
|
|
1972
|
+
goto done;
|
|
1973
|
+
|
|
1974
|
+
supported = (S_ISLNK(st.st_mode) != 0);
|
|
1975
|
+
done:
|
|
1976
|
+
if (path.size)
|
|
1977
|
+
(void)p_unlink(path.ptr);
|
|
1978
|
+
git_buf_dispose(&path);
|
|
1979
|
+
return supported;
|
|
1980
|
+
}
|
|
1981
|
+
|
|
1982
|
+
int git_path_validate_system_file_ownership(const char *path)
|
|
1983
|
+
{
|
|
1984
|
+
#ifndef GIT_WIN32
|
|
1985
|
+
GIT_UNUSED(path);
|
|
1986
|
+
return GIT_OK;
|
|
1987
|
+
#else
|
|
1988
|
+
git_win32_path buf;
|
|
1989
|
+
PSID owner_sid;
|
|
1990
|
+
PSECURITY_DESCRIPTOR descriptor = NULL;
|
|
1991
|
+
HANDLE token;
|
|
1992
|
+
TOKEN_USER *info = NULL;
|
|
1993
|
+
DWORD err, len;
|
|
1994
|
+
int ret;
|
|
1995
|
+
|
|
1996
|
+
if (git_win32_path_from_utf8(buf, path) < 0)
|
|
1909
1997
|
return -1;
|
|
1998
|
+
|
|
1999
|
+
err = GetNamedSecurityInfoW(buf, SE_FILE_OBJECT,
|
|
2000
|
+
OWNER_SECURITY_INFORMATION |
|
|
2001
|
+
DACL_SECURITY_INFORMATION,
|
|
2002
|
+
&owner_sid, NULL, NULL, NULL, &descriptor);
|
|
2003
|
+
|
|
2004
|
+
if (err == ERROR_FILE_NOT_FOUND || err == ERROR_PATH_NOT_FOUND) {
|
|
2005
|
+
ret = GIT_ENOTFOUND;
|
|
2006
|
+
goto cleanup;
|
|
2007
|
+
}
|
|
2008
|
+
|
|
2009
|
+
if (err != ERROR_SUCCESS) {
|
|
2010
|
+
git_error_set(GIT_ERROR_OS, "failed to get security information");
|
|
2011
|
+
ret = GIT_ERROR;
|
|
2012
|
+
goto cleanup;
|
|
2013
|
+
}
|
|
2014
|
+
|
|
2015
|
+
if (!IsValidSid(owner_sid)) {
|
|
2016
|
+
git_error_set(GIT_ERROR_INVALID, "programdata configuration file owner is unknown");
|
|
2017
|
+
ret = GIT_ERROR;
|
|
2018
|
+
goto cleanup;
|
|
2019
|
+
}
|
|
2020
|
+
|
|
2021
|
+
if (IsWellKnownSid(owner_sid, WinBuiltinAdministratorsSid) ||
|
|
2022
|
+
IsWellKnownSid(owner_sid, WinLocalSystemSid)) {
|
|
2023
|
+
ret = GIT_OK;
|
|
2024
|
+
goto cleanup;
|
|
2025
|
+
}
|
|
2026
|
+
|
|
2027
|
+
/* Obtain current user's SID */
|
|
2028
|
+
if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token) &&
|
|
2029
|
+
!GetTokenInformation(token, TokenUser, NULL, 0, &len)) {
|
|
2030
|
+
info = git__malloc(len);
|
|
2031
|
+
GIT_ERROR_CHECK_ALLOC(info);
|
|
2032
|
+
if (!GetTokenInformation(token, TokenUser, info, len, &len)) {
|
|
2033
|
+
git__free(info);
|
|
2034
|
+
info = NULL;
|
|
2035
|
+
}
|
|
1910
2036
|
}
|
|
2037
|
+
|
|
2038
|
+
/*
|
|
2039
|
+
* If the file is owned by the same account that is running the current
|
|
2040
|
+
* process, it's okay to read from that file.
|
|
2041
|
+
*/
|
|
2042
|
+
if (info && EqualSid(owner_sid, info->User.Sid))
|
|
2043
|
+
ret = GIT_OK;
|
|
2044
|
+
else {
|
|
2045
|
+
git_error_set(GIT_ERROR_INVALID, "programdata configuration file owner is not valid");
|
|
2046
|
+
ret = GIT_ERROR;
|
|
2047
|
+
}
|
|
2048
|
+
free(info);
|
|
2049
|
+
|
|
2050
|
+
cleanup:
|
|
2051
|
+
if (descriptor)
|
|
2052
|
+
LocalFree(descriptor);
|
|
2053
|
+
|
|
2054
|
+
return ret;
|
|
2055
|
+
#endif
|
|
1911
2056
|
}
|
data/vendor/libgit2/src/path.h
CHANGED
|
@@ -647,4 +647,18 @@ extern bool git_path_isvalid(
|
|
|
647
647
|
*/
|
|
648
648
|
int git_path_normalize_slashes(git_buf *out, const char *path);
|
|
649
649
|
|
|
650
|
+
bool git_path_supports_symlinks(const char *dir);
|
|
651
|
+
|
|
652
|
+
/**
|
|
653
|
+
* Validate a system file's ownership
|
|
654
|
+
*
|
|
655
|
+
* Verify that the file in question is owned by an administrator or system
|
|
656
|
+
* account, or at least by the current user.
|
|
657
|
+
*
|
|
658
|
+
* This function returns 0 if successful. If the file is not owned by any of
|
|
659
|
+
* these, or any other if there have been problems determining the file
|
|
660
|
+
* ownership, it returns -1.
|
|
661
|
+
*/
|
|
662
|
+
int git_path_validate_system_file_ownership(const char *path);
|
|
663
|
+
|
|
650
664
|
#endif
|