diff options
author | Guido van Rossum <guido@python.org> | 1998-03-10 04:55:29 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1998-03-10 04:55:29 (GMT) |
commit | 816671c66641fe0b115c82a98efc5cdb693c235c (patch) | |
tree | d298272eec9e9a6baca97735fb19246e2733b2cc /Modules | |
parent | 193338afeb42c591b24d74939bff1715ba4671c5 (diff) | |
download | cpython-816671c66641fe0b115c82a98efc5cdb693c235c.zip cpython-816671c66641fe0b115c82a98efc5cdb693c235c.tar.gz cpython-816671c66641fe0b115c82a98efc5cdb693c235c.tar.bz2 |
patch for re.sub bug, by AMK.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/pcre.h | 4 | ||||
-rw-r--r-- | Modules/pcremodule.c | 4 | ||||
-rw-r--r-- | Modules/pypcre.c | 5 |
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; |