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,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);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue