Fix bogus timestamp generated by XIM

Submitted by ISHIKAWA,chiaki on Dec. 18, 2012, 3:28 p.m.

Details

Message ID 50D08B85.20009@yk.rim.or.jp
State Accepted
Headers show

Not browsing as part of any series.

Commit Message

ISHIKAWA,chiaki Dec. 18, 2012, 3:28 p.m.
Fix bogus timestamp generted by XIM due to uninitialized
data field. Also set appropriate serial, too.
Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=39367

Signed-off-by: Chiaki ISHIKAWA <ishikawa@yk.rim.or.jp>
---
 modules/im/ximcp/imDefLkup.c |   13 +++++++++++++
 modules/im/ximcp/imTrans.c   |    8 ++++++++
 2 files changed, 21 insertions(+)

Patch hide | download patch | download mbox

diff --git a/modules/im/ximcp/imDefLkup.c b/modules/im/ximcp/imDefLkup.c
index 0a9553a..7add1f2 100644
--- a/modules/im/ximcp/imDefLkup.c
+++ b/modules/im/ximcp/imDefLkup.c
@@ -269,6 +269,8 @@  _XimForwardEventCore(
     int		 ret_code;
     INT16	 len;

+    bzero(buf32, sizeof(buf32)); /* valgrind noticed uninitialized memory use! */
+
     if (!(len = _XimSetEventToWire(ev, (xEvent *)&buf_s[4])))
 	return False;				/* X event */

@@ -706,6 +708,8 @@  _XimCommitRecv(

     MARK_FABRICATED(im);

+    bzero(&ev, sizeof(ev));	/* uninitialized : found when running kterm under valgrind */
+
     ev.type = KeyPress;
     ev.send_event = False;
     ev.display = im->core.display;
@@ -713,6 +717,15 @@  _XimCommitRecv(
     ev.keycode = 0;
     ev.state = 0;

+    ev.time = 0L;
+    ev.serial = LastKnownRequestProcessed(im->core.display);
+    /* FIXME :
+       I wish there were COMMENTs (!) about the data passed around.
+    */
+#if 0
+    fprintf(stderr,"%s,%d: putback k press   FIXED ev.time=0 ev.serial=%lu\n", __FILE__, __LINE__, ev.serial);
+#endif
+
     XPutBackEvent(im->core.display, (XEvent *)&ev);

     return True;
diff --git a/modules/im/ximcp/imTrans.c b/modules/im/ximcp/imTrans.c
index 4bdecb2..a8cd95e 100644
--- a/modules/im/ximcp/imTrans.c
+++ b/modules/im/ximcp/imTrans.c
@@ -222,12 +222,20 @@  _XimTransInternalConnection(

     if (spec->is_putback)
 	return;
+
+    bzero(&ev, sizeof(ev));	/* FIXME: other fields may be accessed, too. */
     kev = (XKeyEvent *)&ev;
     kev->type = KeyPress;
     kev->send_event = False;
     kev->display = im->core.display;
     kev->window = spec->window;
     kev->keycode = 0;
+    kev->time = 0L;
+    kev->serial = LastKnownRequestProcessed(im->core.display);
+#if 0
+    fprintf(stderr,"%s,%d: putback FIXED kev->time=0 kev->serial=%lu\n", __FILE__, __LINE__, kev->serial);
+#endif
+
     XPutBackEvent(im->core.display, &ev);
     XFlush(im->core.display);
     spec->is_putback = True;