double
angle,
factor,
+ points_extent,
primitive_extent;
DrawInfo
proceed;
MagickSizeType
- length,
number_points;
MagickStatusType
/*
Speculate how many points our primitive might consume.
*/
- length=primitive_info[j].coordinates;
+ points_extent=primitive_info[j].coordinates;
switch (primitive_type)
{
case RectanglePrimitive:
{
- length*=5;
+ points_extent*=5;
break;
}
case RoundRectanglePrimitive:
alpha=bounds.x2-bounds.x1;
beta=bounds.y2-bounds.y1;
radius=hypot((double) alpha,(double) beta);
- length*=5;
- length+=2*((size_t) ceil((double) MagickPI*radius))+6*BezierQuantum+360;
+ points_extent*=5;
+ points_extent+=2*ceil((double) MagickPI*radius)+6*BezierQuantum+360;
break;
}
case BezierPrimitive:
if (primitive_info[j].coordinates > 107)
(void) ThrowMagickException(exception,GetMagickModule(),DrawError,
"TooManyBezierCoordinates","`%s'",token);
- length=BezierQuantum*primitive_info[j].coordinates;
+ points_extent=BezierQuantum*primitive_info[j].coordinates;
break;
}
case PathPrimitive:
*t;
GetNextToken(q,&q,extent,token);
- length=1;
+ points_extent=1;
t=token;
for (s=token; *s != '\0'; s=t)
{
t++;
continue;
}
- length++;
+ points_extent++;
}
- length=length*BezierQuantum;
+ points_extent=points_extent*BezierQuantum;
break;
}
case CirclePrimitive:
alpha=bounds.x2-bounds.x1;
beta=bounds.y2-bounds.y1;
radius=hypot((double) alpha,(double) beta);
- length=2*((size_t) ceil((double) MagickPI*radius))+6*BezierQuantum+360;
+ points_extent=2*ceil((double) MagickPI*radius)+6*BezierQuantum+360;
break;
}
default:
break;
}
- if ((i+length) >= number_points)
+ if (((size_t) points_extent) < points_extent)
+ {
+ (void) ThrowMagickException(exception,GetMagickModule(),
+ ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+ break;
+ }
+ if ((i+points_extent) >= number_points)
{
/*
Resize based on speculative points required by primitive.
*/
- number_points+=length+1;
+ number_points+=points_extent+1;
primitive_info=(PrimitiveInfo *) ResizeQuantumMemory(primitive_info,
(size_t) number_points,sizeof(*primitive_info));
if ((primitive_info == (PrimitiveInfo *) NULL) ||