Update.
authorUlrich Drepper <drepper@redhat.com>
Wed, 19 Nov 2003 07:18:32 +0000 (07:18 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 19 Nov 2003 07:18:32 +0000 (07:18 +0000)
2003-11-18  Ulrich Drepper  <drepper@redhat.com>

* posix/regexec.c (get_subexp): Adter calling get_subexp_seb
reload buf and bkref_str.  Little optimization by avoiding memcmp.

2003-11-14  David Mosberger   <davidm@hpl.hp.com>

ChangeLog
posix/regex_internal.c
posix/regexec.c

index e0c9e8c..4e6ad11 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,9 @@
-2003-11-14 David Mosberger   <davidm@hpl.hp.com>
+2003-11-18  Ulrich Drepper  <drepper@redhat.com>
+
+       * posix/regexec.c (get_subexp): Adter calling get_subexp_seb
+       reload buf and bkref_str.  Little optimization by avoiding memcmp.
+
+2003-11-14  David Mosberger   <davidm@hpl.hp.com>
 
        * sysdeps/unix/sysv/linux/ia64/sysdep.h
        (GAS_ALIGN_BREAKS_UNWIND_INFO): Define this macro to indicate
index c1605a0..1da5f70 100644 (file)
@@ -519,6 +519,8 @@ re_string_reconstruct (pstr, idx, eflags, newline)
                        mbstate_t cur_state;
                        wchar_t wc2;
 
+                       /* XXX Don't use mbrtowc, we know which conversion
+                          to use (UTF-8 -> UCS4).  */
                        memset (&cur_state, 0, sizeof (cur_state));
                        if (mbrtowc (&wc2, p, raw + offset - p, &cur_state)
                            == raw + offset - p)
index 6f4448a..03b97e8 100644 (file)
@@ -2550,6 +2550,12 @@ get_subexp (preg, mctx, bkref_node, bkref_str_idx)
          sl_str += sl_str_diff;
          err = get_subexp_sub (preg, mctx, sub_top, sub_last, bkref_node,
                                bkref_str_idx);
+
+         /* Reload buf and bkref_str, since the preceding call might
+            have reallocated the buffer.  */
+         buf = (char *) re_string_get_buffer (mctx->input);
+         bkref_str = buf + bkref_str_idx;
+
          if (err == REG_NOMATCH)
            continue;
          if (BE (err != REG_NOERROR, 0))
@@ -2567,8 +2573,7 @@ get_subexp (preg, mctx, bkref_node, bkref_str_idx)
          sl_str_off = sl_str - sub_top->str_idx;
          /* The matched string by the sub expression match with the substring
             at the back reference?  */
-         if (sl_str_off > 0
-             && memcmp (bkref_str++, buf + sl_str - 1, 1) != 0)
+         if (sl_str_off > 0 && *bkref_str++ != buf[sl_str - 1])
            break; /* We don't need to search this sub expression any more.  */
          if (mctx->state_log[sl_str] == NULL)
            continue;