Show More
@@ -276,6 +276,9 b' static char *tuple_format = "Kiiiiiis#";' | |||||
276 | static char *tuple_format = "kiiiiiis#"; |
|
276 | static char *tuple_format = "kiiiiiis#"; | |
277 | #endif |
|
277 | #endif | |
278 |
|
278 | |||
|
279 | /* A RevlogNG v1 index entry is 64 bytes long. */ | |||
|
280 | static const long v1_hdrsize = 64; | |||
|
281 | ||||
279 | /* |
|
282 | /* | |
280 | * Return a pointer to the beginning of a RevlogNG record. |
|
283 | * Return a pointer to the beginning of a RevlogNG record. | |
281 | */ |
|
284 | */ | |
@@ -292,7 +295,7 b' static const char *index_deref(indexObje' | |||||
292 | return self->offsets[pos]; |
|
295 | return self->offsets[pos]; | |
293 | } |
|
296 | } | |
294 |
|
297 | |||
295 |
return PyString_AS_STRING(self->data) + pos * |
|
298 | return PyString_AS_STRING(self->data) + pos * v1_hdrsize; | |
296 | } |
|
299 | } | |
297 |
|
300 | |||
298 | /* |
|
301 | /* | |
@@ -1137,17 +1140,16 b' static long inline_scan(indexObject *sel' | |||||
1137 | { |
|
1140 | { | |
1138 | const char *data = PyString_AS_STRING(self->data); |
|
1141 | const char *data = PyString_AS_STRING(self->data); | |
1139 | const char *end = data + PyString_GET_SIZE(self->data); |
|
1142 | const char *end = data + PyString_GET_SIZE(self->data); | |
1140 | const long hdrsize = 64; |
|
1143 | long incr = v1_hdrsize; | |
1141 | long incr = hdrsize; |
|
|||
1142 | Py_ssize_t len = 0; |
|
1144 | Py_ssize_t len = 0; | |
1143 |
|
1145 | |||
1144 | while (data + hdrsize <= end) { |
|
1146 | while (data + v1_hdrsize <= end) { | |
1145 | uint32_t comp_len; |
|
1147 | uint32_t comp_len; | |
1146 | const char *old_data; |
|
1148 | const char *old_data; | |
1147 | /* 3rd element of header is length of compressed inline data */ |
|
1149 | /* 3rd element of header is length of compressed inline data */ | |
1148 | comp_len = getbe32(data + 8); |
|
1150 | comp_len = getbe32(data + 8); | |
1149 | incr = hdrsize + comp_len; |
|
1151 | incr = v1_hdrsize + comp_len; | |
1150 | if (incr < hdrsize) |
|
1152 | if (incr < v1_hdrsize) | |
1151 | break; |
|
1153 | break; | |
1152 | if (offsets) |
|
1154 | if (offsets) | |
1153 | offsets[len] = data; |
|
1155 | offsets[len] = data; | |
@@ -1158,7 +1160,7 b' static long inline_scan(indexObject *sel' | |||||
1158 | break; |
|
1160 | break; | |
1159 | } |
|
1161 | } | |
1160 |
|
1162 | |||
1161 | if (data != end && data + hdrsize != end) { |
|
1163 | if (data != end && data + v1_hdrsize != end) { | |
1162 | if (!PyErr_Occurred()) |
|
1164 | if (!PyErr_Occurred()) | |
1163 | PyErr_SetString(PyExc_ValueError, "corrupt index file"); |
|
1165 | PyErr_SetString(PyExc_ValueError, "corrupt index file"); | |
1164 | return -1; |
|
1166 | return -1; | |
@@ -1201,11 +1203,11 b' static int index_init(indexObject *self,' | |||||
1201 | self->raw_length = len; |
|
1203 | self->raw_length = len; | |
1202 | self->length = len + 1; |
|
1204 | self->length = len + 1; | |
1203 | } else { |
|
1205 | } else { | |
1204 |
if (size % |
|
1206 | if (size % v1_hdrsize) { | |
1205 | PyErr_SetString(PyExc_ValueError, "corrupt index file"); |
|
1207 | PyErr_SetString(PyExc_ValueError, "corrupt index file"); | |
1206 | goto bail; |
|
1208 | goto bail; | |
1207 | } |
|
1209 | } | |
1208 |
self->raw_length = size / |
|
1210 | self->raw_length = size / v1_hdrsize; | |
1209 | self->length = self->raw_length + 1; |
|
1211 | self->length = self->raw_length + 1; | |
1210 | } |
|
1212 | } | |
1211 |
|
1213 |
General Comments 0
You need to be logged in to leave comments.
Login now