]> granicus.if.org Git - python/commitdiff
patch for re.sub bug, by AMK.
authorGuido van Rossum <guido@python.org>
Tue, 10 Mar 1998 04:55:29 +0000 (04:55 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 10 Mar 1998 04:55:29 +0000 (04:55 +0000)
Modules/pcre.h
Modules/pcremodule.c
Modules/pypcre.c

index e9140844b5da872715ec01936a3e7718531df905..4a01bd2beca4e787462cc147f4fa831d45dc628a 100644 (file)
@@ -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);
index c1a15235a237ed50cf92170bfccf22541bd87ba7..c4890dfe7c1f91ba3969348071eb5b436e7a8cd8 100644 (file)
@@ -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);
index 69d6c221b1d68f55384cfdbac370eb4b3f643ff7..796f3b4699af0bf8c4b255e0b38f2d469e02fb5b 100644 (file)
@@ -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;