(1823) panoramix: protect against allocaton failure
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
		
							parent
							
								
									666bfbb882
								
							
						
					
					
						commit
						ff74d31382
					
				| 
						 | 
				
			
			@ -1387,7 +1387,6 @@ PanoramiXPolyPoint(ClientPtr client)
 | 
			
		|||
{
 | 
			
		||||
    PanoramiXRes *gc, *draw;
 | 
			
		||||
    int result, npoint, j;
 | 
			
		||||
    xPoint *origPts;
 | 
			
		||||
    Bool isRoot;
 | 
			
		||||
 | 
			
		||||
    REQUEST(xPolyPointReq);
 | 
			
		||||
| 
						 | 
				
			
			@ -1410,7 +1409,10 @@ PanoramiXPolyPoint(ClientPtr client)
 | 
			
		|||
    isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
 | 
			
		||||
    npoint = bytes_to_int32((client->req_len << 2) - sizeof(xPolyPointReq));
 | 
			
		||||
    if (npoint > 0) {
 | 
			
		||||
        origPts = calloc(npoint, sizeof(xPoint));
 | 
			
		||||
        xPoint *origPts = calloc(npoint, sizeof(xPoint));
 | 
			
		||||
        if (!origPts)
 | 
			
		||||
            return BadAlloc;
 | 
			
		||||
 | 
			
		||||
        memcpy((char *) origPts, (char *) &stuff[1], npoint * sizeof(xPoint));
 | 
			
		||||
        FOR_NSCREENS_FORWARD(j) {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1452,7 +1454,6 @@ PanoramiXPolyLine(ClientPtr client)
 | 
			
		|||
{
 | 
			
		||||
    PanoramiXRes *gc, *draw;
 | 
			
		||||
    int result, npoint, j;
 | 
			
		||||
    xPoint *origPts;
 | 
			
		||||
    Bool isRoot;
 | 
			
		||||
 | 
			
		||||
    REQUEST(xPolyLineReq);
 | 
			
		||||
| 
						 | 
				
			
			@ -1475,7 +1476,9 @@ PanoramiXPolyLine(ClientPtr client)
 | 
			
		|||
    isRoot = IS_ROOT_DRAWABLE(draw);
 | 
			
		||||
    npoint = bytes_to_int32((client->req_len << 2) - sizeof(xPolyLineReq));
 | 
			
		||||
    if (npoint > 0) {
 | 
			
		||||
        origPts = calloc(npoint, sizeof(xPoint));
 | 
			
		||||
        xPoint *origPts = calloc(npoint, sizeof(xPoint));
 | 
			
		||||
        if (!origPts)
 | 
			
		||||
            return BadAlloc;
 | 
			
		||||
        memcpy((char *) origPts, (char *) &stuff[1], npoint * sizeof(xPoint));
 | 
			
		||||
        FOR_NSCREENS_FORWARD(j) {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1517,7 +1520,6 @@ PanoramiXPolySegment(ClientPtr client)
 | 
			
		|||
{
 | 
			
		||||
    int result, nsegs, i, j;
 | 
			
		||||
    PanoramiXRes *gc, *draw;
 | 
			
		||||
    xSegment *origSegs;
 | 
			
		||||
    Bool isRoot;
 | 
			
		||||
 | 
			
		||||
    REQUEST(xPolySegmentReq);
 | 
			
		||||
| 
						 | 
				
			
			@ -1544,7 +1546,9 @@ PanoramiXPolySegment(ClientPtr client)
 | 
			
		|||
        return BadLength;
 | 
			
		||||
    nsegs >>= 3;
 | 
			
		||||
    if (nsegs > 0) {
 | 
			
		||||
        origSegs = calloc(nsegs, sizeof(xSegment));
 | 
			
		||||
        xSegment *origSegs = calloc(nsegs, sizeof(xSegment));
 | 
			
		||||
        if (!origSegs)
 | 
			
		||||
            return BadAlloc;
 | 
			
		||||
        memcpy((char *) origSegs, (char *) &stuff[1], nsegs * sizeof(xSegment));
 | 
			
		||||
        FOR_NSCREENS_FORWARD(j) {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1586,7 +1590,6 @@ PanoramiXPolyRectangle(ClientPtr client)
 | 
			
		|||
    int result, nrects, i, j;
 | 
			
		||||
    PanoramiXRes *gc, *draw;
 | 
			
		||||
    Bool isRoot;
 | 
			
		||||
    xRectangle *origRecs;
 | 
			
		||||
 | 
			
		||||
    REQUEST(xPolyRectangleReq);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1612,7 +1615,9 @@ PanoramiXPolyRectangle(ClientPtr client)
 | 
			
		|||
        return BadLength;
 | 
			
		||||
    nrects >>= 3;
 | 
			
		||||
    if (nrects > 0) {
 | 
			
		||||
        origRecs = calloc(nrects, sizeof(xRectangle));
 | 
			
		||||
        xRectangle *origRecs = calloc(nrects, sizeof(xRectangle));
 | 
			
		||||
        if (!origRecs)
 | 
			
		||||
            return BadAlloc;
 | 
			
		||||
        memcpy((char *) origRecs, (char *) &stuff[1],
 | 
			
		||||
               nrects * sizeof(xRectangle));
 | 
			
		||||
        FOR_NSCREENS_FORWARD(j) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1653,7 +1658,6 @@ PanoramiXPolyArc(ClientPtr client)
 | 
			
		|||
    int result, narcs, i, j;
 | 
			
		||||
    PanoramiXRes *gc, *draw;
 | 
			
		||||
    Bool isRoot;
 | 
			
		||||
    xArc *origArcs;
 | 
			
		||||
 | 
			
		||||
    REQUEST(xPolyArcReq);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1679,7 +1683,9 @@ PanoramiXPolyArc(ClientPtr client)
 | 
			
		|||
        return BadLength;
 | 
			
		||||
    narcs /= sizeof(xArc);
 | 
			
		||||
    if (narcs > 0) {
 | 
			
		||||
        origArcs = calloc(narcs, sizeof(xArc));
 | 
			
		||||
        xArc *origArcs = calloc(narcs, sizeof(xArc));
 | 
			
		||||
        if (!origArcs)
 | 
			
		||||
            return BadAlloc;
 | 
			
		||||
        memcpy((char *) origArcs, (char *) &stuff[1], narcs * sizeof(xArc));
 | 
			
		||||
        FOR_NSCREENS_FORWARD(j) {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1718,7 +1724,6 @@ PanoramiXFillPoly(ClientPtr client)
 | 
			
		|||
    int result, count, j;
 | 
			
		||||
    PanoramiXRes *gc, *draw;
 | 
			
		||||
    Bool isRoot;
 | 
			
		||||
    DDXPointPtr locPts;
 | 
			
		||||
 | 
			
		||||
    REQUEST(xFillPolyReq);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1741,7 +1746,9 @@ PanoramiXFillPoly(ClientPtr client)
 | 
			
		|||
 | 
			
		||||
    count = bytes_to_int32((client->req_len << 2) - sizeof(xFillPolyReq));
 | 
			
		||||
    if (count > 0) {
 | 
			
		||||
        locPts = calloc(count, sizeof(DDXPointRec));
 | 
			
		||||
        DDXPointPtr locPts = calloc(count, sizeof(DDXPointRec));
 | 
			
		||||
        if (!locPts)
 | 
			
		||||
            return BadAlloc;
 | 
			
		||||
        memcpy((char *) locPts, (char *) &stuff[1],
 | 
			
		||||
               count * sizeof(DDXPointRec));
 | 
			
		||||
        FOR_NSCREENS_FORWARD(j) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1784,8 +1791,6 @@ PanoramiXPolyFillRectangle(ClientPtr client)
 | 
			
		|||
    int result, things, i, j;
 | 
			
		||||
    PanoramiXRes *gc, *draw;
 | 
			
		||||
    Bool isRoot;
 | 
			
		||||
    xRectangle *origRects;
 | 
			
		||||
 | 
			
		||||
    REQUEST(xPolyFillRectangleReq);
 | 
			
		||||
 | 
			
		||||
    REQUEST_AT_LEAST_SIZE(xPolyFillRectangleReq);
 | 
			
		||||
| 
						 | 
				
			
			@ -1810,7 +1815,9 @@ PanoramiXPolyFillRectangle(ClientPtr client)
 | 
			
		|||
        return BadLength;
 | 
			
		||||
    things >>= 3;
 | 
			
		||||
    if (things > 0) {
 | 
			
		||||
        origRects = calloc(things, sizeof(xRectangle));
 | 
			
		||||
        xRectangle *origRects = calloc(things, sizeof(xRectangle));
 | 
			
		||||
        if (!origRects)
 | 
			
		||||
            return BadAlloc;
 | 
			
		||||
        memcpy((char *) origRects, (char *) &stuff[1],
 | 
			
		||||
               things * sizeof(xRectangle));
 | 
			
		||||
        FOR_NSCREENS_FORWARD(j) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1851,7 +1858,6 @@ PanoramiXPolyFillArc(ClientPtr client)
 | 
			
		|||
    PanoramiXRes *gc, *draw;
 | 
			
		||||
    Bool isRoot;
 | 
			
		||||
    int result, narcs, i, j;
 | 
			
		||||
    xArc *origArcs;
 | 
			
		||||
 | 
			
		||||
    REQUEST(xPolyFillArcReq);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1877,7 +1883,9 @@ PanoramiXPolyFillArc(ClientPtr client)
 | 
			
		|||
        return BadLength;
 | 
			
		||||
    narcs /= sizeof(xArc);
 | 
			
		||||
    if (narcs > 0) {
 | 
			
		||||
        origArcs = calloc(narcs, sizeof(xArc));
 | 
			
		||||
        xArc *origArcs = calloc(narcs, sizeof(xArc));
 | 
			
		||||
        if (!origArcs)
 | 
			
		||||
            return BadAlloc;
 | 
			
		||||
        memcpy((char *) origArcs, (char *) &stuff[1], narcs * sizeof(xArc));
 | 
			
		||||
        FOR_NSCREENS_FORWARD(j) {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue