diff options
author | Michael W. Hudson <mwh@python.net> | 2002-03-08 13:40:07 (GMT) |
---|---|---|
committer | Michael W. Hudson <mwh@python.net> | 2002-03-08 13:40:07 (GMT) |
commit | 85717c768a2920ae15a39879cb676fe9f5c25f87 (patch) | |
tree | 5f95038fbdecfac4135e37bc91ad0c1377443e0d /Modules | |
parent | db1752660157323a7c88a507a754726898eb1b97 (diff) | |
download | cpython-85717c768a2920ae15a39879cb676fe9f5c25f87.zip cpython-85717c768a2920ae15a39879cb676fe9f5c25f87.tar.gz cpython-85717c768a2920ae15a39879cb676fe9f5c25f87.tar.bz2 |
backport tim_one's checkin of
revision 2.38 of mmapmodule.c
SF bug 515943: searching for data with \0 in mmap.
mmap_find_method(): this obtained the string to find via s#, but it
ignored its length, acting as if it were \0-terminated instead.
Someone please run on Linux too (the extended test_mmap works on Windows).
Bugfix candidate.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/mmapmodule.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index 6e03b4b..5bad8e4 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -251,20 +251,16 @@ mmap_find_method(mmap_object *self, start = 0; else if ((size_t)start > self->size) start = self->size; - p = self->data + start; - while (p < e) { - char *s = p; - char *n = needle; - while ((s<e) && (*n) && !(*s-*n)) { - s++, n++; - } - if (!*n) { + for (p = self->data + start; p + len <= e; ++p) { + int i; + for (i = 0; i < len && needle[i] == p[i]; ++i) + /* nothing */; + if (i == len) { return Py_BuildValue ( "l", (long) (p - self->data)); } - p++; } return Py_BuildValue ("l", (long) -1); } |