summaryrefslogtreecommitdiffstats
path: root/generic/tkUtil.c
diff options
context:
space:
mode:
authorfvogel <fvogelnew1@free.fr>2016-05-01 19:51:15 (GMT)
committerfvogel <fvogelnew1@free.fr>2016-05-01 19:51:15 (GMT)
commitede13558f13645c01b9dff12f05b15d6e0435995 (patch)
treeb4628d9dc96cf310e71ee2510074a7e570cd805b /generic/tkUtil.c
parentcaca7822e575fd0943b0e41f85ffccfa37f02690 (diff)
parentd9629dd3f036632bf29ca7792d85a0fd346e8cb9 (diff)
downloadtk-ede13558f13645c01b9dff12f05b15d6e0435995.zip
tk-ede13558f13645c01b9dff12f05b15d6e0435995.tar.gz
tk-ede13558f13645c01b9dff12f05b15d6e0435995.tar.bz2
Fixed [b362182e45] - Generation of virtual events through Tk_HandleEvent is unsafe
Diffstat (limited to 'generic/tkUtil.c')
-rw-r--r--generic/tkUtil.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/generic/tkUtil.c b/generic/tkUtil.c
index 7ff9ecb..6563165 100644
--- a/generic/tkUtil.c
+++ b/generic/tkUtil.c
@@ -1162,7 +1162,8 @@ TkMakeEnsemble(
* TkSendVirtualEvent --
*
* Send a virtual event notification to the specified target window.
- * Equivalent to "event generate $target <<$eventName>>"
+ * Equivalent to:
+ * "event generate $target <<$eventName>> -data $detail"
*
* Note that we use Tk_QueueWindowEvent, not Tk_HandleEvent, so this
* routine does not reenter the interpreter.
@@ -1173,7 +1174,8 @@ TkMakeEnsemble(
void
TkSendVirtualEvent(
Tk_Window target,
- const char *eventName)
+ const char *eventName,
+ Tcl_Obj *detail)
{
union {XEvent general; XVirtualEvent virtual;} event;
@@ -1184,6 +1186,9 @@ TkSendVirtualEvent(
event.general.xany.window = Tk_WindowId(target);
event.general.xany.display = Tk_Display(target);
event.virtual.name = Tk_GetUid(eventName);
+ if (detail != NULL) {
+ event.virtual.user_data = detail;
+ }
Tk_QueueWindowEvent(&event.general, TCL_QUEUE_TAIL);
}