do not segfault if error is not set by libgit2

This commit is contained in:
Nico von Geyso
2012-05-30 07:27:47 +02:00
parent e7b5560590
commit 480a56adcf

View File

@@ -33,16 +33,17 @@ PyObject * Error_type(int type)
// Critical // Critical
const git_error* error = giterr_last(); const git_error* error = giterr_last();
switch (error->klass) { if(error != NULL) {
case GITERR_NOMEMORY: switch (error->klass) {
return PyExc_MemoryError; case GITERR_NOMEMORY:
case GITERR_OS: return PyExc_MemoryError;
return PyExc_OSError; case GITERR_OS:
case GITERR_INVALID: return PyExc_OSError;
return PyExc_ValueError; case GITERR_INVALID:
default: return PyExc_ValueError;
return GitError; }
} }
return GitError;
} }
@@ -51,10 +52,13 @@ PyObject* Error_set(int err)
assert(err < 0); assert(err < 0);
if(err != GIT_ERROR) { //expected failure if(err != GIT_ERROR) { //expected failure
PyErr_SetNone(Error_type(err)); PyErr_SetNone(Error_type(err));
} else { //critical failure } else { //critical failure
const git_error* error = giterr_last(); const git_error* error = giterr_last();
PyErr_SetString(Error_type(err), error->message); char* message = (error == NULL) ?
"(No error information given)" : error->message;
PyErr_SetString(Error_type(err), message);
} }
return NULL; return NULL;