static PyObject *py_parse_tree(PyObject *self, PyObject *args)
{
- char *text, *end;
+ char *text, *start, *end;
int len, namelen;
PyObject *ret, *item, *name;
return NULL;
}
+ start = text;
end = text + len;
while (text < end) {
mode = strtol(text, &text, 8);
if (*text != ' ') {
- PyErr_SetString(PyExc_RuntimeError, "Expected space");
+ PyErr_SetString(PyExc_ValueError, "Expected space");
Py_DECREF(ret);
return NULL;
}
text++;
- namelen = strlen(text);
+ namelen = strnlen(text, len - (text - start));
name = PyString_FromStringAndSize(text, namelen);
if (name == NULL) {
}
if (text + namelen + 20 >= end) {
- PyErr_SetString(PyExc_RuntimeError, "SHA truncated");
+ PyErr_SetString(PyExc_ValueError, "SHA truncated");
Py_DECREF(ret);
Py_DECREF(name);
return NULL;