Mercurial > hg > octave-lojdl > gnulib-hg
changeset 6800:7f5add7487dc
Be resilient about NULL pointer arguments.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Wed, 24 May 2006 11:48:51 +0000 |
parents | 87a7e1a6aca2 |
children | 7aa7253e6458 |
files | lib/ChangeLog lib/printf-args.c |
diffstat | 2 files changed, 27 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,10 @@ +2006-05-24 Bruno Haible <bruno@clisp.org> + + * printf-args.c (printf_fetchargs): Turn NULL pointers for + TYPE_STRING and TYPE_WIDE_STRING into a non-NULL replacement. + Reported by Thorsten Maerz <torte@netztorte.de> via + Aaron Stone <aaron@serendipity.cx>. + 2006-05-19 Paul Eggert <eggert@cs.ucla.edu> * nanosleep.c [HAVE_SYS_SELECT_H]: Include <sys/select.h>.
--- a/lib/printf-args.c +++ b/lib/printf-args.c @@ -1,5 +1,5 @@ /* Decomposed printf argument list. - Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc. + Copyright (C) 1999, 2002-2003, 2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -84,10 +84,29 @@ #endif case TYPE_STRING: ap->a.a_string = va_arg (args, const char *); + /* A null pointer is an invalid argument for "%s", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_string == NULL) + ap->a.a_string = "(NULL)"; break; #ifdef HAVE_WCHAR_T case TYPE_WIDE_STRING: ap->a.a_wide_string = va_arg (args, const wchar_t *); + /* A null pointer is an invalid argument for "%ls", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_wide_string == NULL) + { + static const wchar_t wide_null_string[] = + { + (wchar_t)'(', + (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L', + (wchar_t)')', + (wchar_t)0 + }; + ap->a.a_wide_string = wide_null_string; + } break; #endif case TYPE_POINTER: