Commit 2cca510a authored by Dmitry Timoshkov's avatar Dmitry Timoshkov Committed by Alexandre Julliard

gdiplus: Protect from mixing BrushTypeLinearGradient and BrushTypePathGradient.

parent 65bd8f2b
...@@ -946,7 +946,7 @@ GpStatus WINGDIPAPI GdipGetLineWrapMode(GpLineGradient *brush, GpWrapMode *wrapm ...@@ -946,7 +946,7 @@ GpStatus WINGDIPAPI GdipGetLineWrapMode(GpLineGradient *brush, GpWrapMode *wrapm
{ {
TRACE("(%p, %p)\n", brush, wrapmode); TRACE("(%p, %p)\n", brush, wrapmode);
if(!brush || !wrapmode) if(!brush || !wrapmode || brush->brush.bt != BrushTypeLinearGradient)
return InvalidParameter; return InvalidParameter;
*wrapmode = brush->wrap; *wrapmode = brush->wrap;
...@@ -959,7 +959,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientBlend(GpPathGradient *brush, REAL *blend, ...@@ -959,7 +959,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientBlend(GpPathGradient *brush, REAL *blend,
{ {
TRACE("(%p, %p, %p, %d)\n", brush, blend, positions, count); TRACE("(%p, %p, %p, %d)\n", brush, blend, positions, count);
if(!brush || !blend || !positions || count <= 0) if(!brush || !blend || !positions || count <= 0 || brush->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
if(count < brush->blendcount) if(count < brush->blendcount)
...@@ -977,7 +977,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientBlendCount(GpPathGradient *brush, INT *co ...@@ -977,7 +977,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientBlendCount(GpPathGradient *brush, INT *co
{ {
TRACE("(%p, %p)\n", brush, count); TRACE("(%p, %p)\n", brush, count);
if(!brush || !count) if(!brush || !count || brush->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
*count = brush->blendcount; *count = brush->blendcount;
...@@ -990,7 +990,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientCenterPoint(GpPathGradient *grad, ...@@ -990,7 +990,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientCenterPoint(GpPathGradient *grad,
{ {
TRACE("(%p, %p)\n", grad, point); TRACE("(%p, %p)\n", grad, point);
if(!grad || !point) if(!grad || !point || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
point->X = grad->center.X; point->X = grad->center.X;
...@@ -1025,7 +1025,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientCenterColor(GpPathGradient *grad, ...@@ -1025,7 +1025,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientCenterColor(GpPathGradient *grad,
{ {
TRACE("(%p,%p)\n", grad, colors); TRACE("(%p,%p)\n", grad, colors);
if (!grad || !colors) if (!grad || !colors || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
*colors = grad->centercolor; *colors = grad->centercolor;
...@@ -1038,7 +1038,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientFocusScales(GpPathGradient *grad, ...@@ -1038,7 +1038,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientFocusScales(GpPathGradient *grad,
{ {
TRACE("(%p, %p, %p)\n", grad, x, y); TRACE("(%p, %p, %p)\n", grad, x, y);
if(!grad || !x || !y) if(!grad || !x || !y || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
*x = grad->focus.X; *x = grad->focus.X;
...@@ -1052,7 +1052,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientGammaCorrection(GpPathGradient *grad, ...@@ -1052,7 +1052,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientGammaCorrection(GpPathGradient *grad,
{ {
TRACE("(%p, %p)\n", grad, gamma); TRACE("(%p, %p)\n", grad, gamma);
if(!grad || !gamma) if(!grad || !gamma || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
*gamma = grad->gamma; *gamma = grad->gamma;
...@@ -1077,7 +1077,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient *grad, ...@@ -1077,7 +1077,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient *grad,
{ {
TRACE("(%p, %p)\n", grad, count); TRACE("(%p, %p)\n", grad, count);
if(!grad || !count) if(!grad || !count || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
*count = grad->path->pathdata.Count; *count = grad->path->pathdata.Count;
...@@ -1091,7 +1091,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientRect(GpPathGradient *brush, GpRectF *rect ...@@ -1091,7 +1091,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientRect(GpPathGradient *brush, GpRectF *rect
TRACE("(%p, %p)\n", brush, rect); TRACE("(%p, %p)\n", brush, rect);
if(!brush || !rect) if(!brush || !rect || brush->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
stat = GdipGetPathWorldBounds(brush->path, rect, NULL, NULL); stat = GdipGetPathWorldBounds(brush->path, rect, NULL, NULL);
...@@ -1127,7 +1127,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorsWithCount(GpPathGradient ...@@ -1127,7 +1127,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorsWithCount(GpPathGradient
TRACE("(%p,%p,%p)\n", grad, argb, count); TRACE("(%p,%p,%p)\n", grad, argb, count);
if(!grad || !argb || !count || (*count < grad->path->pathdata.Count)) if(!grad || !argb || !count || (*count < grad->path->pathdata.Count) || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
for (i=0; i<grad->path->pathdata.Count; i++) for (i=0; i<grad->path->pathdata.Count; i++)
...@@ -1147,7 +1147,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorCount(GpPathGradient *brush, ...@@ -1147,7 +1147,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorCount(GpPathGradient *brush,
{ {
TRACE("(%p, %p)\n", brush, count); TRACE("(%p, %p)\n", brush, count);
if (!brush || !count) if (!brush || !count || brush->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
/* Yes, this actually returns the number of points in the path (which is the /* Yes, this actually returns the number of points in the path (which is the
...@@ -1164,7 +1164,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientWrapMode(GpPathGradient *brush, ...@@ -1164,7 +1164,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientWrapMode(GpPathGradient *brush,
{ {
TRACE("(%p, %p)\n", brush, wrapmode); TRACE("(%p, %p)\n", brush, wrapmode);
if(!brush || !wrapmode) if(!brush || !wrapmode || brush->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
*wrapmode = brush->wrap; *wrapmode = brush->wrap;
...@@ -1275,7 +1275,7 @@ GpStatus WINGDIPAPI GdipSetLineBlend(GpLineGradient *brush, ...@@ -1275,7 +1275,7 @@ GpStatus WINGDIPAPI GdipSetLineBlend(GpLineGradient *brush,
TRACE("(%p, %p, %p, %i)\n", brush, factors, positions, count); TRACE("(%p, %p, %p, %i)\n", brush, factors, positions, count);
if(!brush || !factors || !positions || count <= 0 || if(!brush || !factors || !positions || count <= 0 || brush->brush.bt != BrushTypeLinearGradient ||
(count >= 2 && (positions[0] != 0.0f || positions[count-1] != 1.0f))) (count >= 2 && (positions[0] != 0.0f || positions[count-1] != 1.0f)))
return InvalidParameter; return InvalidParameter;
...@@ -1307,7 +1307,7 @@ GpStatus WINGDIPAPI GdipGetLineBlend(GpLineGradient *brush, REAL *factors, ...@@ -1307,7 +1307,7 @@ GpStatus WINGDIPAPI GdipGetLineBlend(GpLineGradient *brush, REAL *factors,
{ {
TRACE("(%p, %p, %p, %i)\n", brush, factors, positions, count); TRACE("(%p, %p, %p, %i)\n", brush, factors, positions, count);
if (!brush || !factors || !positions || count <= 0) if (!brush || !factors || !positions || count <= 0 || brush->brush.bt != BrushTypeLinearGradient)
return InvalidParameter; return InvalidParameter;
if (count < brush->blendcount) if (count < brush->blendcount)
...@@ -1323,7 +1323,7 @@ GpStatus WINGDIPAPI GdipGetLineBlendCount(GpLineGradient *brush, INT *count) ...@@ -1323,7 +1323,7 @@ GpStatus WINGDIPAPI GdipGetLineBlendCount(GpLineGradient *brush, INT *count)
{ {
TRACE("(%p, %p)\n", brush, count); TRACE("(%p, %p)\n", brush, count);
if (!brush || !count) if (!brush || !count || brush->brush.bt != BrushTypeLinearGradient)
return InvalidParameter; return InvalidParameter;
*count = brush->blendcount; *count = brush->blendcount;
...@@ -1336,7 +1336,7 @@ GpStatus WINGDIPAPI GdipSetLineGammaCorrection(GpLineGradient *line, ...@@ -1336,7 +1336,7 @@ GpStatus WINGDIPAPI GdipSetLineGammaCorrection(GpLineGradient *line,
{ {
TRACE("(%p, %d)\n", line, usegamma); TRACE("(%p, %d)\n", line, usegamma);
if(!line) if(!line || line->brush.bt != BrushTypeLinearGradient)
return InvalidParameter; return InvalidParameter;
line->gamma = usegamma; line->gamma = usegamma;
...@@ -1358,7 +1358,7 @@ GpStatus WINGDIPAPI GdipSetLineSigmaBlend(GpLineGradient *line, REAL focus, ...@@ -1358,7 +1358,7 @@ GpStatus WINGDIPAPI GdipSetLineSigmaBlend(GpLineGradient *line, REAL focus,
TRACE("(%p, %0.2f, %0.2f)\n", line, focus, scale); TRACE("(%p, %0.2f, %0.2f)\n", line, focus, scale);
if(!line || focus < 0.0 || focus > 1.0 || scale < 0.0 || scale > 1.0) if(!line || focus < 0.0 || focus > 1.0 || scale < 0.0 || scale > 1.0 || line->brush.bt != BrushTypeLinearGradient)
return InvalidParameter; return InvalidParameter;
/* we want 2 standard deviations */ /* we want 2 standard deviations */
...@@ -1405,7 +1405,7 @@ GpStatus WINGDIPAPI GdipSetLineWrapMode(GpLineGradient *line, ...@@ -1405,7 +1405,7 @@ GpStatus WINGDIPAPI GdipSetLineWrapMode(GpLineGradient *line,
{ {
TRACE("(%p, %d)\n", line, wrap); TRACE("(%p, %d)\n", line, wrap);
if(!line || wrap == WrapModeClamp) if(!line || wrap == WrapModeClamp || line->brush.bt != BrushTypeLinearGradient)
return InvalidParameter; return InvalidParameter;
line->wrap = wrap; line->wrap = wrap;
...@@ -1420,7 +1420,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientBlend(GpPathGradient *brush, GDIPCONST RE ...@@ -1420,7 +1420,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientBlend(GpPathGradient *brush, GDIPCONST RE
TRACE("(%p,%p,%p,%i)\n", brush, blend, pos, count); TRACE("(%p,%p,%p,%i)\n", brush, blend, pos, count);
if(!brush || !blend || !pos || count <= 0 || if(!brush || !blend || !pos || count <= 0 || brush->brush.bt != BrushTypePathGradient ||
(count >= 2 && (pos[0] != 0.0f || pos[count-1] != 1.0f))) (count >= 2 && (pos[0] != 0.0f || pos[count-1] != 1.0f)))
return InvalidParameter; return InvalidParameter;
...@@ -1456,7 +1456,8 @@ GpStatus WINGDIPAPI GdipSetPathGradientLinearBlend(GpPathGradient *brush, ...@@ -1456,7 +1456,8 @@ GpStatus WINGDIPAPI GdipSetPathGradientLinearBlend(GpPathGradient *brush,
TRACE("(%p,%0.2f,%0.2f)\n", brush, focus, scale); TRACE("(%p,%0.2f,%0.2f)\n", brush, focus, scale);
if (!brush) return InvalidParameter; if (!brush || brush->brush.bt != BrushTypePathGradient)
return InvalidParameter;
if (focus != 0.0) if (focus != 0.0)
{ {
...@@ -1486,7 +1487,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientPresetBlend(GpPathGradient *brush, ...@@ -1486,7 +1487,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientPresetBlend(GpPathGradient *brush,
REAL *new_pos; REAL *new_pos;
TRACE("(%p,%p,%p,%i)\n", brush, blend, pos, count); TRACE("(%p,%p,%p,%i)\n", brush, blend, pos, count);
if (!brush || !blend || !pos || count < 2 || if (!brush || !blend || !pos || count < 2 || brush->brush.bt != BrushTypePathGradient ||
pos[0] != 0.0f || pos[count-1] != 1.0f) pos[0] != 0.0f || pos[count-1] != 1.0f)
{ {
return InvalidParameter; return InvalidParameter;
...@@ -1522,7 +1523,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientPresetBlend(GpPathGradient *brush, ...@@ -1522,7 +1523,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientPresetBlend(GpPathGradient *brush,
if (count < 0) if (count < 0)
return OutOfMemory; return OutOfMemory;
if (!brush || !blend || !pos || count < 2) if (!brush || !blend || !pos || count < 2 || brush->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
if (brush->pblendcount == 0) if (brush->pblendcount == 0)
...@@ -1546,7 +1547,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientPresetBlendCount(GpPathGradient *brush, ...@@ -1546,7 +1547,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientPresetBlendCount(GpPathGradient *brush,
{ {
TRACE("(%p,%p)\n", brush, count); TRACE("(%p,%p)\n", brush, count);
if (!brush || !count) if (!brush || !count || brush->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
*count = brush->pblendcount; *count = brush->pblendcount;
...@@ -1559,7 +1560,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientCenterColor(GpPathGradient *grad, ...@@ -1559,7 +1560,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientCenterColor(GpPathGradient *grad,
{ {
TRACE("(%p, %x)\n", grad, argb); TRACE("(%p, %x)\n", grad, argb);
if(!grad) if(!grad || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
grad->centercolor = argb; grad->centercolor = argb;
...@@ -1571,7 +1572,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientCenterPoint(GpPathGradient *grad, ...@@ -1571,7 +1572,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientCenterPoint(GpPathGradient *grad,
{ {
TRACE("(%p, %s)\n", grad, debugstr_pointf(point)); TRACE("(%p, %s)\n", grad, debugstr_pointf(point));
if(!grad || !point) if(!grad || !point || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
grad->center.X = point->X; grad->center.X = point->X;
...@@ -1601,7 +1602,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientFocusScales(GpPathGradient *grad, ...@@ -1601,7 +1602,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientFocusScales(GpPathGradient *grad,
{ {
TRACE("(%p, %.2f, %.2f)\n", grad, x, y); TRACE("(%p, %.2f, %.2f)\n", grad, x, y);
if(!grad) if(!grad || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
grad->focus.X = x; grad->focus.X = x;
...@@ -1615,7 +1616,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientGammaCorrection(GpPathGradient *grad, ...@@ -1615,7 +1616,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientGammaCorrection(GpPathGradient *grad,
{ {
TRACE("(%p, %d)\n", grad, gamma); TRACE("(%p, %d)\n", grad, gamma);
if(!grad) if(!grad || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
grad->gamma = gamma; grad->gamma = gamma;
...@@ -1637,7 +1638,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientSigmaBlend(GpPathGradient *grad, ...@@ -1637,7 +1638,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientSigmaBlend(GpPathGradient *grad,
TRACE("(%p,%0.2f,%0.2f)\n", grad, focus, scale); TRACE("(%p,%0.2f,%0.2f)\n", grad, focus, scale);
if(!grad || focus < 0.0 || focus > 1.0 || scale < 0.0 || scale > 1.0) if(!grad || focus < 0.0 || focus > 1.0 || scale < 0.0 || scale > 1.0 || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
/* we want 2 standard deviations */ /* we want 2 standard deviations */
...@@ -1687,7 +1688,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientSurroundColorsWithCount(GpPathGradient ...@@ -1687,7 +1688,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientSurroundColorsWithCount(GpPathGradient
TRACE("(%p,%p,%p)\n", grad, argb, count); TRACE("(%p,%p,%p)\n", grad, argb, count);
if(!grad || !argb || !count || (*count <= 0) || if(!grad || !argb || !count || (*count <= 0) || grad->brush.bt != BrushTypePathGradient ||
(*count > grad->path->pathdata.Count)) (*count > grad->path->pathdata.Count))
return InvalidParameter; return InvalidParameter;
...@@ -1723,7 +1724,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientWrapMode(GpPathGradient *grad, ...@@ -1723,7 +1724,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientWrapMode(GpPathGradient *grad,
{ {
TRACE("(%p, %d)\n", grad, wrap); TRACE("(%p, %d)\n", grad, wrap);
if(!grad) if(!grad || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
grad->wrap = wrap; grad->wrap = wrap;
...@@ -1736,7 +1737,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientTransform(GpPathGradient *grad, ...@@ -1736,7 +1737,7 @@ GpStatus WINGDIPAPI GdipSetPathGradientTransform(GpPathGradient *grad,
{ {
TRACE("(%p,%p)\n", grad, matrix); TRACE("(%p,%p)\n", grad, matrix);
if (!grad || !matrix) if (!grad || !matrix || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
grad->transform = *matrix; grad->transform = *matrix;
...@@ -1749,7 +1750,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientTransform(GpPathGradient *grad, ...@@ -1749,7 +1750,7 @@ GpStatus WINGDIPAPI GdipGetPathGradientTransform(GpPathGradient *grad,
{ {
TRACE("(%p,%p)\n", grad, matrix); TRACE("(%p,%p)\n", grad, matrix);
if (!grad || !matrix) if (!grad || !matrix || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
*matrix = grad->transform; *matrix = grad->transform;
...@@ -1762,7 +1763,7 @@ GpStatus WINGDIPAPI GdipMultiplyPathGradientTransform(GpPathGradient *grad, ...@@ -1762,7 +1763,7 @@ GpStatus WINGDIPAPI GdipMultiplyPathGradientTransform(GpPathGradient *grad,
{ {
TRACE("(%p,%p,%i)\n", grad, matrix, order); TRACE("(%p,%p,%i)\n", grad, matrix, order);
if (!grad) if (!grad || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
return GdipMultiplyMatrix(&grad->transform, matrix, order); return GdipMultiplyMatrix(&grad->transform, matrix, order);
...@@ -1772,7 +1773,7 @@ GpStatus WINGDIPAPI GdipResetPathGradientTransform(GpPathGradient *grad) ...@@ -1772,7 +1773,7 @@ GpStatus WINGDIPAPI GdipResetPathGradientTransform(GpPathGradient *grad)
{ {
TRACE("(%p)\n", grad); TRACE("(%p)\n", grad);
if (!grad) if (!grad || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
return GdipSetMatrixElements(&grad->transform, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0); return GdipSetMatrixElements(&grad->transform, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0);
...@@ -1783,7 +1784,7 @@ GpStatus WINGDIPAPI GdipRotatePathGradientTransform(GpPathGradient *grad, ...@@ -1783,7 +1784,7 @@ GpStatus WINGDIPAPI GdipRotatePathGradientTransform(GpPathGradient *grad,
{ {
TRACE("(%p,%0.2f,%i)\n", grad, angle, order); TRACE("(%p,%0.2f,%i)\n", grad, angle, order);
if (!grad) if (!grad || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
return GdipRotateMatrix(&grad->transform, angle, order); return GdipRotateMatrix(&grad->transform, angle, order);
...@@ -1794,7 +1795,7 @@ GpStatus WINGDIPAPI GdipScalePathGradientTransform(GpPathGradient *grad, ...@@ -1794,7 +1795,7 @@ GpStatus WINGDIPAPI GdipScalePathGradientTransform(GpPathGradient *grad,
{ {
TRACE("(%p,%0.2f,%0.2f,%i)\n", grad, sx, sy, order); TRACE("(%p,%0.2f,%0.2f,%i)\n", grad, sx, sy, order);
if (!grad) if (!grad || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
return GdipScaleMatrix(&grad->transform, sx, sy, order); return GdipScaleMatrix(&grad->transform, sx, sy, order);
...@@ -1805,7 +1806,7 @@ GpStatus WINGDIPAPI GdipTranslatePathGradientTransform(GpPathGradient *grad, ...@@ -1805,7 +1806,7 @@ GpStatus WINGDIPAPI GdipTranslatePathGradientTransform(GpPathGradient *grad,
{ {
TRACE("(%p,%0.2f,%0.2f,%i)\n", grad, dx, dy, order); TRACE("(%p,%0.2f,%0.2f,%i)\n", grad, dx, dy, order);
if (!grad) if (!grad || grad->brush.bt != BrushTypePathGradient)
return InvalidParameter; return InvalidParameter;
return GdipTranslateMatrix(&grad->transform, dx, dy, order); return GdipTranslateMatrix(&grad->transform, dx, dy, order);
...@@ -1860,7 +1861,7 @@ GpStatus WINGDIPAPI GdipSetLineColors(GpLineGradient *brush, ARGB color1, ...@@ -1860,7 +1861,7 @@ GpStatus WINGDIPAPI GdipSetLineColors(GpLineGradient *brush, ARGB color1,
{ {
TRACE("(%p, %x, %x)\n", brush, color1, color2); TRACE("(%p, %x, %x)\n", brush, color1, color2);
if(!brush) if(!brush || brush->brush.bt != BrushTypeLinearGradient)
return InvalidParameter; return InvalidParameter;
brush->startcolor = color1; brush->startcolor = color1;
...@@ -1873,7 +1874,7 @@ GpStatus WINGDIPAPI GdipGetLineColors(GpLineGradient *brush, ARGB *colors) ...@@ -1873,7 +1874,7 @@ GpStatus WINGDIPAPI GdipGetLineColors(GpLineGradient *brush, ARGB *colors)
{ {
TRACE("(%p, %p)\n", brush, colors); TRACE("(%p, %p)\n", brush, colors);
if(!brush || !colors) if(!brush || !colors || brush->brush.bt != BrushTypeLinearGradient)
return InvalidParameter; return InvalidParameter;
colors[0] = brush->startcolor; colors[0] = brush->startcolor;
...@@ -1935,7 +1936,7 @@ GpStatus WINGDIPAPI GdipSetLinePresetBlend(GpLineGradient *brush, ...@@ -1935,7 +1936,7 @@ GpStatus WINGDIPAPI GdipSetLinePresetBlend(GpLineGradient *brush,
REAL *new_pos; REAL *new_pos;
TRACE("(%p,%p,%p,%i)\n", brush, blend, positions, count); TRACE("(%p,%p,%p,%i)\n", brush, blend, positions, count);
if (!brush || !blend || !positions || count < 2 || if (!brush || !blend || !positions || count < 2 || brush->brush.bt != BrushTypeLinearGradient ||
positions[0] != 0.0f || positions[count-1] != 1.0f) positions[0] != 0.0f || positions[count-1] != 1.0f)
{ {
return InvalidParameter; return InvalidParameter;
...@@ -1966,7 +1967,7 @@ GpStatus WINGDIPAPI GdipSetLinePresetBlend(GpLineGradient *brush, ...@@ -1966,7 +1967,7 @@ GpStatus WINGDIPAPI GdipSetLinePresetBlend(GpLineGradient *brush,
GpStatus WINGDIPAPI GdipGetLinePresetBlend(GpLineGradient *brush, GpStatus WINGDIPAPI GdipGetLinePresetBlend(GpLineGradient *brush,
ARGB *blend, REAL* positions, INT count) ARGB *blend, REAL* positions, INT count)
{ {
if (!brush || !blend || !positions || count < 2) if (!brush || !blend || !positions || count < 2 || brush->brush.bt != BrushTypeLinearGradient)
return InvalidParameter; return InvalidParameter;
if (brush->pblendcount == 0) if (brush->pblendcount == 0)
...@@ -1984,7 +1985,7 @@ GpStatus WINGDIPAPI GdipGetLinePresetBlend(GpLineGradient *brush, ...@@ -1984,7 +1985,7 @@ GpStatus WINGDIPAPI GdipGetLinePresetBlend(GpLineGradient *brush,
GpStatus WINGDIPAPI GdipGetLinePresetBlendCount(GpLineGradient *brush, GpStatus WINGDIPAPI GdipGetLinePresetBlendCount(GpLineGradient *brush,
INT *count) INT *count)
{ {
if (!brush || !count) if (!brush || !count || brush->brush.bt != BrushTypeLinearGradient)
return InvalidParameter; return InvalidParameter;
*count = brush->pblendcount; *count = brush->pblendcount;
...@@ -2086,7 +2087,7 @@ GpStatus WINGDIPAPI GdipGetLineRect(GpLineGradient *brush, GpRectF *rect) ...@@ -2086,7 +2087,7 @@ GpStatus WINGDIPAPI GdipGetLineRect(GpLineGradient *brush, GpRectF *rect)
{ {
TRACE("(%p, %p)\n", brush, rect); TRACE("(%p, %p)\n", brush, rect);
if(!brush || !rect) if(!brush || !rect || brush->brush.bt != BrushTypeLinearGradient)
return InvalidParameter; return InvalidParameter;
*rect = brush->rect; *rect = brush->rect;
...@@ -2123,7 +2124,7 @@ GpStatus WINGDIPAPI GdipRotateLineTransform(GpLineGradient* brush, ...@@ -2123,7 +2124,7 @@ GpStatus WINGDIPAPI GdipRotateLineTransform(GpLineGradient* brush,
TRACE("(%p,%0.2f,%u)\n", brush, angle, order); TRACE("(%p,%0.2f,%u)\n", brush, angle, order);
if(!brush) if(!brush || brush->brush.bt != BrushTypeLinearGradient)
return InvalidParameter; return InvalidParameter;
if(!(calls++)) if(!(calls++))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment