diff --git a/mercurial/parsers.c b/mercurial/parsers.c --- a/mercurial/parsers.c +++ b/mercurial/parsers.c @@ -275,15 +275,20 @@ static PyObject *parse_dirstate(PyObject PyObject *fname = NULL, *cname = NULL, *entry = NULL; char state, *cur, *str, *cpos; int mode, size, mtime; - unsigned int flen; - int len, pos = 40; + unsigned int flen, len, pos = 40; + int readlen; if (!PyArg_ParseTuple(args, "O!O!s#:parse_dirstate", &PyDict_Type, &dmap, &PyDict_Type, &cmap, - &str, &len)) + &str, &readlen)) goto quit; + if (readlen < 0) + goto quit; + + len = readlen; + /* read parents */ if (len < 40) goto quit;