mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-08 14:20:07 +00:00
BZ#17460: Fix buffer overrun in nscd --help.
This commit is contained in:
parent
7b8fb2b8db
commit
c763c5d271
@ -1,3 +1,11 @@
|
||||
2014-10-08 Roland McGrath <roland@hack.frob.com>
|
||||
|
||||
[BZ #17460]
|
||||
* nscd/nscd.c (more_help): Rewrite list of tables collection
|
||||
using xstrdup and asprintf.
|
||||
|
||||
* nscd/nscd_conf.c: Remove local xstrdup declaration.
|
||||
|
||||
2014-10-08 Kostya Serebryany <konstantin.s.serebryany@gmail.com>
|
||||
Roland McGrath <roland@hack.frob.com>
|
||||
|
||||
|
2
NEWS
2
NEWS
@ -9,7 +9,7 @@ Version 2.21
|
||||
|
||||
* The following bugs are resolved with this release:
|
||||
|
||||
6652, 14171, 17266, 17363, 17370, 17371, 17411.
|
||||
6652, 14171, 17266, 17363, 17370, 17371, 17411, 17460.
|
||||
|
||||
Version 2.20
|
||||
|
||||
|
45
nscd/nscd.c
45
nscd/nscd.c
@ -451,33 +451,36 @@ parse_opt (int key, char *arg, struct argp_state *state)
|
||||
static char *
|
||||
more_help (int key, const char *text, void *input)
|
||||
{
|
||||
char *tables, *tp = NULL;
|
||||
|
||||
switch (key)
|
||||
{
|
||||
case ARGP_KEY_HELP_EXTRA:
|
||||
{
|
||||
dbtype cnt;
|
||||
/* We print some extra information. */
|
||||
|
||||
tables = xmalloc (sizeof (dbnames) + 1);
|
||||
for (cnt = 0; cnt < lastdb; cnt++)
|
||||
char *tables = xstrdup (dbnames[0]);
|
||||
for (dbtype i = 1; i < lastdb; ++i)
|
||||
{
|
||||
strcat (tables, dbnames[cnt]);
|
||||
strcat (tables, " ");
|
||||
char *more_tables;
|
||||
if (asprintf (&more_tables, "%s %s", tables, dbnames[i]) < 0)
|
||||
more_tables = NULL;
|
||||
free (tables);
|
||||
if (more_tables == NULL)
|
||||
return NULL;
|
||||
tables = more_tables;
|
||||
}
|
||||
}
|
||||
|
||||
/* We print some extra information. */
|
||||
if (asprintf (&tp, gettext ("\
|
||||
char *tp;
|
||||
if (asprintf (&tp, gettext ("\
|
||||
Supported tables:\n\
|
||||
%s\n\
|
||||
\n\
|
||||
For bug reporting instructions, please see:\n\
|
||||
%s.\n\
|
||||
"), tables, REPORT_BUGS_TO) < 0)
|
||||
tp = NULL;
|
||||
free (tables);
|
||||
return tp;
|
||||
tp = NULL;
|
||||
free (tables);
|
||||
return tp;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
@ -622,15 +625,15 @@ monitor_child (int fd)
|
||||
}
|
||||
|
||||
if (WIFEXITED (status))
|
||||
{
|
||||
child_ret = WEXITSTATUS (status);
|
||||
fprintf (stderr, _("child exited with status %d\n"), child_ret);
|
||||
}
|
||||
{
|
||||
child_ret = WEXITSTATUS (status);
|
||||
fprintf (stderr, _("child exited with status %d\n"), child_ret);
|
||||
}
|
||||
if (WIFSIGNALED (status))
|
||||
{
|
||||
child_ret = WTERMSIG (status);
|
||||
fprintf (stderr, _("child terminated by signal %d\n"), child_ret);
|
||||
}
|
||||
{
|
||||
child_ret = WTERMSIG (status);
|
||||
fprintf (stderr, _("child terminated by signal %d\n"), child_ret);
|
||||
}
|
||||
}
|
||||
|
||||
/* We have the child status, so exit with that code. */
|
||||
|
@ -32,9 +32,6 @@
|
||||
#include "dbg_log.h"
|
||||
#include "nscd.h"
|
||||
|
||||
/* Wrapper functions with error checking for standard functions. */
|
||||
extern char *xstrdup (const char *s);
|
||||
|
||||
|
||||
/* Names of the databases. */
|
||||
const char *const dbnames[lastdb] =
|
||||
|
Loading…
Reference in New Issue
Block a user