From 0c9ffcfa1475dd6f8e42c4029d66ed6c82aa9d22 Mon Sep 17 00:00:00 2001 From: Stanislau Tsitsianok Date: Sun, 2 May 2021 17:12:07 +0300 Subject: [PATCH] Fixed #5432 --- src/libImaging/Draw.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/libImaging/Draw.c b/src/libImaging/Draw.c index b6f63b7e8..004ff0fe5 100644 --- a/src/libImaging/Draw.c +++ b/src/libImaging/Draw.c @@ -1347,6 +1347,22 @@ pie_init(clip_ellipse_state *s, int32_t a, int32_t b, int32_t w, float al, float s->root->l = lc; s->root->r = rc; s->root->type = ar - al < 180 ? CT_AND : CT_OR; + + // add one more semiplane to avoid spikes + if (ar - al < 90) { + clip_node *old_root = s->root; + clip_node *spike_clipper = s->nodes + s->node_count++; + s->root = s->nodes + s->node_count++; + s->root->l = old_root; + s->root->r = spike_clipper; + s->root->type = CT_AND; + + spike_clipper->l = spike_clipper->r = NULL; + spike_clipper->type = CT_CLIP; + spike_clipper->a = (xl + xr) / 2.0; + spike_clipper->b = (yl + yr) / 2.0; + spike_clipper->c = 0; + } } void