diff options
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | elf/ldconfig.c | 4 | ||||
-rw-r--r-- | locale/programs/localedef.c | 7 | ||||
-rw-r--r-- | resolv/res_hconf.c | 47 | ||||
-rw-r--r-- | stdio-common/psignal.c | 8 | ||||
-rw-r--r-- | sunrpc/svc_simple.c | 26 |
6 files changed, 72 insertions, 33 deletions
diff --git a/ChangeLog b/ChangeLog index 745dc0e2c1..4f38604c52 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2004-05-07 Dmitry V. Levin <ldv@altlinux.org> + + * argp/argp-help.c (__argp_error, __argp_failure): Check result + of __asprintf call and don't use string if it failed. + * stdio-common/psignal.c (psignal): Likewise. + * locale/programs/localedef.c (more_help): Likewise. + * resolv/res_hconf.c (arg_service_list, arg_trimdomain_list, + arg_bool, parse_line): Check result of __asprintf calls and + don't use string if they failed. + * sunrpc/svc_simple.c (registerrpc, universal): Likewise. + * elf/ldconfig.c (parse_conf_include): Check result of __asprintf + call and exit if it failed. + 2004-05-10 Jakub Jelinek <jakub@redhat.com> * sysdeps/posix/sysconf.c (__sysconf) <cases _SC_REALTIME_SIGNALS, diff --git a/elf/ldconfig.c b/elf/ldconfig.c index 222d862bd2..bf103c7269 100644 --- a/elf/ldconfig.c +++ b/elf/ldconfig.c @@ -1034,7 +1034,9 @@ parse_conf_include (const char *config_file, unsigned int lineno, char *copy = NULL; if (pattern[0] != '/' && strchr (config_file, '/') != NULL) { - asprintf (©, "%s/%s", dirname (strdupa (config_file)), pattern); + if (asprintf (©, "%s/%s", dirname (strdupa (config_file)), + pattern) < 0) + error (EXIT_FAILURE, 0, _("memory exhausted")); pattern = copy; } diff --git a/locale/programs/localedef.c b/locale/programs/localedef.c index 1c01272e2a..28cb7b316e 100644 --- a/locale/programs/localedef.c +++ b/locale/programs/localedef.c @@ -364,14 +364,15 @@ more_help (int key, const char *text, void *input) { case ARGP_KEY_HELP_EXTRA: /* We print some extra information. */ - asprintf (&cp, gettext ("\ + if (asprintf (&cp, gettext ("\ System's directory for character maps : %s\n\ repertoire maps: %s\n\ locale path : %s\n\ %s"), - CHARMAP_PATH, REPERTOIREMAP_PATH, LOCALE_PATH, gettext ("\ + CHARMAP_PATH, REPERTOIREMAP_PATH, LOCALE_PATH, gettext ("\ For bug reporting instructions, please see:\n\ -<http://www.gnu.org/software/libc/bugs.html>.\n")); +<http://www.gnu.org/software/libc/bugs.html>.\n")) < 0) + return NULL; return cp; default: break; diff --git a/resolv/res_hconf.c b/resolv/res_hconf.c index 59f186e246..91cd300482 100644 --- a/resolv/res_hconf.c +++ b/resolv/res_hconf.c @@ -145,8 +145,10 @@ arg_service_list (const char *fname, int line_num, const char *args, { char *buf; - __asprintf (&buf, _("%s: line %d: expected service, found `%s'\n"), - fname, line_num, start); + if (__asprintf (&buf, + _("%s: line %d: expected service, found `%s'\n"), + fname, line_num, start) < 0) + return 0; #ifdef USE_IN_LIBIO if (_IO_fwide (stderr, 0) > 0) @@ -162,9 +164,10 @@ arg_service_list (const char *fname, int line_num, const char *args, { char *buf; - __asprintf (&buf, - _("%s: line %d: cannot specify more than %d services"), - fname, line_num, SERVICE_MAX); + if (__asprintf (&buf, _("\ +%s: line %d: cannot specify more than %d services"), + fname, line_num, SERVICE_MAX) < 0) + return 0; #ifdef USE_IN_LIBIO if (_IO_fwide (stderr, 0) > 0) @@ -189,9 +192,10 @@ arg_service_list (const char *fname, int line_num, const char *args, { char *buf; - __asprintf (&buf, _("\ + if (__asprintf (&buf, _("\ %s: line %d: list delimiter not followed by keyword"), - fname, line_num); + fname, line_num) < 0) + return 0; #ifdef USE_IN_LIBIO if (_IO_fwide (stderr, 0) > 0) @@ -229,9 +233,10 @@ arg_trimdomain_list (const char *fname, int line_num, const char *args, { char *buf; - __asprintf (&buf, _("\ + if (__asprintf (&buf, _("\ %s: line %d: cannot specify more than %d trim domains"), - fname, line_num, TRIMDOMAINS_MAX); + fname, line_num, TRIMDOMAINS_MAX) < 0) + return 0; #ifdef USE_IN_LIBIO if (_IO_fwide (stderr, 0) > 0) @@ -254,9 +259,10 @@ arg_trimdomain_list (const char *fname, int line_num, const char *args, { char *buf; - __asprintf (&buf, _("\ + if (__asprintf (&buf, _("\ %s: line %d: list delimiter not followed by domain"), - fname, line_num); + fname, line_num) < 0) + return 0; #ifdef USE_IN_LIBIO if (_IO_fwide (stderr, 0) > 0) @@ -316,9 +322,10 @@ arg_bool (const char *fname, int line_num, const char *args, unsigned flag) { char *buf; - __asprintf (&buf, - _("%s: line %d: expected `on' or `off', found `%s'\n"), - fname, line_num, args); + if (__asprintf (&buf, + _("%s: line %d: expected `on' or `off', found `%s'\n"), + fname, line_num, args) < 0) + return 0; #ifdef USE_IN_LIBIO if (_IO_fwide (stderr, 0) > 0) @@ -364,8 +371,9 @@ parse_line (const char *fname, int line_num, const char *str) { char *buf; - __asprintf (&buf, _("%s: line %d: bad command `%s'\n"), - fname, line_num, start); + if (__asprintf (&buf, _("%s: line %d: bad command `%s'\n"), + fname, line_num, start) < 0) + return; #ifdef USE_IN_LIBIO if (_IO_fwide (stderr, 0) > 0) @@ -392,9 +400,10 @@ parse_line (const char *fname, int line_num, const char *str) { char *buf; - __asprintf (&buf, - _("%s: line %d: ignoring trailing garbage `%s'\n"), - fname, line_num, str); + if (__asprintf (&buf, + _("%s: line %d: ignoring trailing garbage `%s'\n"), + fname, line_num, str) < 0) + break; #ifdef USE_IN_LIBIO if (_IO_fwide (stderr, 0) > 0) diff --git a/stdio-common/psignal.c b/stdio-common/psignal.c index 0764af536b..3a75224b78 100644 --- a/stdio-common/psignal.c +++ b/stdio-common/psignal.c @@ -57,7 +57,13 @@ psignal (int sig, const char *s) { char *buf; - (void) __asprintf (&buf, _("%s%sUnknown signal %d\n"), s, colon, sig); + if (__asprintf (&buf, _("%s%sUnknown signal %d\n"), s, colon, sig) < 0) + { + if (_IO_fwide (stderr, 0) > 0) + (void) __fwprintf (stderr, L"%s%s%s\n", s, colon, _("Unknown signal")); + else + (void) fprintf (stderr, "%s%s%s\n", s, colon, _("Unknown signal")); + } if (_IO_fwide (stderr, 0) > 0) (void) __fwprintf (stderr, L"%s", buf); diff --git a/sunrpc/svc_simple.c b/sunrpc/svc_simple.c index 57bedba163..5ac21ffdbd 100644 --- a/sunrpc/svc_simple.c +++ b/sunrpc/svc_simple.c @@ -84,8 +84,9 @@ registerrpc (u_long prognum, u_long versnum, u_long procnum, if (procnum == NULLPROC) { - (void) __asprintf (&buf, _("can't reassign procedure number %ld\n"), - NULLPROC); + if (__asprintf (&buf, _("can't reassign procedure number %ld\n"), + NULLPROC) < 0) + buf = NULL; goto err_out; } if (transp == 0) @@ -101,8 +102,9 @@ registerrpc (u_long prognum, u_long versnum, u_long procnum, if (!svc_register (transp, (u_long) prognum, (u_long) versnum, universal, IPPROTO_UDP)) { - (void) __asprintf (&buf, _("couldn't register prog %ld vers %ld\n"), - prognum, versnum); + if (__asprintf (&buf, _("couldn't register prog %ld vers %ld\n"), + prognum, versnum) < 0) + buf = NULL; goto err_out; } pl = (struct proglst_ *) malloc (sizeof (struct proglst_)); @@ -121,6 +123,8 @@ registerrpc (u_long prognum, u_long versnum, u_long procnum, return 0; err_out: + if (buf == NULL) + return -1; #ifdef USE_IN_LIBIO if (_IO_fwide (stderr, 0) > 0) (void) __fwprintf (stderr, L"%s", buf); @@ -171,16 +175,20 @@ universal (struct svc_req *rqstp, SVCXPRT *transp_l) return; if (!INTUSE(svc_sendreply) (transp_l, pl->p_outproc, outdata)) { - (void) __asprintf (&buf, - _("trouble replying to prog %d\n"), - pl->p_prognum); - exit (1); + if (__asprintf (&buf, _("trouble replying to prog %d\n"), + pl->p_prognum) < 0) + buf = NULL; + goto err_out2; } /* free the decoded arguments */ (void) svc_freeargs (transp_l, pl->p_inproc, xdrbuf); return; } - (void) __asprintf (&buf, _("never registered prog %d\n"), prog); + if (__asprintf (&buf, _("never registered prog %d\n"), prog) < 0) + buf = NULL; + err_out2: + if (buf == NULL) + exit (1); #ifdef USE_IN_LIBIO if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); |