dixfonts: Don't overwrite local c variable until new_closure is safely initialized.

Signed-off-by: Alan Hourihane <alanh@vmware.com>
Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
This commit is contained in:
Alan Hourihane 2011-10-04 19:42:46 -07:00 committed by Jeremy Huddleston
parent 6378d0233d
commit 7a33c5b934

View File

@ -1302,31 +1302,30 @@ doPolyText(ClientPtr client, PTclosurePtr c)
goto bail; goto bail;
} }
*new_closure = *c; *new_closure = *c;
c = new_closure;
len = c->endReq - c->pElt; len = new_closure->endReq - new_closure->pElt;
c->data = malloc(len); new_closure->data = malloc(len);
if (!c->data) if (!new_closure->data)
{ {
free(c); free(new_closure);
err = BadAlloc; err = BadAlloc;
goto bail; goto bail;
} }
memmove(c->data, c->pElt, len); memmove(new_closure->data, new_closure->pElt, len);
c->pElt = c->data; new_closure->pElt = new_closure->data;
c->endReq = c->pElt + len; new_closure->endReq = new_closure->pElt + len;
/* Step 2 */ /* Step 2 */
pGC = GetScratchGC(c->pGC->depth, c->pGC->pScreen); pGC = GetScratchGC(new_closure->pGC->depth, new_closure->pGC->pScreen);
if (!pGC) if (!pGC)
{ {
free(c->data); free(new_closure->data);
free(c); free(new_closure);
err = BadAlloc; err = BadAlloc;
goto bail; goto bail;
} }
if ((err = CopyGC(c->pGC, pGC, GCFunction | if ((err = CopyGC(new_closure->pGC, pGC, GCFunction |
GCPlaneMask | GCForeground | GCPlaneMask | GCForeground |
GCBackground | GCFillStyle | GCBackground | GCFillStyle |
GCTile | GCStipple | GCTile | GCStipple |
@ -1337,11 +1336,12 @@ doPolyText(ClientPtr client, PTclosurePtr c)
Success) Success)
{ {
FreeScratchGC(pGC); FreeScratchGC(pGC);
free(c->data); free(new_closure->data);
free(c); free(new_closure);
err = BadAlloc; err = BadAlloc;
goto bail; goto bail;
} }
c = new_closure;
origGC = c->pGC; origGC = c->pGC;
c->pGC = pGC; c->pGC = pGC;
ValidateGC(c->pDraw, c->pGC); ValidateGC(c->pDraw, c->pGC);