1 From eb750f8b5e14751d4c40b50499baec5d2ba79db9 Mon Sep 17 00:00:00 2001 |
|
2 From: Alan Coopersmith <[email protected]> |
|
3 Date: Fri, 11 Dec 2009 00:46:22 -0800 |
|
4 Subject: [PATCH] Check for failures from CreateNewResourceType |
|
5 |
|
6 Make sure to check return value before setting bitmask flags. |
|
7 For most calls, just fails to init the extension. Since Xinput |
|
8 already calls FatalError() on initialization failure, so does |
|
9 failure to allocate Xinput's resource type. |
|
10 |
|
11 Signed-off-by: Alan Coopersmith <[email protected]> |
|
12 Reviewed-by: Keith Packard <[email protected]> |
|
13 --- |
|
14 Xext/mbuf.c | 4 +++- |
|
15 Xext/panoramiX.c | 16 ++++++++++------ |
|
16 Xext/sync.c | 8 ++++++-- |
|
17 Xext/xvdisp.c | 4 ++-- |
|
18 Xi/extinit.c | 2 ++ |
|
19 dbe/dbe.c | 9 ++++++++- |
|
20 glx/glxext.c | 3 +++ |
|
21 hw/dmx/glxProxy/glxext.c | 4 ++++ |
|
22 hw/kdrive/ephyr/ephyrdriext.c | 4 ++++ |
|
23 hw/xfree86/dri/dri.c | 3 +++ |
|
24 hw/xfree86/dri2/dri2ext.c | 6 +++++- |
|
25 hw/xquartz/xpr/dri.c | 2 +- |
|
26 xfixes/cursor.c | 2 +- |
|
27 xfixes/region.c | 3 ++- |
|
28 xkb/xkb.c | 5 ++++- |
|
29 15 files changed, 58 insertions(+), 17 deletions(-) |
|
30 |
|
31 diff --git a/Xext/mbuf.c b/Xext/mbuf.c |
|
32 index 1f24974..af31221 100644 |
|
33 --- a/Xext/mbuf.c |
|
34 +++ b/Xext/mbuf.c |
|
35 @@ -467,7 +467,9 @@ MultibufferExtensionInit() |
|
36 * create the resource types |
|
37 */ |
|
38 MultibufferDrawableResType = |
|
39 - CreateNewResourceType(MultibufferDrawableDelete)|RC_DRAWABLE; |
|
40 + CreateNewResourceType(MultibufferDrawableDelete); |
|
41 + if (MultiBufferDrawableResType) |
|
42 + MultibufferDrawableResType |= RC_DRAWABLE; |
|
43 MultibufferResType = CreateNewResourceType(MultibufferDelete); |
|
44 MultibuffersResType = CreateNewResourceType(MultibuffersDelete); |
|
45 OtherClientResType = CreateNewResourceType(OtherClientDelete); |
|
46 diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c |
|
47 index 4b7b07e..f48bd36 100644 |
|
48 --- a/Xext/panoramiX.c |
|
49 +++ b/Xext/panoramiX.c |
|
50 @@ -503,15 +503,19 @@ void PanoramiXExtensionInit(int argc, char *argv[]) |
|
51 } |
|
52 |
|
53 XRC_DRAWABLE = CreateNewResourceClass(); |
|
54 - XRT_WINDOW = CreateNewResourceType(XineramaDeleteResource) | |
|
55 - XRC_DRAWABLE; |
|
56 - XRT_PIXMAP = CreateNewResourceType(XineramaDeleteResource) | |
|
57 - XRC_DRAWABLE; |
|
58 + XRT_WINDOW = CreateNewResourceType(XineramaDeleteResource); |
|
59 + if (XRT_WINDOW) |
|
60 + XRT_WINDOW |= XRC_DRAWABLE; |
|
61 + XRT_PIXMAP = CreateNewResourceType(XineramaDeleteResource); |
|
62 + if (XRT_PIXMAP) |
|
63 + XRT_PIXMAP |= XRC_DRAWABLE; |
|
64 XRT_GC = CreateNewResourceType(XineramaDeleteResource); |
|
65 XRT_COLORMAP = CreateNewResourceType(XineramaDeleteResource); |
|
66 |
|
67 - panoramiXGeneration = serverGeneration; |
|
68 - success = TRUE; |
|
69 + if (XRT_WINDOW && XRT_PIXMAP && XRT_GC && XRT_COLORMAP) { |
|
70 + panoramiXGeneration = serverGeneration; |
|
71 + success = TRUE; |
|
72 + } |
|
73 } |
|
74 |
|
75 if (!success) { |
|
76 diff --git a/Xext/sync.c b/Xext/sync.c |
|
77 index 667f8ab..d8a2b15 100644 |
|
78 --- a/Xext/sync.c |
|
79 +++ b/Xext/sync.c |
|
80 @@ -2113,8 +2113,12 @@ SyncExtensionInit(void) |
|
81 RTCounter = CreateNewResourceType(FreeCounter); |
|
82 } |
|
83 RTAlarm = CreateNewResourceType(FreeAlarm); |
|
84 - RTAwait = CreateNewResourceType(FreeAwait)|RC_NEVERRETAIN; |
|
85 - RTAlarmClient = CreateNewResourceType(FreeAlarmClient)|RC_NEVERRETAIN; |
|
86 + RTAwait = CreateNewResourceType(FreeAwait); |
|
87 + if (RTAwait) |
|
88 + RTAwait |= RC_NEVERRETAIN; |
|
89 + RTAlarmClient = CreateNewResourceType(FreeAlarmClient); |
|
90 + if (RTAlarmClient) |
|
91 + RTAlarmClient |= RC_NEVERRETAIN; |
|
92 |
|
93 if (RTCounter == 0 || RTAwait == 0 || RTAlarm == 0 || |
|
94 RTAlarmClient == 0 || |
|
95 diff --git a/Xext/xvdisp.c b/Xext/xvdisp.c |
|
96 index 5229916..1f3fc0f 100644 |
|
97 --- a/Xext/xvdisp.c |
|
98 +++ b/Xext/xvdisp.c |
|
99 @@ -1865,8 +1865,8 @@ void XineramifyXv(void) |
|
100 |
|
101 XvXRTPort = CreateNewResourceType(XineramaDeleteResource); |
|
102 |
|
103 - if(!xvsp0) return; |
|
104 - |
|
105 + if (!xvsp0 || !XvXRTPort) return; |
|
106 + |
|
107 for(i = 0; i < xvsp0->nAdaptors; i++) { |
|
108 refAdapt = xvsp0->pAdaptors + i; |
|
109 |
|
110 diff --git a/Xi/extinit.c b/Xi/extinit.c |
|
111 index 0c12919..372f77f 100644 |
|
112 --- a/Xi/extinit.c |
|
113 +++ b/Xi/extinit.c |
|
114 @@ -1270,6 +1270,8 @@ XInputExtensionInit(void) |
|
115 XIVersion = thisversion; |
|
116 MakeDeviceTypeAtoms(); |
|
117 RT_INPUTCLIENT = CreateNewResourceType((DeleteType) InputClientGone); |
|
118 + if (!RT_INPUTCLIENT) |
|
119 + FatalError("Failed to add resource type for XI.\n"); |
|
120 RegisterResourceName(RT_INPUTCLIENT, "INPUTCLIENT"); |
|
121 FixExtensionEvents(extEntry); |
|
122 ReplySwapVector[IReqCode] = (ReplySwapPtr) SReplyIDispatch; |
|
123 diff --git a/dbe/dbe.c b/dbe/dbe.c |
|
124 index a4f853d..8d2a343 100644 |
|
125 --- a/dbe/dbe.c |
|
126 +++ b/dbe/dbe.c |
|
127 @@ -1573,9 +1573,16 @@ DbeExtensionInit(void) |
|
128 |
|
129 /* Create the resource types. */ |
|
130 dbeDrawableResType = |
|
131 - CreateNewResourceType(DbeDrawableDelete) | RC_DRAWABLE; |
|
132 + CreateNewResourceType(DbeDrawableDelete); |
|
133 + if (!dbeDrawableResType) |
|
134 + return; |
|
135 + dbeDrawableResType |= RC_DRAWABLE; |
|
136 + |
|
137 dbeWindowPrivResType = |
|
138 CreateNewResourceType(DbeWindowPrivDelete); |
|
139 + if (!dbeWindowPrivResType) |
|
140 + return; |
|
141 + |
|
142 if (!dixRegisterPrivateOffset(dbeDrawableResType, |
|
143 offsetof(PixmapRec, devPrivates))) |
|
144 return; |
|
145 diff --git a/glx/glxext.c b/glx/glxext.c |
|
146 index 9f9c0ed..546d968 100644 |
|
147 --- a/glx/glxext.c |
|
148 +++ b/glx/glxext.c |
|
149 @@ -347,6 +347,9 @@ void GlxExtensionInit(void) |
|
150 __glXDrawableRes = CreateNewResourceType((DeleteType)DrawableGone); |
|
151 __glXSwapBarrierRes = CreateNewResourceType((DeleteType)SwapBarrierGone); |
|
152 |
|
153 + if (!__glXContextRes || !__glXDrawableRes || !__glXSwapBarrierRes) |
|
154 + return; |
|
155 + |
|
156 RegisterResourceName(__glXContextRes, "GLXContext"); |
|
157 RegisterResourceName(__glXDrawableRes, "GLXDrawable"); |
|
158 RegisterResourceName(__glXSwapBarrierRes, "GLXSwapBarrier"); |
|
159 diff --git a/hw/dmx/glxProxy/glxext.c b/hw/dmx/glxProxy/glxext.c |
|
160 index b30d144..0c39068 100644 |
|
161 --- a/hw/dmx/glxProxy/glxext.c |
|
162 +++ b/hw/dmx/glxProxy/glxext.c |
|
163 @@ -299,6 +299,10 @@ void GlxExtensionInit(void) |
|
164 __glXWindowRes = CreateNewResourceType((DeleteType)WindowGone); |
|
165 __glXPbufferRes = CreateNewResourceType((DeleteType)PbufferGone); |
|
166 |
|
167 + if (!__glXContextRes || !__glXClientRes || !__glXPixmapRes || |
|
168 + !__glXWindowRes || !__glXPbufferRes) |
|
169 + return; |
|
170 + |
|
171 /* |
|
172 ** Add extension to server extensions. |
|
173 */ |
|
174 diff --git a/hw/kdrive/ephyr/ephyrdriext.c b/hw/kdrive/ephyr/ephyrdriext.c |
|
175 index 231b098..ba1733b 100644 |
|
176 --- a/hw/kdrive/ephyr/ephyrdriext.c |
|
177 +++ b/hw/kdrive/ephyr/ephyrdriext.c |
|
178 @@ -141,6 +141,10 @@ ephyrDRIExtensionInit (ScreenPtr a_screen) |
|
179 |
|
180 #ifdef XF86DRI_EVENTS |
|
181 EventType = CreateNewResourceType (XF86DRIFreeEvents); |
|
182 + if (!EventType) { |
|
183 + EPHYR_LOG_ERROR ("failed to register DRI event resource type\n") ; |
|
184 + goto out ; |
|
185 + } |
|
186 #endif |
|
187 |
|
188 if ((extEntry = AddExtension(XF86DRINAME, |
|
189 diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c |
|
190 index 0de9be6..1a6cb4d 100644 |
|
191 --- a/hw/xfree86/dri/dri.c |
|
192 +++ b/hw/xfree86/dri/dri.c |
|
193 @@ -792,6 +792,9 @@ DRIExtensionInit(void) |
|
194 DRIDrawablePrivResType = CreateNewResourceType(DRIDrawablePrivDelete); |
|
195 DRIContextPrivResType = CreateNewResourceType(DRIContextPrivDelete); |
|
196 |
|
197 + if (!DRIDrawablePrivResType || !DRIContextPrivResType) |
|
198 + return FALSE; |
|
199 + |
|
200 RegisterBlockAndWakeupHandlers(DRIBlockHandler, DRIWakeupHandler, NULL); |
|
201 |
|
202 return TRUE; |
|
203 diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c |
|
204 index dc07b47..8acf267 100644 |
|
205 --- a/hw/xfree86/dri2/dri2ext.c |
|
206 +++ b/hw/xfree86/dri2/dri2ext.c |
|
207 @@ -416,6 +416,11 @@ static int DRI2DrawableGone(pointer p, XID id) |
|
208 static void |
|
209 DRI2ExtensionInit(void) |
|
210 { |
|
211 + dri2DrawableRes = CreateNewResourceType(DRI2DrawableGone); |
|
212 + |
|
213 + if (!dri2DrawableRes) |
|
214 + return; |
|
215 + |
|
216 dri2Extension = AddExtension(DRI2_NAME, |
|
217 DRI2NumberEvents, |
|
218 DRI2NumberErrors, |
|
219 @@ -424,7 +429,6 @@ DRI2ExtensionInit(void) |
|
220 NULL, |
|
221 StandardMinorOpcode); |
|
222 |
|
223 - dri2DrawableRes = CreateNewResourceType(DRI2DrawableGone); |
|
224 } |
|
225 |
|
226 extern Bool noDRI2Extension; |
|
227 diff --git a/hw/xquartz/xpr/dri.c b/hw/xquartz/xpr/dri.c |
|
228 index f570bee..a9c0f22 100644 |
|
229 --- a/hw/xquartz/xpr/dri.c |
|
230 +++ b/hw/xquartz/xpr/dri.c |
|
231 @@ -279,7 +279,7 @@ DRIExtensionInit(void) |
|
232 { |
|
233 DRIDrawablePrivResType = CreateNewResourceType(DRIDrawablePrivDelete); |
|
234 |
|
235 - return TRUE; |
|
236 + return (DRIDrawablePrivResType != 0); |
|
237 } |
|
238 |
|
239 void |
|
240 diff --git a/xfixes/cursor.c b/xfixes/cursor.c |
|
241 index 60d4222..c3e1e35 100644 |
|
242 --- a/xfixes/cursor.c |
|
243 +++ b/xfixes/cursor.c |
|
244 @@ -1095,6 +1095,6 @@ XFixesCursorInit (void) |
|
245 } |
|
246 } |
|
247 |
|
248 - return CursorClientType && CursorWindowType; |
|
249 + return CursorClientType && CursorHideCountType && CursorWindowType; |
|
250 } |
|
251 |
|
252 diff --git a/xfixes/region.c b/xfixes/region.c |
|
253 index 966eda0..59d8cee 100644 |
|
254 --- a/xfixes/region.c |
|
255 +++ b/xfixes/region.c |
|
256 @@ -64,7 +64,8 @@ Bool |
|
257 XFixesRegionInit (void) |
|
258 { |
|
259 RegionResType = CreateNewResourceType(RegionResFree); |
|
260 - return TRUE; |
|
261 + |
|
262 + return (RegionResType != 0); |
|
263 } |
|
264 |
|
265 int |
|
266 diff --git a/xkb/xkb.c b/xkb/xkb.c |
|
267 index 35f8d1c..c490f8b 100644 |
|
268 --- a/xkb/xkb.c |
|
269 +++ b/xkb/xkb.c |
|
270 @@ -6704,6 +6704,10 @@ XkbExtensionInit(void) |
|
271 { |
|
272 ExtensionEntry *extEntry; |
|
273 |
|
274 + RT_XKBCLIENT = CreateNewResourceType(XkbClientGone); |
|
275 + if (!RT_XKBCLIENT) |
|
276 + return; |
|
277 + |
|
278 if ((extEntry = AddExtension(XkbName, XkbNumberEvents, XkbNumberErrors, |
|
279 ProcXkbDispatch, SProcXkbDispatch, |
|
280 NULL, StandardMinorOpcode))) { |
|
281 @@ -6711,7 +6715,6 @@ XkbExtensionInit(void) |
|
282 XkbEventBase = (unsigned char)extEntry->eventBase; |
|
283 XkbErrorBase = (unsigned char)extEntry->errorBase; |
|
284 XkbKeyboardErrorCode = XkbErrorBase+XkbKeyboard; |
|
285 - RT_XKBCLIENT = CreateNewResourceType(XkbClientGone); |
|
286 } |
|
287 return; |
|
288 } |
|
289 -- |
|
290 1.5.6.5 |
|
291 |
|