diff options
author | culler <culler> | 2020-04-25 22:51:10 (GMT) |
---|---|---|
committer | culler <culler> | 2020-04-25 22:51:10 (GMT) |
commit | 1b713f4b0328104285771bb1ddd781feacebea38 (patch) | |
tree | d083626c1337572f9956636be9a17976aed7b866 | |
parent | 775dc1fe237adc2f793bf9b1e6af1061db3719f9 (diff) | |
download | tk-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.c | 16 |
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; } |