summaryrefslogtreecommitdiff
path: root/dev-perl/Tk/files/Tk-804.036-crash.patch
blob: f83b8103fdb8f53fb03a5a1bccd3bbbbb2e42501 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
https://github.com/eserte/perl-tk/pull/48
https://github.com/eserte/perl-tk/pull/89

From e7c5041b4fff6210bc0348c72b538efae32aede3 Mon Sep 17 00:00:00 2001
From: Karl Williamson <khw@cpan.org>
Date: Thu, 28 Mar 2019 22:59:17 -0500
Subject: [PATCH 1/3] Fix segfaults due to parameter size mismatch

See: https://rt.cpan.org/Ticket/Display.html?id=128955
As also done upstream: https://core.tcl-lang.org/tk/info/0d9c0d50f9
--- a/pTk/mTk/generic/tkCanvText.c
+++ b/pTk/mTk/generic/tkCanvText.c
@@ -1234,8 +1234,7 @@ GetTextIndex(interp, canvas, itemPtr, obj, indexPtr)
 				 * index. */
 {
     TextItem *textPtr = (TextItem *) itemPtr;
-    size_t length;
-    int c;
+    int c, length;
     TkCanvas *canvasPtr = (TkCanvas *) canvas;
     Tk_CanvasTextInfo *textInfoPtr = textPtr->textInfoPtr;
     char *string;
--- a/pTk/mTk/generic/tkFrame.c
+++ b/pTk/mTk/generic/tkFrame.c
@@ -493,8 +493,7 @@ CreateFrame(clientData, interp, objc, objv, type, appName)
     CONST char *className, *screenName, *colormapName, *arg;
     Tcl_Obj *visualName;
     Tcl_Obj *useOption;
-    int i, c, depth;
-    size_t length;
+    int i, c, depth, length;
     unsigned int mask;
     Colormap colormap;
     Visual *visual;
@@ -749,8 +748,7 @@ FrameWidgetObjCmd(clientData, interp, objc, objv)
     };
     register Frame *framePtr = (Frame *) clientData;
     int result = TCL_OK, index;
-    size_t length;
-    int c, i;
+    int c, i, length;
     Tcl_Obj *objPtr;
 
     if (objc < 2) {

From 2bba8c45fcbcd9f3d45b7bc5f290e324d7c01a13 Mon Sep 17 00:00:00 2001
From: Christopher Chavez <chrischavez@gmx.us>
Date: Fri, 12 Feb 2021 11:28:48 -0600
Subject: [PATCH 2/3] tkFrame.c: remove redundant casts

--- a/pTk/mTk/generic/tkFrame.c
+++ b/pTk/mTk/generic/tkFrame.c
@@ -522,7 +522,7 @@ CreateFrame(clientData, interp, objc, objv, type, appName)
     visualName = NULL;
     colormap = None;
     for (i = 2; i < objc; i += 2) {
-	arg = Tcl_GetStringFromObj(objv[i], (int *) &length);
+	arg = Tcl_GetStringFromObj(objv[i], &length);
 	if (length < 2) {
 	    continue;
 	}
@@ -796,7 +796,7 @@ FrameWidgetObjCmd(clientData, interp, objc, objv)
 	     */
 
 	    for (i = 2; i < objc; i++) {
-		char *arg = Tcl_GetStringFromObj(objv[i], (int *) &length);
+		char *arg = Tcl_GetStringFromObj(objv[i], &length);
 		if (length < 2) {
 		    continue;
 		}

From 3dd0956e92df84ec0e788368ff0214e527d28dd8 Mon Sep 17 00:00:00 2001
From: Christopher Chavez <chrischavez@gmx.us>
Date: Fri, 12 Feb 2021 11:29:16 -0600
Subject: [PATCH 3/3] tkImgPhoto.c: fix instances of RT #128955

Remove unnecessary casts to (int *)
As done upstream: https://core.tcl-lang.org/tk/info/0d9c0d50f9
--- a/pTk/mTk/generic/tkImgPhoto.c
+++ b/pTk/mTk/generic/tkImgPhoto.c
@@ -676,10 +676,9 @@ ImgPhotoCmd(clientData, interp, objc, objv)
     XColor color;
     Tk_PhotoImageFormat *imageFormat;
     int imageWidth, imageHeight;
-    int matched;
+    int length, matched;
     Tcl_Channel chan;
     Tk_PhotoHandle srcHandle;
-    size_t length;
     Tcl_Obj *obj;
     int c;
     ThreadSpecificData *tsdPtr = (ThreadSpecificData *)
@@ -723,7 +722,7 @@ ImgPhotoCmd(clientData, interp, objc, objv)
 	    Tcl_WrongNumArgs(interp, 2, objv, "option");
 	    return TCL_ERROR;
 	}
-	arg = Tcl_GetStringFromObj(objv[2], (int *) &length);
+	arg = Tcl_GetStringFromObj(objv[2], &length);
 	if (strncmp(arg,"-data", length) == 0) {
 	    if (masterPtr->dataString) {
 		Tcl_SetObjResult(interp, masterPtr->dataString);
@@ -768,7 +767,7 @@ ImgPhotoCmd(clientData, interp, objc, objv)
 	    return TCL_OK;
 	}
 	if (objc == 3) {
-	    char *arg = Tcl_GetStringFromObj(objv[2], (int *) &length);
+	    char *arg = Tcl_GetStringFromObj(objv[2], &length);
 	    if (!strncmp(arg, "-data", length)) {
 		Tcl_Obj *subobj = Tcl_NewStringObj("-data {} {} {}", 14);
 		if (masterPtr->dataString) {
@@ -5753,8 +5752,8 @@ PhotoOptionFind(interp, obj)
     Tcl_Interp *interp;         /* Interpreter that is being deleted. */
     Tcl_Obj *obj;                       /* Name of option to be found. */
 {
-    size_t length;
-    char *name = Tcl_GetStringFromObj(obj, (int *) &length);
+    int length;
+    char *name = Tcl_GetStringFromObj(obj, &length);
     OptionAssocData *list;
     char *prevname = NULL;
     Tcl_ObjCmdProc *proc = (Tcl_ObjCmdProc *) NULL;

From 0cc1fd7c599fc6b7050fcd7442f10824b032c462 Mon Sep 17 00:00:00 2001
From: "jan.nijtmans" <nijtmans@users.sourceforge.net>
Date: Thu, 3 Jan 2019 20:53:24 +0000
Subject: [PATCH] Fix for conflicting symbols in X.h and Windows.h

Backported from Tcl/Tk 8.6.10:
see https://core.tcl-lang.org/tk/info/9e31fd944934

Fixes #87
--- a/pTk/mTk/xlib/X11/X.h
+++ b/pTk/mTk/xlib/X11/X.h
@@ -73,7 +73,9 @@ typedef unsigned long KeyCode;	/* In order to use IME, the Macintosh needs
  * RESERVED RESOURCE AND CONSTANT DEFINITIONS
  *****************************************************************/
 
-#define None                 0L	/* universal null resource or null atom */
+#ifndef _WIN32
+#   define None              0L      /* See bug [9e31fd9449] and below */
+#endif
 
 #define ParentRelative       1L	/* background pixmap in CreateWindow
 				    and ChangeWindowAttributes */
@@ -179,13 +181,20 @@ are reserved in the protocol for errors and replies. */
 
 #define ShiftMask		(1<<0)
 #define LockMask		(1<<1)
-#define ControlMask		(1<<2)
+#ifndef _WIN32
+#   define ControlMask		(1<<2) /* See bug [9e31fd9449] and below */
+#endif
 #define Mod1Mask		(1<<3)
 #define Mod2Mask		(1<<4)
 #define Mod3Mask		(1<<5)
 #define Mod4Mask		(1<<6)
 #define Mod5Mask		(1<<7)
 
+/* See bug [9e31fd9449], this way prevents conflicts with Win32 headers */
+#ifdef _WIN32
+enum _Bug9e31fd9449 { None = 0, ControlMask = (1<<2) };
+#endif
+
 /* modifier names.  Used to build a SetModifierMapping request or
    to read a GetModifierMapping request.  These correspond to the
    masks defined above. */