mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Fix the .find() method for memory maps.
1) it didn't obey the "start" parameter (and when it does, we must validate the value) 2) the return value needs to be an absolute index, rather than relative to some arbitrary point in the file (checking CVS, it appears this method never worked; these changes bring it into line with typical .find() behavior)
This commit is contained in:
parent
a814db579d
commit
834f4dd7c9
1 changed files with 12 additions and 3 deletions
|
@ -232,8 +232,17 @@ mmap_find_method(mmap_object *self,
|
|||
if (!PyArg_ParseTuple (args, "s#|i:find", &needle, &len, &start)) {
|
||||
return NULL;
|
||||
} else {
|
||||
char *p = self->data+self->pos;
|
||||
char *e = self->data+self->size;
|
||||
char *p;
|
||||
char *e = self->data + self->size;
|
||||
|
||||
if (start < 0)
|
||||
start += self->size;
|
||||
if (start < 0)
|
||||
start = 0;
|
||||
else if (start > self->size)
|
||||
start = self->size;
|
||||
p = self->data + start;
|
||||
|
||||
while (p < e) {
|
||||
char *s = p;
|
||||
char *n = needle;
|
||||
|
@ -243,7 +252,7 @@ mmap_find_method(mmap_object *self,
|
|||
if (!*n) {
|
||||
return Py_BuildValue (
|
||||
"i",
|
||||
(int) (p - (self->data + start)));
|
||||
(int) (p - self->data));
|
||||
}
|
||||
p++;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue