From a9fcbb33d17ba8b2a80c43854dbcb97583bf1e17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=2E=20David=20Ib=C3=A1=C3=B1ez?= Date: Sat, 21 Jun 2014 21:14:33 +0200 Subject: [PATCH] Check errors returned by git_signature_dup --- src/blame.c | 43 ++++++++++++++++++++++++++----------------- src/reference.c | 6 +++++- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/blame.c b/src/blame.c index 4fe1770..f1c2f62 100644 --- a/src/blame.c +++ b/src/blame.c @@ -60,32 +60,41 @@ PyObject* wrap_blame_hunk(const git_blame_hunk *hunk, Blame *blame) { BlameHunk *py_hunk = NULL; + int err; if (!hunk) Py_RETURN_NONE; py_hunk = PyObject_New(BlameHunk, &BlameHunkType); - if (py_hunk != NULL) { - py_hunk->lines_in_hunk = hunk->lines_in_hunk; - py_hunk->final_commit_id = git_oid_allocfmt(&hunk->final_commit_id); - py_hunk->final_start_line_number = hunk->final_start_line_number; + if (py_hunk == NULL) + return NULL; - py_hunk->final_signature = NULL; - if (hunk->final_signature) - git_signature_dup(&py_hunk->final_signature, hunk->final_signature); + py_hunk->lines_in_hunk = hunk->lines_in_hunk; + py_hunk->final_commit_id = git_oid_allocfmt(&hunk->final_commit_id); + py_hunk->final_start_line_number = hunk->final_start_line_number; - py_hunk->orig_commit_id = git_oid_allocfmt(&hunk->orig_commit_id); - py_hunk->orig_path = hunk->orig_path != NULL ? - strdup(hunk->orig_path) : NULL; - py_hunk->orig_start_line_number = hunk->orig_start_line_number; - - py_hunk->orig_signature = NULL; - if (hunk->orig_signature) - git_signature_dup(&py_hunk->orig_signature, hunk->orig_signature); - - py_hunk->boundary = hunk->boundary; + py_hunk->final_signature = NULL; + if (hunk->final_signature) { + err = git_signature_dup(&py_hunk->final_signature, + hunk->final_signature); + if (err < 0) + return Error_set(err); } + py_hunk->orig_commit_id = git_oid_allocfmt(&hunk->orig_commit_id); + py_hunk->orig_path = hunk->orig_path != NULL ? + strdup(hunk->orig_path) : NULL; + py_hunk->orig_start_line_number = hunk->orig_start_line_number; + + py_hunk->orig_signature = NULL; + if (hunk->orig_signature) { + err = git_signature_dup(&py_hunk->orig_signature, + hunk->orig_signature); + if (err < 0) + return Error_set(err); + } + + py_hunk->boundary = hunk->boundary; return (PyObject*) py_hunk; } diff --git a/src/reference.c b/src/reference.c index d86d8a8..cbd96d7 100644 --- a/src/reference.c +++ b/src/reference.c @@ -54,6 +54,7 @@ RefLogIter_iternext(RefLogIter *self) { const git_reflog_entry *entry; RefLogEntry *py_entry; + int err; if (self->i < self->size) { entry = git_reflog_entry_byindex(self->reflog, self->i); @@ -62,7 +63,10 @@ RefLogIter_iternext(RefLogIter *self) py_entry->oid_old = git_oid_allocfmt(git_reflog_entry_id_old(entry)); py_entry->oid_new = git_oid_allocfmt(git_reflog_entry_id_new(entry)); py_entry->message = strdup(git_reflog_entry_message(entry)); - git_signature_dup(&py_entry->signature, git_reflog_entry_committer(entry)); + err = git_signature_dup(&py_entry->signature, + git_reflog_entry_committer(entry)); + if (err < 0) + return Error_set(err); ++(self->i);