mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
dtprintinfo: Fix SIGSEGV in dtprintinfo (passing NULL as first argument to catgets).
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;
This commit is contained in:
parent
1a03c25947
commit
606df517f0
1 changed files with 6 additions and 2 deletions
|
@ -94,14 +94,18 @@ int main(int argc, char **argv)
|
||||||
dtprintinfo_cat = catopen("dtprintinfo", 0);
|
dtprintinfo_cat = catopen("dtprintinfo", 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((nl_catd) errno || dtprintinfo_cat == (nl_catd) -1)
|
if ((nl_catd) errno)
|
||||||
dtprintinfo_cat = NULL;
|
dtprintinfo_cat = (nl_catd) -1;
|
||||||
#ifdef hpux
|
#ifdef hpux
|
||||||
else
|
else
|
||||||
msg_strings = (char **)calloc(LAST_MSG_NO, sizeof(char *));
|
msg_strings = (char **)calloc(LAST_MSG_NO, sizeof(char *));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dtprintinfo_cat == NULL) {
|
||||||
|
dtprintinfo_cat = (nl_catd) -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (!STRCMP(argv[1], "-help"))
|
if (!STRCMP(argv[1], "-help"))
|
||||||
{
|
{
|
||||||
char *output;
|
char *output;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue