Fix memory leak in 'Repository.create_tag'

Free the signature.
This commit is contained in:
J. David Ibáñez 2011-11-15 23:18:04 +01:00
parent 3851f725f9
commit 1eb0c6a9f0

@ -730,11 +730,11 @@ out:
static PyObject * static PyObject *
Repository_create_tag(Repository *self, PyObject *args) Repository_create_tag(Repository *self, PyObject *args)
{ {
PyObject *py_oid, *py_tagger; PyObject *py_oid, *py_tagger, *py_result = NULL;
char *tag_name, *message; char *tag_name, *message;
git_signature *tagger; git_signature *tagger = NULL;
git_oid oid; git_oid oid;
git_object *target; git_object *target = NULL;
int err, target_type; int err, target_type;
char hex[GIT_OID_HEXSZ + 1]; char hex[GIT_OID_HEXSZ + 1];
size_t len; size_t len;
@ -753,23 +753,26 @@ Repository_create_tag(Repository *self, PyObject *args)
len = py_str_to_git_oid(py_oid, &oid); len = py_str_to_git_oid(py_oid, &oid);
if (len == 0) if (len == 0)
return NULL; goto out;
err = git_object_lookup_prefix(&target, self->repo, &oid, err = git_object_lookup_prefix(&target, self->repo, &oid,
(unsigned int)len, target_type); (unsigned int)len, target_type);
if (err < 0) { if (err < 0) {
git_oid_fmt(hex, &oid); git_oid_fmt(hex, &oid);
hex[len] = '\0'; hex[len] = '\0';
return Error_set_str(err, hex); Error_set_str(err, hex);
goto out;
} }
err = git_tag_create(&oid, self->repo, tag_name, target, tagger, message, err = git_tag_create(&oid, self->repo, tag_name, target, tagger, message,
0); 0);
git_object_close(target); if (err == 0)
if (err < 0) py_result = git_oid_to_python(oid.id);
return NULL;
return git_oid_to_python(oid.id); out:
git_signature_free(tagger);
git_object_close(target);
return py_result;
} }
static PyObject * static PyObject *