[gtk+] GdkWaylandWindow: Force window titles to valid utf8



commit 12b7d30a2d390fa4755828b6dc3748695c52a365
Author: Timm Bäder <mail baedert org>
Date:   Mon Mar 20 19:56:22 2017 +0100

    GdkWaylandWindow: Force window titles to valid utf8
    
    Use the new g_utf8_make_valid in case the given title is not valid utf8.
    Also bump the glib requirement to 2.51.5.

 configure.ac                    |    4 ++--
 gdk/wayland/gdkwindow-wayland.c |   18 ++++++++++++++----
 2 files changed, 16 insertions(+), 6 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index c91fb7d..d59b6bc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -42,8 +42,8 @@ m4_define([gtk_binary_version], [4.0.0])
 
 # required versions of other packages
 m4_define([glib_required_major], [2])
-m4_define([glib_required_minor], [49])
-m4_define([glib_required_micro], [4])
+m4_define([glib_required_minor], [51])
+m4_define([glib_required_micro], [5])
 m4_define([glib_required_version],
           [glib_required_major.glib_required_minor.glib_required_micro])
 m4_define([glib_min_required_minor],
diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c
index 5c09541..17fb720 100644
--- a/gdk/wayland/gdkwindow-wayland.c
+++ b/gdk/wayland/gdkwindow-wayland.c
@@ -3041,6 +3041,8 @@ gdk_wayland_window_set_title (GdkWindow   *window,
 {
   GdkWindowImplWayland *impl;
   const char *end;
+  gsize title_length;
+
   g_return_if_fail (title != NULL);
 
   if (GDK_WINDOW_DESTROYED (window))
@@ -3053,10 +3055,18 @@ gdk_wayland_window_set_title (GdkWindow   *window,
 
   g_free (impl->title);
 
-  g_utf8_validate (title, MAX_WL_BUFFER_SIZE, &end);
-  impl->title = g_malloc (end - title + 1);
-  memcpy (impl->title, title, end - title);
-  impl->title[end - title] = '\0';
+  title_length = MIN (strlen (title), MAX_WL_BUFFER_SIZE);
+  if (g_utf8_validate (title, title_length, &end))
+    {
+      impl->title = g_malloc (end - title + 1);
+      memcpy (impl->title, title, end - title);
+      impl->title[end - title] = '\0';
+    }
+  else
+    {
+      impl->title = g_utf8_make_valid (title, title_length);
+      g_warning ("Invalid utf8 passed to gdk_window_set_title: '%s'", title);
+    }
 
   gdk_wayland_window_sync_title (window);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]