do not segfault if error is not set by libgit2
This commit is contained in:
@@ -33,6 +33,7 @@ PyObject * Error_type(int type)
|
|||||||
|
|
||||||
// Critical
|
// Critical
|
||||||
const git_error* error = giterr_last();
|
const git_error* error = giterr_last();
|
||||||
|
if(error != NULL) {
|
||||||
switch (error->klass) {
|
switch (error->klass) {
|
||||||
case GITERR_NOMEMORY:
|
case GITERR_NOMEMORY:
|
||||||
return PyExc_MemoryError;
|
return PyExc_MemoryError;
|
||||||
@@ -40,9 +41,9 @@ PyObject * Error_type(int type)
|
|||||||
return PyExc_OSError;
|
return PyExc_OSError;
|
||||||
case GITERR_INVALID:
|
case GITERR_INVALID:
|
||||||
return PyExc_ValueError;
|
return PyExc_ValueError;
|
||||||
default:
|
|
||||||
return GitError;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return GitError;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -54,7 +55,10 @@ PyObject* Error_set(int err)
|
|||||||
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