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:
parent
6378d0233d
commit
7a33c5b934
|
@ -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,15 +1336,16 @@ 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);
|
||||||
|
|
||||||
ClientSleep(client, (ClientSleepProcPtr)doPolyText, c);
|
ClientSleep(client, (ClientSleepProcPtr)doPolyText, c);
|
||||||
|
|
||||||
/* Set up to perform steps 3 and 4 */
|
/* Set up to perform steps 3 and 4 */
|
||||||
|
|
Loading…
Reference in New Issue