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]