From: Guido van Rossum Date: Tue, 10 Mar 1998 04:55:29 +0000 (+0000) Subject: patch for re.sub bug, by AMK. X-Git-Tag: v1.5.1~423 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=816671c66641fe0b115c82a98efc5cdb693c235c;p=python patch for re.sub bug, by AMK. --- diff --git a/Modules/pcre.h b/Modules/pcre.h index e9140844b5..4a01bd2bec 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 c1a15235a2..c4890dfe7c 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 69d6c221b1..796f3b4699 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;