diff options
author | marc_culler <marc.culler@gmail.com> | 2022-09-20 05:07:01 (GMT) |
---|---|---|
committer | marc_culler <marc.culler@gmail.com> | 2022-09-20 05:07:01 (GMT) |
commit | 63c9a7bdc6784f26faea47bd01badf0ad1d94d17 (patch) | |
tree | aacf16c8b6f7b69dbdce4c285463e415deb94c59 | |
parent | 2563fb89e2263bd34cc5d23ad7e7ba45916cc898 (diff) | |
parent | 86b17d6aaedd2ae09b5758f12a9c9c999e51ce77 (diff) | |
download | tk-63c9a7bdc6784f26faea47bd01badf0ad1d94d17.zip tk-63c9a7bdc6784f26faea47bd01badf0ad1d94d17.tar.gz tk-63c9a7bdc6784f26faea47bd01badf0ad1d94d17.tar.bz2 |
patch [ab95811e07] from Christopher Chavez: prevent use-after-free crashes
-rw-r--r-- | macosx/tkMacOSXInit.c | 33 | ||||
-rw-r--r-- | macosx/tkMacOSXPrivate.h | 6 |
2 files changed, 36 insertions, 3 deletions
diff --git a/macosx/tkMacOSXInit.c b/macosx/tkMacOSXInit.c index bf5b6de..a9b459a 100644 --- a/macosx/tkMacOSXInit.c +++ b/macosx/tkMacOSXInit.c @@ -45,8 +45,41 @@ static int TkMacOSXGetAppPathCmd(ClientData cd, Tcl_Interp *ip, @synthesize needsToDraw = _needsToDraw; @synthesize tkLiveResizeEnded = _tkLiveResizeEnded; @synthesize tkPointerWindow = _tkPointerWindow; +- (void) setTkPointerWindow: (TkWindow *)winPtr +{ + if (_tkPointerWindow) { + Tcl_Release(_tkPointerWindow); + } + if (winPtr) { + Tcl_Preserve(winPtr); + } + _tkPointerWindow = winPtr; + return; +} @synthesize tkEventTarget = _tkEventTarget; +- (void) setTkEventTarget: (TkWindow *)winPtr +{ + if (_tkEventTarget) { + Tcl_Release(_tkEventTarget); + } + if (winPtr) { + Tcl_Preserve(winPtr); + } + _tkEventTarget = winPtr; + return; +} @synthesize tkDragTarget = _tkDragTarget; +- (void) setTkDragTarget: (TkWindow *)winPtr +{ + if (_tkDragTarget) { + Tcl_Release(_tkDragTarget); + } + if (winPtr) { + Tcl_Preserve(winPtr); + } + _tkDragTarget = winPtr; + return; +} @synthesize tkButtonState = _tkButtonState; @end diff --git a/macosx/tkMacOSXPrivate.h b/macosx/tkMacOSXPrivate.h index 62523b8..bc6b49c 100644 --- a/macosx/tkMacOSXPrivate.h +++ b/macosx/tkMacOSXPrivate.h @@ -356,9 +356,9 @@ VISIBILITY_HIDDEN * Persistent state variables used by processMouseEvent. */ -@property TkWindow *tkPointerWindow; -@property TkWindow *tkEventTarget; -@property TkWindow *tkDragTarget; +@property(nonatomic) TkWindow *tkPointerWindow; +@property(nonatomic) TkWindow *tkEventTarget; +@property(nonatomic) TkWindow *tkDragTarget; @property unsigned int tkButtonState; @end |