errors: don't segfault if the library didn't set an error
git_lasterror() can return NULL. Passing that to the error formatting functions leads to a segmentation fault. Add a wrapper with a generic "no more information" string for the cases when the library didn't set one.
This commit is contained in:
parent
39bb5de7c5
commit
bc7db4ba8a
18
pygit2.c
18
pygit2.c
@ -174,6 +174,20 @@ Error_type(int err)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Python doesn't like it when the error string is NULL. Not giving
|
||||
* back an error string could be a bug in the library
|
||||
*/
|
||||
static const char *
|
||||
git_last_error(void)
|
||||
{
|
||||
const char *ret;
|
||||
|
||||
ret = git_lasterror();
|
||||
|
||||
return ret != NULL ? ret : "(No error information given)";
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
Error_set(int err)
|
||||
{
|
||||
@ -182,7 +196,7 @@ Error_set(int err)
|
||||
if (err == GIT_EOSERR)
|
||||
return PyErr_SetFromErrno(GitError);
|
||||
|
||||
PyErr_SetString(Error_type(err), git_lasterror());
|
||||
PyErr_SetString(Error_type(err), git_last_error());
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -195,7 +209,7 @@ Error_set_str(int err, const char *str)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return PyErr_Format(Error_type(err), "%s: %s", str, git_lasterror());
|
||||
return PyErr_Format(Error_type(err), "%s: %s", str, git_last_error());
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
|
Loading…
x
Reference in New Issue
Block a user