diff options
| author | nulltoken <emeric.fermas@gmail.com> | 2013-01-25 12:00:27 +0100 |
|---|---|---|
| committer | nulltoken <emeric.fermas@gmail.com> | 2013-01-25 12:26:09 +0100 |
| commit | c5193e3c204acca3feb73f613ee678087089cf0f (patch) | |
| tree | e8d1827d02fd22c3ec6419e83629ab1b18cabb50 /src | |
| parent | c9e9640356f4c56fdb86d3313a5a7dcf282b7391 (diff) | |
| download | libgit2-c5193e3c204acca3feb73f613ee678087089cf0f.tar.gz | |
clone: Prevent segfault upon faulted remote creation
Diffstat (limited to 'src')
| -rw-r--r-- | src/remote.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/remote.c b/src/remote.c index d7e1c5f70..7dcba6d6b 100644 --- a/src/remote.c +++ b/src/remote.c @@ -156,6 +156,7 @@ static int ensure_remote_doesnot_exist(git_repository *repo, const char *name) int git_remote_create(git_remote **out, git_repository *repo, const char *name, const char *url) { git_buf buf = GIT_BUF_INIT; + git_remote *remote = NULL; int error; if ((error = ensure_remote_name_is_valid(name)) < 0) @@ -167,19 +168,21 @@ int git_remote_create(git_remote **out, git_repository *repo, const char *name, if (git_buf_printf(&buf, "+refs/heads/*:refs/remotes/%s/*", name) < 0) return -1; - if (create_internal(out, repo, name, url, git_buf_cstr(&buf)) < 0) + if (create_internal(&remote, repo, name, url, git_buf_cstr(&buf)) < 0) goto on_error; git_buf_free(&buf); - if (git_remote_save(*out) < 0) + if (git_remote_save(remote) < 0) goto on_error; + *out = remote; + return 0; on_error: git_buf_free(&buf); - git_remote_free(*out); + git_remote_free(remote); return -1; } |
