diff options
| author | Patrick Steinhardt <ps@pks.im> | 2017-07-10 12:25:43 +0200 |
|---|---|---|
| committer | Patrick Steinhardt <ps@pks.im> | 2017-08-25 18:15:12 +0200 |
| commit | 477b3e047426d7ccddb6028416ff0fcc2541a0fd (patch) | |
| tree | 2385384349066ce5dd5b3fcc41164d9af8825983 /src/submodule.c | |
| parent | a889c05f2abfec5e45fa50faf7307c06c7c9b25b (diff) | |
| download | libgit2-477b3e047426d7ccddb6028416ff0fcc2541a0fd.tar.gz | |
submodule: refuse lookup in bare repositories
While it is technically possible to look up submodules inside of a
bare repository by reading the submodule configuration of a specific
commit, we do not offer this functionality right now. As such, calling
both `git_submodule_lookup` and `git_submodule_foreach` should error out
early when these functions encounter a bare repository. While
`git_submodule_lookup` already does return an error due to not being
able to parse the configuration, `git_submodule_foreach` simply returns
success and never invokes the callback function.
Fix the issue by having both functions check whether the repository is
bare and returning an error in that case.
Diffstat (limited to 'src/submodule.c')
| -rw-r--r-- | src/submodule.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/submodule.c b/src/submodule.c index 0b97a59f6..6c3e5f6bd 100644 --- a/src/submodule.c +++ b/src/submodule.c @@ -209,6 +209,11 @@ int git_submodule_lookup( assert(repo && name); + if (repo->is_bare) { + giterr_set(GITERR_SUBMODULE, "cannot get submodules without a working tree"); + return -1; + } + if (repo->submodule_cache != NULL) { khiter_t pos = git_strmap_lookup_index(repo->submodule_cache, name); if (git_strmap_valid_index(repo->submodule_cache, pos)) { @@ -549,6 +554,11 @@ int git_submodule_foreach( int error; size_t i; + if (repo->is_bare) { + giterr_set(GITERR_SUBMODULE, "cannot get submodules without a working tree"); + return -1; + } + if ((error = git_strmap_alloc(&submodules)) < 0) return error; |
