summaryrefslogtreecommitdiff
path: root/third_party/agg23/0004-ubsan-sweep-scanline-error.patch
blob: 3348f0500bda46c38bc1a0b9efc6a3ebd38d7ca8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
diff --git a/third_party/agg23/agg_rasterizer_scanline_aa.h b/third_party/agg23/agg_rasterizer_scanline_aa.h
index c747ee379..da166bb14 100644
--- a/third_party/agg23/agg_rasterizer_scanline_aa.h
+++ b/third_party/agg23/agg_rasterizer_scanline_aa.h
@@ -349,14 +349,14 @@ public:
                     cover += cur_cell->cover;
                 }
                 if(area) {
-                    alpha = calculate_alpha((cover << (poly_base_shift + 1)) - area, no_smooth);
+                    alpha = calculate_alpha(calculate_area(cover, poly_base_shift + 1) - area, no_smooth);
                     if(alpha) {
                         sl.add_cell(x, alpha);
                     }
                     x++;
                 }
                 if(num_cells && cur_cell->x > x) {
-                    alpha = calculate_alpha(cover << (poly_base_shift + 1), no_smooth);
+                    alpha = calculate_alpha(calculate_area(cover, poly_base_shift + 1), no_smooth);
                     if(alpha) {
                         sl.add_span(x, cur_cell->x - x, alpha);
                     }
@@ -458,6 +458,11 @@ private:
         m_prev_x = x;
         m_prev_y = y;
     }
+    static int calculate_area(int cover, int shift) {
+        unsigned int result = cover;
+        result <<= shift;
+        return result;
+    }
 private:
     outline_aa     m_outline;
     filling_rule_e m_filling_rule;