AIGLX/DRI1: Pay more attention to return value from DRIGetDrawableInfo().

Could have crashed otherwise if the num(Back)ClipRects variables referenced by
the caller weren't pre-initialized to 0.
This commit is contained in:
Michel Dänzer 2008-07-28 09:32:59 +02:00
parent b3e981c9d4
commit 6ab8d6010a

View File

@ -740,7 +740,7 @@ getDrawableInfo(__DRIdrawable *driDrawable,
numBackClipRects, &pBackClipRects); numBackClipRects, &pBackClipRects);
__glXleaveServer(GL_FALSE); __glXleaveServer(GL_FALSE);
if (*numClipRects > 0) { if (retval && *numClipRects > 0) {
size = sizeof (drm_clip_rect_t) * *numClipRects; size = sizeof (drm_clip_rect_t) * *numClipRects;
*ppClipRects = xalloc (size); *ppClipRects = xalloc (size);
@ -771,16 +771,20 @@ getDrawableInfo(__DRIdrawable *driDrawable,
} }
else { else {
*ppClipRects = NULL; *ppClipRects = NULL;
*numClipRects = 0;
} }
if (*numBackClipRects > 0) { if (retval && *numBackClipRects > 0) {
size = sizeof (drm_clip_rect_t) * *numBackClipRects; size = sizeof (drm_clip_rect_t) * *numBackClipRects;
*ppBackClipRects = xalloc (size); *ppBackClipRects = xalloc (size);
if (*ppBackClipRects != NULL) if (*ppBackClipRects != NULL)
memcpy (*ppBackClipRects, pBackClipRects, size); memcpy (*ppBackClipRects, pBackClipRects, size);
else
*numBackClipRects = 0;
} }
else { else {
*ppBackClipRects = NULL; *ppBackClipRects = NULL;
*numBackClipRects = 0;
} }
return retval; return retval;