aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/lesstif/files/021_xim_chained_list_crash.diff
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/lesstif/files/021_xim_chained_list_crash.diff')
-rw-r--r--recipes/lesstif/files/021_xim_chained_list_crash.diff24
1 files changed, 24 insertions, 0 deletions
diff --git a/recipes/lesstif/files/021_xim_chained_list_crash.diff b/recipes/lesstif/files/021_xim_chained_list_crash.diff
new file mode 100644
index 0000000000..10bdf8d0b9
--- /dev/null
+++ b/recipes/lesstif/files/021_xim_chained_list_crash.diff
@@ -0,0 +1,24 @@
+diff -ru lesstif2-0.94.4-old/lib/Xm-2.1/XmIm.c lesstif2-0.94.4/lib/Xm-2.1/XmIm.c
+--- lesstif2-0.94.4-old/lib/Xm-2.1/XmIm.c 2004-10-20 21:32:11.000000000 +0200
++++ lesstif2-0.94.4/lib/Xm-2.1/XmIm.c 2007-03-28 14:39:27.000000000 +0200
+@@ -133,7 +133,10 @@
+ p->next = q->next;
+ }
+
+- XtFree((char *)stuff);
++ /* if count!=0 then someone uses the stuff as orig_xim
++ so unlink it but not free it */
++ if (!stuff->count)
++ XtFree((char *)stuff);
+ }
+
+ /*
+@@ -1060,6 +1063,8 @@
+ XCloseIM(stuff->xim);
+ DEBUGOUT(_LtDebug(__FILE__, w, "XCloseIM(%p)\n", stuff->xim));
+ stuff->orig_xim->xim = NULL;
++ /* stuff->orig_xim is now useless */
++ XtFree(stuff->orig_xim);
+ } else {
+ DEBUGOUT(_LtDebug(__FILE__, w, "XmImCloseXIM(%p), count -> %d\n",
+ stuff->xim, stuff->orig_xim->count));