From 480a56adcfa8da2dbc516039626b1312464e102a Mon Sep 17 00:00:00 2001 From: Nico von Geyso Date: Wed, 30 May 2012 07:27:47 +0200 Subject: [PATCH] do not segfault if error is not set by libgit2 --- src/pygit2/error.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/pygit2/error.c b/src/pygit2/error.c index 45fd02a..246787c 100644 --- a/src/pygit2/error.c +++ b/src/pygit2/error.c @@ -33,16 +33,17 @@ PyObject * Error_type(int type) // Critical const git_error* error = giterr_last(); - switch (error->klass) { - case GITERR_NOMEMORY: - return PyExc_MemoryError; - case GITERR_OS: - return PyExc_OSError; - case GITERR_INVALID: - return PyExc_ValueError; - default: - return GitError; + if(error != NULL) { + switch (error->klass) { + case GITERR_NOMEMORY: + return PyExc_MemoryError; + case GITERR_OS: + return PyExc_OSError; + case GITERR_INVALID: + return PyExc_ValueError; + } } + return GitError; } @@ -51,10 +52,13 @@ PyObject* Error_set(int err) assert(err < 0); if(err != GIT_ERROR) { //expected failure - PyErr_SetNone(Error_type(err)); + PyErr_SetNone(Error_type(err)); } else { //critical failure - const git_error* error = giterr_last(); - PyErr_SetString(Error_type(err), error->message); + const git_error* error = giterr_last(); + char* message = (error == NULL) ? + "(No error information given)" : error->message; + + PyErr_SetString(Error_type(err), message); } return NULL;