[Xfce4-commits] [panel-plugins/xfce4-whiskermenu-plugin] 390/473: Fix crash with invalid utf8 encoding.

noreply at xfce.org noreply at xfce.org
Mon Feb 16 23:59:20 CET 2015


This is an automated email from the git hooks/post-receive script.

gottcode pushed a commit to branch master
in repository panel-plugins/xfce4-whiskermenu-plugin.

commit 177fd65b6c7e78bd307394380428f708df319d55
Author: Graeme Gott <graeme at gottcode.org>
Date:   Tue Nov 18 11:32:36 2014 -0500

    Fix crash with invalid utf8 encoding.
---
 panel-plugin/launcher.cpp |   55 ++++++++++++++++++++++++++++-----------------
 1 file changed, 35 insertions(+), 20 deletions(-)

diff --git a/panel-plugin/launcher.cpp b/panel-plugin/launcher.cpp
index a9a6a8f..2ed8c57 100644
--- a/panel-plugin/launcher.cpp
+++ b/panel-plugin/launcher.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013 Graeme Gott <graeme at gottcode.org>
+ * Copyright (C) 2013, 2014 Graeme Gott <graeme at gottcode.org>
  *
  * This library is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -27,6 +27,33 @@ using namespace WhiskerMenu;
 
 //-----------------------------------------------------------------------------
 
+static std::string normalize(const gchar* string)
+{
+	std::string result;
+
+	gchar* normalized = g_utf8_normalize(string, -1, G_NORMALIZE_DEFAULT);
+	if (G_UNLIKELY(!normalized))
+	{
+		return result;
+	}
+
+	gchar* utf8 = g_utf8_casefold(normalized, -1);
+	if (G_UNLIKELY(!utf8))
+	{
+		g_free(normalized);
+		return result;
+	}
+
+	result = utf8;
+
+	g_free(utf8);
+	g_free(normalized);
+
+	return result;
+}
+
+//-----------------------------------------------------------------------------
+
 static void replace_with_quoted_string(std::string& command, size_t& index, const gchar* unquoted)
 {
 	if (!exo_str_is_empty(unquoted))
@@ -111,13 +138,13 @@ Launcher::Launcher(GarconMenuItem* item) :
 
 	// Fetch text
 	const gchar* name = garcon_menu_item_get_name(m_item);
-	if (G_UNLIKELY(!name))
+	if (G_UNLIKELY(!name) || !g_utf8_validate(name, -1, NULL))
 	{
 		name = "";
 	}
 
 	const gchar* generic_name = garcon_menu_item_get_generic_name(m_item);
-	if (G_UNLIKELY(!generic_name))
+	if (G_UNLIKELY(!generic_name) || !g_utf8_validate(generic_name, -1, NULL))
 	{
 		generic_name = "";
 	}
@@ -128,18 +155,14 @@ Launcher::Launcher(GarconMenuItem* item) :
 	if (wm_settings->launcher_show_description)
 	{
 		const gchar* details = garcon_menu_item_get_comment(m_item);
-		if (!details)
+		if (!details || !g_utf8_validate(details, -1, NULL))
 		{
 			details = generic_name;
 		}
 		set_text(g_markup_printf_escaped("%s<b>%s</b>\n%s%s", direction, m_display_name, direction, details));
 
 		// Create search text for comment
-		gchar* normalized = g_utf8_normalize(details, -1, G_NORMALIZE_DEFAULT);
-		gchar* utf8 = g_utf8_casefold(normalized, -1);
-		m_search_comment = utf8;
-		g_free(utf8);
-		g_free(normalized);
+		m_search_comment = normalize(details);
 	}
 	else
 	{
@@ -147,21 +170,13 @@ Launcher::Launcher(GarconMenuItem* item) :
 	}
 
 	// Create search text for display name
-	gchar* normalized = g_utf8_normalize(m_display_name, -1, G_NORMALIZE_DEFAULT);
-	gchar* utf8 = g_utf8_casefold(normalized, -1);
-	m_search_name = utf8;
-	g_free(utf8);
-	g_free(normalized);
+	m_search_name = normalize(m_display_name);
 
 	// Create search text for command
 	const gchar* command = garcon_menu_item_get_command(m_item);
-	if (!exo_str_is_empty(command))
+	if (!exo_str_is_empty(command) && g_utf8_validate(command, -1, NULL))
 	{
-		normalized = g_utf8_normalize(command, -1, G_NORMALIZE_DEFAULT);
-		utf8 = g_utf8_casefold(normalized, -1);
-		m_search_command = utf8;
-		g_free(utf8);
-		g_free(normalized);
+		m_search_command = normalize(command);
 	}
 }
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list