do not segfault if error is not set by libgit2
This commit is contained in:
@@ -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;
|
||||||
|
Reference in New Issue
Block a user