summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorMichael W. Hudson <mwh@python.net>2002-03-08 13:40:07 (GMT)
committerMichael W. Hudson <mwh@python.net>2002-03-08 13:40:07 (GMT)
commit85717c768a2920ae15a39879cb676fe9f5c25f87 (patch)
tree5f95038fbdecfac4135e37bc91ad0c1377443e0d /Modules
parentdb1752660157323a7c88a507a754726898eb1b97 (diff)
downloadcpython-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.c14
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);
}