summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorculler <culler>2020-04-25 22:51:10 (GMT)
committerculler <culler>2020-04-25 22:51:10 (GMT)
commit1b713f4b0328104285771bb1ddd781feacebea38 (patch)
treed083626c1337572f9956636be9a17976aed7b866
parent775dc1fe237adc2f793bf9b1e6af1061db3719f9 (diff)
downloadtk-1b713f4b0328104285771bb1ddd781feacebea38.zip
tk-1b713f4b0328104285771bb1ddd781feacebea38.tar.gz
tk-1b713f4b0328104285771bb1ddd781feacebea38.tar.bz2
Prevent a crash in setXEventPoint by checking for NULL wmInfoPtr
-rw-r--r--macosx/tkMacOSXKeyEvent.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/macosx/tkMacOSXKeyEvent.c b/macosx/tkMacOSXKeyEvent.c
index 5f21853..1b3d8a9 100644
--- a/macosx/tkMacOSXKeyEvent.c
+++ b/macosx/tkMacOSXKeyEvent.c
@@ -33,7 +33,7 @@ static Tk_Window composeWin = NULL;
static int caret_x = 0, caret_y = 0, caret_height = 0;
static void setupXEvent(XEvent *xEvent, Tk_Window tkwin, NSUInteger modifiers);
-static void setXeventPoint(XEvent *xEvent, Tk_Window tkwin, NSWindow *w);
+static void setXEventPoint(XEvent *xEvent, Tk_Window tkwin, NSWindow *w);
#pragma mark TKApplication(TKKeyEvent)
@@ -210,7 +210,7 @@ static void setXeventPoint(XEvent *xEvent, Tk_Window tkwin, NSWindow *w);
* Set the trans_chars for keychars outside of the private-use range.
*/
- setXeventPoint(&xEvent, tkwin, w);
+ setXEventPoint(&xEvent, tkwin, w);
if (keychar < 0xF700) {
length = TkUniCharToUtf(keychar, xEvent.xkey.trans_chars);
}
@@ -285,7 +285,7 @@ static void setXeventPoint(XEvent *xEvent, Tk_Window tkwin, NSWindow *w);
*/
setupXEvent(&xEvent, tkwin, 0);
- setXeventPoint(&xEvent, tkwin, [self window]);
+ setXEventPoint(&xEvent, tkwin, [self window]);
xEvent.xany.type = KeyPress;
/*
@@ -551,6 +551,8 @@ static void
setupXEvent(XEvent *xEvent, Tk_Window tkwin, NSUInteger modifiers)
{
unsigned int state = 0;
+ Display *display = Tk_Display(tkwin);
+
if (modifiers) {
state = (modifiers & NSAlphaShiftKeyMask ? LockMask : 0) |
(modifiers & NSShiftKeyMask ? ShiftMask : 0) |
@@ -561,11 +563,11 @@ setupXEvent(XEvent *xEvent, Tk_Window tkwin, NSUInteger modifiers)
(modifiers & NSFunctionKeyMask ? Mod4Mask : 0) ;
}
memset(xEvent, 0, sizeof(XEvent));
- xEvent->xany.serial = LastKnownRequestProcessed(Tk_Display(tkwin));
+ xEvent->xany.serial = LastKnownRequestProcessed(display);
xEvent->xany.display = Tk_Display(tkwin);
xEvent->xany.window = Tk_WindowId(tkwin);
- xEvent->xkey.root = XRootWindow(Tk_Display(tkwin), 0);
+ xEvent->xkey.root = XRootWindow(display, 0);
xEvent->xkey.time = TkpGetMS();
xEvent->xkey.state = state;
xEvent->xkey.same_screen = true;
@@ -574,7 +576,7 @@ setupXEvent(XEvent *xEvent, Tk_Window tkwin, NSUInteger modifiers)
}
static void
-setXeventPoint(
+setXEventPoint(
XEvent *xEvent,
Tk_Window tkwin,
NSWindow *w)
@@ -594,7 +596,7 @@ setXeventPoint(
local.x -= (topPtr->wmInfoPtr->xInParent + contPtr->changes.x);
local.y -= (topPtr->wmInfoPtr->yInParent + contPtr->changes.y);
}
- } else {
+ } else if (winPtr->wmInfoPtr != NULL) {
local.x -= winPtr->wmInfoPtr->xInParent;
local.y -= winPtr->wmInfoPtr->yInParent;
}