Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-07-27 15:05:08 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-07-27 15:05:08 +0400
commit9a2d862123913ad015eac287d245efed5072ff48 (patch)
tree6b7e904438231b037317879163125a14fe2be5b8 /source
parent915fdd67dfff68c70b617c174e21d074335dee36 (diff)
clamp mask resolution, the occasional crash would happen failing to alloc when adding feather points very close together.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_mask.h2
-rw-r--r--source/blender/blenkernel/intern/mask.c12
2 files changed, 14 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_mask.h b/source/blender/blenkernel/BKE_mask.h
index 76b6d25ceed..a20bd9c2062 100644
--- a/source/blender/blenkernel/BKE_mask.h
+++ b/source/blender/blenkernel/BKE_mask.h
@@ -214,6 +214,8 @@ void BKE_mask_init_layers(Mask *mask, struct layer_init_data *mlayer_data, int w
#define MASKPOINT_SEL_HANDLE(p) { (p)->bezt.f1 |= SELECT; (p)->bezt.f3 |= SELECT; } (void)0
#define MASKPOINT_DESEL_HANDLE(p) { (p)->bezt.f1 &= ~SELECT; (p)->bezt.f3 &= ~SELECT; } (void)0
+#define MASK_RESOL_MAX 128
+
/* disable to test alternate rasterizer */
/* #define USE_RASKTER */
diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c
index 3c008692cbb..df38cc9571f 100644
--- a/source/blender/blenkernel/intern/mask.c
+++ b/source/blender/blenkernel/intern/mask.c
@@ -301,6 +301,12 @@ int BKE_mask_spline_resolution(MaskSpline *spline, int width, int height)
resol = MAX2(resol, cur_resol);
}
+ BLI_assert(resol > 0);
+
+ if (resol > MASK_RESOL_MAX) {
+ resol = MASK_RESOL_MAX;
+ }
+
return resol;
}
@@ -331,6 +337,12 @@ int BKE_mask_spline_feather_resolution(MaskSpline *spline, int width, int height
resol += max_jump / max_segment;
+ BLI_assert(resol > 0);
+
+ if (resol > MASK_RESOL_MAX) {
+ resol = MASK_RESOL_MAX;
+ }
+
return resol;
}