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
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;