This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
Re: [PATCH] Testcase for another regex bug]
- From: Jakub Jelinek <jakub at redhat dot com>
- To: drepper at redhat dot com, roland at redhat dot com, Jack Howarth <howarth at bromo dot med dot uc dot edu>
- Cc: libc-alpha at sources dot redhat dot com, Isamu Hasegawa <isamu at yamato dot ibm dot com>
- Date: Sun, 29 Sep 2002 17:20:00 -0400
- Subject: Re: [PATCH] Testcase for another regex bug]
- References: <200209291329.JAA02966@bromo.msbb.uc.edu>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Sun, Sep 29, 2002 at 09:29:52AM -0400, Jack Howarth wrote:
> Jakub,
> Is it possible any of these compiler warnings could be related
> to some of our remaining regex issues?
>
> make[2]: Entering directory `/home/howarth/libc/posix'
> In file included from regex.c:52:
> regexec.c: In function `search_subexp':
> regexec.c:1573: warning: `node' might be used uninitialized in this function
This one is harmless.
> In file included from regex.c:52:
> regexec.c: In function `sift_states_bkref':
> regexec.c:1672: warning: `err' might be used uninitialized in this function
This one looks like a bug:
err might be set or uninitialized here
local_sctx.last_node = node;
local_sctx.last_str_idx = str_idx;
ret = re_node_set_insert (&local_sctx.limits, enabled_idx);
if (BE (err < 0, 0))
return REG_ESPACE;
err = sift_states_backward (preg, mctx, &local_sctx);
if (BE (err != REG_NOERROR, 0))
return err;
The only place where ret is used is on the above line, the value
is never checked. Furthermore, re_node_set_insert returns int, not
reg_errcode_t and returns -1 in out of memory conditions.
I think it was meant to be:
2002-09-29 Jakub Jelinek <jakub@redhat.com>
* posix/regexec.c (sift_states_bkref): Check ret, not err for
failure.
--- libc/posix/regexec.c.jj 2002-09-28 16:59:27.000000000 +0200
+++ libc/posix/regexec.c 2002-09-29 23:21:19.000000000 +0200
@@ -1770,7 +1770,7 @@ sift_states_bkref (preg, mctx, sctx, str
local_sctx.last_node = node;
local_sctx.last_str_idx = str_idx;
ret = re_node_set_insert (&local_sctx.limits, enabled_idx);
- if (BE (err < 0, 0))
+ if (BE (ret < 0, 0))
return REG_ESPACE;
err = sift_states_backward (preg, mctx, &local_sctx);
if (BE (err != REG_NOERROR, 0))
Jakub