diff -r fa53d66b45a8 -r 41e9d58ec56f mercurial/parsers.c --- a/mercurial/parsers.c Mon Sep 08 20:22:10 2014 +0200 +++ b/mercurial/parsers.c Mon Sep 08 20:57:44 2014 +0200 @@ -275,15 +275,20 @@ 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;