summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1998-03-10 04:55:29 (GMT)
committerGuido van Rossum <guido@python.org>1998-03-10 04:55:29 (GMT)
commit816671c66641fe0b115c82a98efc5cdb693c235c (patch)
treed298272eec9e9a6baca97735fb19246e2733b2cc
parent193338afeb42c591b24d74939bff1715ba4671c5 (diff)
downloadcpython-816671c66641fe0b115c82a98efc5cdb693c235c.zip
cpython-816671c66641fe0b115c82a98efc5cdb693c235c.tar.gz
cpython-816671c66641fe0b115c82a98efc5cdb693c235c.tar.bz2
patch for re.sub bug, by AMK.
-rw-r--r--Modules/pcre.h4
-rw-r--r--Modules/pcremodule.c4
-rw-r--r--Modules/pypcre.c5
3 files changed, 7 insertions, 6 deletions
diff --git a/Modules/pcre.h b/Modules/pcre.h
index e914084..4a01bd2 100644
--- a/Modules/pcre.h
+++ b/Modules/pcre.h
@@ -57,11 +57,13 @@ extern void (*pcre_free)(void *);
#ifdef FOR_PYTHON
extern pcre *pcre_compile(const char *, int, const char **, int *, PyObject *);
+extern int pcre_exec(const pcre *, const pcre_extra *, const char *,
+ int, int, int, int *, int);
#else
extern pcre *pcre_compile(const char *, int, const char **, int *);
-#endif
extern int pcre_exec(const pcre *, const pcre_extra *, const char *,
int, int, int *, int);
+#endif
extern int pcre_info(const pcre *, int *, int *);
extern pcre_extra *pcre_study(const pcre *, int, const char **);
extern const char *pcre_version(void);
diff --git a/Modules/pcremodule.c b/Modules/pcremodule.c
index c1a1523..c4890df 100644
--- a/Modules/pcremodule.c
+++ b/Modules/pcremodule.c
@@ -115,7 +115,7 @@ PyPcre_exec(self, args)
return NULL;
if (endpos == -1) {endpos = stringlen;}
count = pcre_exec(self->regex, self->regex_extra,
- (char *)string+pos, endpos - pos, options,
+ (char *)string, endpos, pos, options,
offsets, sizeof(offsets)/sizeof(int) );
/* If an error occurred during the match, and an exception was raised,
just return NULL and leave the exception alone. The most likely
@@ -143,8 +143,6 @@ PyPcre_exec(self, args)
/* If the group wasn't affected by the match, return -1, -1 */
if (start<0 || count<=i)
{start=end=-1;}
- else
- {start += pos; end +=pos;}
v=Py_BuildValue("ii", start, end);
if (v==NULL) {Py_DECREF(list); return NULL;}
PyList_SetItem(list, i, v);
diff --git a/Modules/pypcre.c b/Modules/pypcre.c
index 69d6c22..796f3b4 100644
--- a/Modules/pypcre.c
+++ b/Modules/pypcre.c
@@ -4424,7 +4424,8 @@ Returns: > 0 => success; value is the number of elements filled in
int
pcre_exec(const pcre *external_re, const pcre_extra *external_extra,
- const char *subject, int length, int options, int *offsets, int offsetcount)
+ const char *subject, int length, int start_pos, int options,
+ int *offsets, int offsetcount)
{
/* The "volatile" directives are to make gcc -Wall stop complaining
that these variables can be clobbered by the longjmp. Hopefully
@@ -4433,7 +4434,7 @@ int resetcount, ocount;
int first_char = -1;
match_data match_block;
const uschar *start_bits = NULL;
-const uschar *start_match = (const uschar *)subject;
+const uschar *start_match = (const uschar *)subject + start_pos;
const uschar *end_subject;
const real_pcre *re = (const real_pcre *)external_re;
const real_pcre_extra *extra = (const real_pcre_extra *)external_extra;