# HG changeset patch # User Bryan O'Sullivan # Date 2013-09-16 19:17:55 # Node ID 3d07b4a2f7438cc54e8771d4db14dd1cd4b69fee # Parent b3c8c6f2b5c146c9d3464058ff40d031a97b371d parsers: correctly handle a failed allocation diff --git a/mercurial/parsers.c b/mercurial/parsers.c --- a/mercurial/parsers.c +++ b/mercurial/parsers.c @@ -1212,14 +1212,19 @@ static PyObject *find_gca_candidates(ind long sp; bitmask *seen; + if (gca == NULL) + return PyErr_NoMemory(); + for (i = 0; i < revcount; i++) { if (revs[i] > maxrev) maxrev = revs[i]; } seen = calloc(sizeof(*seen), maxrev + 1); - if (seen == NULL) + if (seen == NULL) { + Py_DECREF(gca); return PyErr_NoMemory(); + } for (i = 0; i < revcount; i++) seen[revs[i]] = 1ull << i;