Subject: Re: tgetstr bug
To: None <tech-userlevel@netbsd.org>
From: Christos Zoulas <christos@astron.com>
List: tech-userlevel
Date: 12/16/2006 21:10:48
In article <200612141505.51129.bruno@clisp.org>,
Bruno Haible  <bruno@clisp.org> wrote:
>tgetstr ("md", NULL) crashes on NetBSD. It's here:
>
>src/lib/libterm/termcap.c:
>
>char *
>t_getstr(struct tinfo *info, const char *id, char **area, size_t *limit)
>{
>...
>                _DIAGASSERT(limit != NULL);
>                *limit = i;			<=====
>                free(s);
>                return NULL;
>...
>}
>
>Other systems support tgetstr ("md", NULL) without problems, and
>return the string in a statically allocated buffer.

The code that passes NULL is non-portable. According to the TOG:

    The tgetstr() function gets the string entry for id. If area is
    not a null pointer and does not point to a null pointer, tgetstr()
    copies the string entry into the buffer pointed to by *area and
    advances the variable pointed to by area to the first byte after
    the copy of the string entry.

By making tgetstr(id, NULL) work, we are encouraging non-portable
behavior.

christos