Bug#686799: Freeze exception for gtk-sharp2
Package: release.debian.org
Please consider a freeze exception for gtk-sharp2 version 2.12.10-5
which fixes an issue affecting 64-bit machines. This bugfix is the only
change from 2.12.10-4.
Details about the issue can be found in bug #686798
(Gtk.IconTheme.SearchPath is not 64-bit safe). A debdiff is attached for
reference.
cmn
diff -Nru gtk-sharp2-2.12.10/debian/changelog gtk-sharp2-2.12.10/debian/changelog
--- gtk-sharp2-2.12.10/debian/changelog 2012-09-06 01:49:14.000000000 +0200
+++ gtk-sharp2-2.12.10/debian/changelog 2012-09-06 01:43:03.000000000 +0200
@@ -1,3 +1,10 @@
+gtk-sharp2 (2.12.10-5) unstable; urgency=low
+
+ * [b130b4f] debian/patches: add 06_IconTheme_use_glib_marshaller.
+ This makes IconTheme.get_SearchPath() 64-bit safe.
+
+ -- Carlos Martín Nieto <cmn@dwim.me> Wed, 05 Sep 2012 23:22:15 +0100
+
gtk-sharp2 (2.12.10-4) unstable; urgency=low
[ Colin Watson ]
diff -Nru gtk-sharp2-2.12.10/debian/patches/06_IconTheme_use_glib_marshaller gtk-sharp2-2.12.10/debian/patches/06_IconTheme_use_glib_marshaller
--- gtk-sharp2-2.12.10/debian/patches/06_IconTheme_use_glib_marshaller 1970-01-01 01:00:00.000000000 +0100
+++ gtk-sharp2-2.12.10/debian/patches/06_IconTheme_use_glib_marshaller 2012-09-05 23:50:25.000000000 +0200
@@ -0,0 +1,62 @@
+Description: IconThem: use the glib marshallers Use GLib.Marshaller
+ instead of doing it per hand. This makes IconTheme.get_SearchPath()
+ safe to use in 64-bit machines, as we don't try to make the pointer
+ fit into a Int32.
+Author: Carlos Martín Nieto <cmn@dwim.me>
+
+Index: gtk-sharp2/gtk/IconTheme.custom
+===================================================================
+--- gtk-sharp2.orig/gtk/IconTheme.custom 2012-09-02 18:22:23.517201189 +0200
++++ gtk-sharp2/gtk/IconTheme.custom 2012-09-05 23:48:34.244916093 +0200
+@@ -71,9 +71,6 @@
+
+ public string[] SearchPath {
+ get {
+- string[] retval;
+-
+- unsafe {
+ int length;
+ IntPtr raw_ret;
+ if (IsWindowsPlatform)
+@@ -81,31 +78,22 @@
+ else
+ gtk_icon_theme_get_search_path (Handle, out raw_ret, out length);
+
+- int size = Marshal.SizeOf (typeof (IntPtr));
+- retval = new string[length];
+- for (int i = 0, j = 0; i < length; i++, j += size) {
+- IntPtr string_ptr = Marshal.ReadIntPtr (new IntPtr (raw_ret.ToInt32 () + j));
+- retval[i] = GLib.Marshaller.Utf8PtrToString (string_ptr);
+- }
+-
+- g_strfreev (raw_ret);
+- }
+-
+- return retval;
++ return GLib.Marshaller.NullTermPtrToStringArray(raw_ret, true);
++
+ }
+ set {
+- int cnt_path = value == null ? 0 : value.Length;
+- IntPtr[] native_path = new IntPtr [cnt_path];
+- for (int i = 0; i < cnt_path; i++)
+- native_path [i] = GLib.Marshaller.StringToPtrGStrdup (value[i]);
++ IntPtr[] native_path;
++ if (value == null)
++ native_path = new IntPtr [0];
++ else
++ native_path = GLib.Marshaller.StringArrayToNullTermPointer (value);
+
+ if (IsWindowsPlatform)
+- gtk_icon_theme_set_search_path_utf8 (Handle, native_path, native_path.Length);
++ gtk_icon_theme_set_search_path_utf8 (Handle, native_path, value.Length);
+ else
+- gtk_icon_theme_set_search_path (Handle, native_path, native_path.Length);
++ gtk_icon_theme_set_search_path (Handle, native_path, value.Length);
+
+- for (int i = 0; i < native_path.Length; i++)
+- GLib.Marshaller.Free (native_path[i]);
++ GLib.Marshaller.Free(native_path);
+ }
+ }
+
diff -Nru gtk-sharp2-2.12.10/debian/patches/series gtk-sharp2-2.12.10/debian/patches/series
--- gtk-sharp2-2.12.10/debian/patches/series 2012-09-06 01:49:14.000000000 +0200
+++ gtk-sharp2-2.12.10/debian/patches/series 2012-09-02 18:19:24.000000000 +0200
@@ -2,4 +2,5 @@
02_pcfiles
04_fix_glib_2.31_threading
05_glib_single_include
+06_IconTheme_use_glib_marshaller
Reply to: