On Thu, May 11, 2006 at 12:57:52AM +0200, Denis Barbier wrote:
> On Wed, May 10, 2006 at 09:02:50AM -0400, Justin Pryzby wrote:
> > Package: libc6
> > Version: 2.3.6-7
> > Severity: normal
> > 
> > The following causes a program to abort():
> > 
> >     regerror(ret, NULL, NULL, 0);
> > 
> > AFAIK this is wrong, since regerror() is exported.  It should detect
> > invalid values for "preg" (such as NULL, which could actually be a
> > compile-time check, __attribute__((not_null)) or whatever), and return
> > some special value if possible (doh, its a size_t ..) and perhaps set
> > errno=EINVAL (is this a case of "checking errno is mandatory"?).
> > 
> > #2  0xb7ebd9d8 in *__GI_abort () at ../sysdeps/generic/abort.c:88
> > #3  0xb7f2cabc in __regerror (errcode=-1208283148, preg=0x0, errbuf=0x0, 
> >     errbuf_size=0) at regcomp.c:549
> 
> See regcomp.c:
> ===============================================================
>    size_t
>    regerror (errcode, preg, errbuf, errbuf_size)
>        int errcode;
>        const regex_t *preg;
>        char *errbuf;
>        size_t errbuf_size;
>    {
>      const char *msg;
>      size_t msg_size;
>    
>      if (BE (errcode < 0
>         || errcode >= (int) (sizeof (__re_error_msgid_idx)
>                              / sizeof (__re_error_msgid_idx[0])), 0))
>        /* Only error codes returned by the rest of the code should be passed
>           to this routine.  If we are given anything else, or if other regex
>           code generates an invalid error code, then the program has a bug.
>           Dump core so we can fix it.  */
>        abort ();
> ===============================================================
> 
> Your errcode has an invalid value, you have to check why.
I know; in fact, it is because I was using rpmatch(), which doesn't
expose the necessary information.  My complaint isn't that regerror()
fails, but that it calls abort, when it could simply return indicating
an invalid input.

Justin


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to