Patch from Douglas Mencken <dougmencken@gmail.com>:
The issue is that MESSAGE tries to invoke catgets with NULL first
parameter, which is dereferenced inside catgets (Std C Library
function) without checking, from catgets.c source:
if (catalog->name_ptr[idx + 0] == (u_int32_t) set
&& catalog->name_ptr[idx + 1] == (u_int32_t) message)
On the other hand, there's a special value: -1 (cast to nl_catd),
which must be used instead of 0 (NULL) in the case when we are unable
to provide real catalog_desc, from catgets.c source:
/* Be generous if catalog which failed to be open is used. */
if (catalog_desc == (nl_catd) -1 || ++set <= 0 || message < 0)
return (char *) string;
dtprintinfo_cat = catopen("dtprintinfo", 0);
#endif
- if ((nl_catd) errno || dtprintinfo_cat == (nl_catd) -1)
- dtprintinfo_cat = NULL;
+ if ((nl_catd) errno)
+ dtprintinfo_cat = (nl_catd) -1;
#ifdef hpux
else
msg_strings = (char **)calloc(LAST_MSG_NO, sizeof(char *));
#endif
}
+ if (dtprintinfo_cat == NULL) {
+ dtprintinfo_cat = (nl_catd) -1;
+ }
+
if (!STRCMP(argv[1], "-help"))
{
char *output;