From 56f54c0ebc4ab340ba0a5b476c8b5fc2d4352c18 Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Fri, 27 Feb 2009 07:46:32 +0000 Subject: [PATCH] Bug 167569 - g_string_append_printf crashes on win32 when used with a NULL 2009-02-27 Tor Lillqvist Bug 167569 - g_string_append_printf crashes on win32 when used with a NULL argument * glib/gnulib/vasnprintf.c (vasnprintf): Add workaround for buggy programs. Patch by Owen. svn path=/trunk/; revision=7917 --- ChangeLog | 8 ++++++++ glib/gnulib/vasnprintf.c | 16 ++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9e164c4..db14272 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-02-27 Tor Lillqvist + + Bug 167569 - g_string_append_printf crashes on win32 when used + with a NULL argument + + * glib/gnulib/vasnprintf.c (vasnprintf): Add workaround for buggy + programs. Patch by Owen. + 2009-02-23 Paolo Borelli * glib/gutf8.c (_g_utf8_make_valid): diff --git a/glib/gnulib/vasnprintf.c b/glib/gnulib/vasnprintf.c index a8e9cc0..c981059 100644 --- a/glib/gnulib/vasnprintf.c +++ b/glib/gnulib/vasnprintf.c @@ -574,11 +574,15 @@ vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) # ifdef HAVE_WCHAR_T if (type == TYPE_WIDE_STRING) tmp_length = - local_wcslen (a.arg[dp->arg_index].a.a_wide_string) + (a.arg[dp->arg_index].a.a_wide_string == NULL + ? 6 /* wcslen(L"(null)") */ + : local_wcslen (a.arg[dp->arg_index].a.a_wide_string)) * MB_CUR_MAX; else # endif - tmp_length = strlen (a.arg[dp->arg_index].a.a_string); + tmp_length = a.arg[dp->arg_index].a.a_string == NULL + ? 6 /* strlen("(null)") */ + : strlen (a.arg[dp->arg_index].a.a_string); break; case 'p': @@ -948,14 +952,18 @@ vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) #endif case TYPE_STRING: { - const char *arg = a.arg[dp->arg_index].a.a_string; + const char *arg = a.arg[dp->arg_index].a.a_string == NULL + ? "(null)" + : a.arg[dp->arg_index].a.a_string; SNPRINTF_BUF (arg); } break; #ifdef HAVE_WCHAR_T case TYPE_WIDE_STRING: { - const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; + const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string == NULL + ? L"(null)" + : a.arg[dp->arg_index].a.a_wide_string; SNPRINTF_BUF (arg); } break; -- 2.7.4