mercurial/cext/revlog.c
changeset 41078 46e0563c67db
parent 41052 4c25038c112c
parent 41018 f4113489e4d4
child 41085 a6556b09bf83
equal deleted inserted replaced
41077:517a51d9cd7f 41078:46e0563c67db
   965  * Callers must ensure that rev >= 0 or illegal memory access may occur.
   965  * Callers must ensure that rev >= 0 or illegal memory access may occur.
   966  */
   966  */
   967 static inline int index_baserev(indexObject *self, int rev)
   967 static inline int index_baserev(indexObject *self, int rev)
   968 {
   968 {
   969 	const char *data;
   969 	const char *data;
       
   970 	int result;
   970 
   971 
   971 	if (rev >= self->length) {
   972 	if (rev >= self->length) {
   972 		PyObject *tuple =
   973 		PyObject *tuple =
   973 		    PyList_GET_ITEM(self->added, rev - self->length);
   974 		    PyList_GET_ITEM(self->added, rev - self->length);
   974 		long ret;
   975 		long ret;
   975 		if (!pylong_to_long(PyTuple_GET_ITEM(tuple, 3), &ret)) {
   976 		if (!pylong_to_long(PyTuple_GET_ITEM(tuple, 3), &ret)) {
   976 			return -2;
   977 			return -2;
   977 		}
   978 		}
   978 		return (int)ret;
   979 		result = (int)ret;
   979 	} else {
   980 	} else {
   980 		data = index_deref(self, rev);
   981 		data = index_deref(self, rev);
   981 		if (data == NULL) {
   982 		if (data == NULL) {
   982 			return -2;
   983 			return -2;
   983 		}
   984 		}
   984 
   985 
   985 		return getbe32(data + 16);
   986 		result = getbe32(data + 16);
   986 	}
   987 	}
       
   988 	if (result > rev) {
       
   989 		PyErr_Format(
       
   990 		    PyExc_ValueError,
       
   991 		    "corrupted revlog, revision base above revision: %d, %d",
       
   992 		    rev, result);
       
   993 		return -2;
       
   994 	}
       
   995 	return result;
   987 }
   996 }
   988 
   997 
   989 static PyObject *index_deltachain(indexObject *self, PyObject *args)
   998 static PyObject *index_deltachain(indexObject *self, PyObject *args)
   990 {
   999 {
   991 	int rev, generaldelta;
  1000 	int rev, generaldelta;