Skip to content

Commit 98d554a

Browse files
Merge pull request #525 from tpickett66/backend-errors
Ensure DB backends haven't already been freed
2 parents 7d00d84 + 6760906 commit 98d554a

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

ext/rugged/rugged_repo.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,11 @@ static void rugged_repo_new_with_backend(git_repository **repo, VALUE rb_path, V
215215
if (error) goto cleanup;
216216

217217
error = git_odb_add_backend(odb, odb_backend, 1);
218-
if (error) goto cleanup;
218+
if (error) {
219+
assert(odb_backend->free);
220+
odb_backend->free(odb_backend);
221+
goto cleanup;
222+
}
219223

220224
error = git_repository_wrap_odb(repo, odb);
221225
if (error) goto cleanup;
@@ -224,7 +228,11 @@ static void rugged_repo_new_with_backend(git_repository **repo, VALUE rb_path, V
224228
if (error) goto cleanup;
225229

226230
error = backend->refdb_backend(&refdb_backend, backend, path);
227-
if (error) goto cleanup;
231+
if (error) {
232+
assert(refdb_backend->free);
233+
refdb_backend->free(refdb_backend);
234+
goto cleanup;
235+
}
228236

229237
error = git_refdb_set_backend(refdb, refdb_backend);
230238
if (error) goto cleanup;
@@ -248,9 +256,6 @@ static void rugged_repo_new_with_backend(git_repository **repo, VALUE rb_path, V
248256
git_odb_free(odb);
249257
git_refdb_free(refdb);
250258

251-
if (odb_backend != NULL) odb_backend->free(odb_backend);
252-
if (refdb_backend != NULL) refdb_backend->free(refdb_backend);
253-
254259
rugged_exception_check(error);
255260
}
256261

0 commit comments

Comments
 (0)