Patchwork D4023: index: don't allow index[len(index)] to mean nullid

login
register
mail settings
Submitter phabricator
Date Aug. 4, 2018, 6:44 a.m.
Message ID <42939e2429f2e6b78e2c8ac9e1c25e63@localhost.localdomain>
Download mbox | patch
Permalink /patch/33225/
State Not Applicable
Headers show

Comments

phabricator - Aug. 4, 2018, 6:44 a.m.
This revision was automatically updated to reflect the committed changes.
Closed by commit rHGa3dacabd476b: index: don&#039;t allow index[len(index)] to mean nullid (authored by martinvonz, committed by ).

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D4023?vs=9886&id=9893

REVISION DETAIL
  https://phab.mercurial-scm.org/D4023

AFFECTED FILES
  mercurial/cext/revlog.c
  mercurial/revlog.py
  tests/test-parseindex2.py

CHANGE DETAILS




To: martinvonz, indygreg, #hg-reviewers
Cc: mercurial-devel

Patch

diff --git a/tests/test-parseindex2.py b/tests/test-parseindex2.py
--- a/tests/test-parseindex2.py
+++ b/tests/test-parseindex2.py
@@ -61,9 +61,6 @@ 
     e[0] = offset_type(0, type)
     index[0] = tuple(e)
 
-    # add the magic null revision at -1
-    index.append((0, 0, 0, -1, -1, -1, -1, nullid))
-
     return index, cache
 
 data_inlined = (
diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -792,7 +792,7 @@ 
 
 class revlogoldindex(list):
     def __getitem__(self, i):
-        if i == -1 or i == len(self):
+        if i == -1:
             return (0, 0, 0, -1, -1, -1, -1, nullid)
         return list.__getitem__(self, i)
 
diff --git a/mercurial/cext/revlog.c b/mercurial/cext/revlog.c
--- a/mercurial/cext/revlog.c
+++ b/mercurial/cext/revlog.c
@@ -158,12 +158,12 @@ 
 	Py_ssize_t length = index_length(self) + 1;
 	PyObject *entry;
 
-	if (pos == -1 || pos == length - 1) {
+	if (pos == -1) {
 		Py_INCREF(nullentry);
 		return nullentry;
 	}
 
-	if (pos < 0 || pos >= length) {
+	if (pos < 0 || pos >= length - 1) {
 		PyErr_SetString(PyExc_IndexError, "revlog index out of range");
 		return NULL;
 	}