about summary refs log tree commit diff
path: root/posix
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-11-19 07:18:32 +0000
committerUlrich Drepper <drepper@redhat.com>2003-11-19 07:18:32 +0000
commit3ee363e23115e63f8dcc34bf5b7bd5e1a084635c (patch)
treec825366f4549a27f0d4c44301821fa5b0b208990 /posix
parentc9002c1b7a648fe49b8472d6dc6724c78fa1329f (diff)
downloadglibc-3ee363e23115e63f8dcc34bf5b7bd5e1a084635c.tar.gz
glibc-3ee363e23115e63f8dcc34bf5b7bd5e1a084635c.tar.xz
glibc-3ee363e23115e63f8dcc34bf5b7bd5e1a084635c.zip
Update.
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>
Diffstat (limited to 'posix')
-rw-r--r--posix/regex_internal.c2
-rw-r--r--posix/regexec.c9
2 files changed, 9 insertions, 2 deletions
diff --git a/posix/regex_internal.c b/posix/regex_internal.c
index c1605a0393..1da5f7040a 100644
--- a/posix/regex_internal.c
+++ b/posix/regex_internal.c
@@ -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)
diff --git a/posix/regexec.c b/posix/regexec.c
index 6f4448a078..03b97e883c 100644
--- a/posix/regexec.c
+++ b/posix/regexec.c
@@ -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;