Be resilient about NULL pointers.

This commit is contained in:
Bruno Haible 2006-05-24 11:47:29 +00:00
parent 8063adb7ae
commit e383f0c639
4 changed files with 54 additions and 2 deletions

View File

@ -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-15 Ulrich Drepper <drepper@redhat.com>
* dcigettext.c (category_to_name): Adjust for _nl_category_names

View File

@ -1,5 +1,5 @@
/* Decomposed printf argument list.
Copyright (C) 1999, 2002-2003, 2005 Free Software Foundation, Inc.
Copyright (C) 1999, 2002-2003, 2005-2006 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published
@ -91,10 +91,29 @@ printf_fetchargs (va_list args, arguments *a)
#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:

View File

@ -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-02 Charles Wilson <cygwin@cwilson.fastmail.fm>
* configure.ac (LTNOUNDEF): Set to -no-undefined also on mingw and

View File

@ -1,5 +1,5 @@
/* Decomposed printf argument list.
Copyright (C) 1999, 2002-2003, 2005 Free Software Foundation, Inc.
Copyright (C) 1999, 2002-2003, 2005-2006 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published
@ -91,10 +91,29 @@ printf_fetchargs (va_list args, arguments *a)
#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: