From de09a5803a86ab2984c27415b7b62893617d9c16 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 11 Jun 2008 19:38:35 +0000 Subject: [PATCH] Handle strfxrm returning -1 a little better. Problem pointed out by Takao * glib/gunicollate.c (g_utf8_collate_key): Handle strfxrm returning -1 a little better. Problem pointed out by Takao Fujiwara svn path=/trunk/; revision=7015 --- ChangeLog | 8 ++++++++ glib/gunicollate.c | 26 ++++++++++++++++---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index f382142..3a53dc7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2008-06-11 Matthias Clasen + Bug 314453 – Nautilus crashes in Solaris when browsing the attached + file + + * glib/gunicollate.c (g_utf8_collate_key): Handle strfxrm returning + -1 a little better. Problem pointed out by Takao Fujiwara + +2008-06-11 Matthias Clasen + Bug 529321 – make check fails in glib/pcre * glib/pcre/Makefile.am: include Makefile.decl to fix 'make check'. diff --git a/glib/gunicollate.c b/glib/gunicollate.c index 32ff6dc..2bf579e 100644 --- a/glib/gunicollate.c +++ b/glib/gunicollate.c @@ -414,11 +414,16 @@ g_utf8_collate_key (const gchar *str, str_norm = g_utf8_normalize (str, len, G_NORMALIZE_ALL_COMPOSE); + result = NULL; + if (g_get_charset (&charset)) { xfrm_len = strxfrm (NULL, str_norm, 0); - result = g_malloc (xfrm_len + 1); - strxfrm (result, str_norm, xfrm_len + 1); + if (xfrm_len >= 0 && xfrm_len < G_MAXINT - 2) + { + result = g_malloc (xfrm_len + 1); + strxfrm (result, str_norm, xfrm_len + 1); + } } else { @@ -441,14 +446,15 @@ g_utf8_collate_key (const gchar *str, g_free (str_locale); } - else - { - xfrm_len = strlen (str_norm); - result = g_malloc (xfrm_len + 2); - result[0] = 'B'; - memcpy (result + 1, str_norm, xfrm_len); - result[xfrm_len+1] = '\0'; - } + } + + if (!result) + { + xfrm_len = strlen (str_norm); + result = g_malloc (xfrm_len + 2); + result[0] = 'B'; + memcpy (result + 1, str_norm, xfrm_len); + result[xfrm_len+1] = '\0'; } g_free (str_norm); -- 2.7.4