mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
patch for re.sub bug, by AMK.
This commit is contained in:
parent
193338afeb
commit
816671c666
3 changed files with 7 additions and 6 deletions
|
@ -57,11 +57,13 @@ extern void (*pcre_free)(void *);
|
||||||
|
|
||||||
#ifdef FOR_PYTHON
|
#ifdef FOR_PYTHON
|
||||||
extern pcre *pcre_compile(const char *, int, const char **, int *, PyObject *);
|
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
|
#else
|
||||||
extern pcre *pcre_compile(const char *, int, const char **, int *);
|
extern pcre *pcre_compile(const char *, int, const char **, int *);
|
||||||
#endif
|
|
||||||
extern int pcre_exec(const pcre *, const pcre_extra *, const char *,
|
extern int pcre_exec(const pcre *, const pcre_extra *, const char *,
|
||||||
int, int, int *, int);
|
int, int, int *, int);
|
||||||
|
#endif
|
||||||
extern int pcre_info(const pcre *, int *, int *);
|
extern int pcre_info(const pcre *, int *, int *);
|
||||||
extern pcre_extra *pcre_study(const pcre *, int, const char **);
|
extern pcre_extra *pcre_study(const pcre *, int, const char **);
|
||||||
extern const char *pcre_version(void);
|
extern const char *pcre_version(void);
|
||||||
|
|
|
@ -115,7 +115,7 @@ PyPcre_exec(self, args)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (endpos == -1) {endpos = stringlen;}
|
if (endpos == -1) {endpos = stringlen;}
|
||||||
count = pcre_exec(self->regex, self->regex_extra,
|
count = pcre_exec(self->regex, self->regex_extra,
|
||||||
(char *)string+pos, endpos - pos, options,
|
(char *)string, endpos, pos, options,
|
||||||
offsets, sizeof(offsets)/sizeof(int) );
|
offsets, sizeof(offsets)/sizeof(int) );
|
||||||
/* If an error occurred during the match, and an exception was raised,
|
/* If an error occurred during the match, and an exception was raised,
|
||||||
just return NULL and leave the exception alone. The most likely
|
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 the group wasn't affected by the match, return -1, -1 */
|
||||||
if (start<0 || count<=i)
|
if (start<0 || count<=i)
|
||||||
{start=end=-1;}
|
{start=end=-1;}
|
||||||
else
|
|
||||||
{start += pos; end +=pos;}
|
|
||||||
v=Py_BuildValue("ii", start, end);
|
v=Py_BuildValue("ii", start, end);
|
||||||
if (v==NULL) {Py_DECREF(list); return NULL;}
|
if (v==NULL) {Py_DECREF(list); return NULL;}
|
||||||
PyList_SetItem(list, i, v);
|
PyList_SetItem(list, i, v);
|
||||||
|
|
|
@ -4424,7 +4424,8 @@ Returns: > 0 => success; value is the number of elements filled in
|
||||||
|
|
||||||
int
|
int
|
||||||
pcre_exec(const pcre *external_re, const pcre_extra *external_extra,
|
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
|
/* The "volatile" directives are to make gcc -Wall stop complaining
|
||||||
that these variables can be clobbered by the longjmp. Hopefully
|
that these variables can be clobbered by the longjmp. Hopefully
|
||||||
|
@ -4433,7 +4434,7 @@ int resetcount, ocount;
|
||||||
int first_char = -1;
|
int first_char = -1;
|
||||||
match_data match_block;
|
match_data match_block;
|
||||||
const uschar *start_bits = NULL;
|
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 uschar *end_subject;
|
||||||
const real_pcre *re = (const real_pcre *)external_re;
|
const real_pcre *re = (const real_pcre *)external_re;
|
||||||
const real_pcre_extra *extra = (const real_pcre_extra *)external_extra;
|
const real_pcre_extra *extra = (const real_pcre_extra *)external_extra;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue