xref: /aosp_15_r20/external/pdfium/third_party/agg23/0004-ubsan-sweep-scanline-error.patch (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Workerdiff --git a/third_party/agg23/agg_rasterizer_scanline_aa.cpp b/third_party/agg23/agg_rasterizer_scanline_aa.cpp
2*3ac0a46fSAndroid Build Coastguard Workerindex c90bdafdd..1fe9a0c32 100644
3*3ac0a46fSAndroid Build Coastguard Worker--- a/third_party/agg23/agg_rasterizer_scanline_aa.cpp
4*3ac0a46fSAndroid Build Coastguard Worker+++ b/third_party/agg23/agg_rasterizer_scanline_aa.cpp
5*3ac0a46fSAndroid Build Coastguard Worker@@ -495,4 +495,11 @@ void outline_aa::sort_cells()
6*3ac0a46fSAndroid Build Coastguard Worker     }
7*3ac0a46fSAndroid Build Coastguard Worker     m_sorted = true;
8*3ac0a46fSAndroid Build Coastguard Worker }
9*3ac0a46fSAndroid Build Coastguard Worker+// static
10*3ac0a46fSAndroid Build Coastguard Worker+int rasterizer_scanline_aa::calculate_area(int cover, int shift)
11*3ac0a46fSAndroid Build Coastguard Worker+{
12*3ac0a46fSAndroid Build Coastguard Worker+    unsigned int result = cover;
13*3ac0a46fSAndroid Build Coastguard Worker+    result <<= shift;
14*3ac0a46fSAndroid Build Coastguard Worker+    return result;
15*3ac0a46fSAndroid Build Coastguard Worker+}
16*3ac0a46fSAndroid Build Coastguard Worker }
17*3ac0a46fSAndroid Build Coastguard Workerdiff --git a/third_party/agg23/agg_rasterizer_scanline_aa.h b/third_party/agg23/agg_rasterizer_scanline_aa.h
18*3ac0a46fSAndroid Build Coastguard Workerindex c747ee379..281933710 100644
19*3ac0a46fSAndroid Build Coastguard Worker--- a/third_party/agg23/agg_rasterizer_scanline_aa.h
20*3ac0a46fSAndroid Build Coastguard Worker+++ b/third_party/agg23/agg_rasterizer_scanline_aa.h
21*3ac0a46fSAndroid Build Coastguard Worker@@ -338,7 +338,6 @@ public:
22*3ac0a46fSAndroid Build Coastguard Worker                 const cell_aa* cur_cell = *cells;
23*3ac0a46fSAndroid Build Coastguard Worker                 int x    = cur_cell->x;
24*3ac0a46fSAndroid Build Coastguard Worker                 int area = cur_cell->area;
25*3ac0a46fSAndroid Build Coastguard Worker-                unsigned alpha;
26*3ac0a46fSAndroid Build Coastguard Worker                 cover += cur_cell->cover;
27*3ac0a46fSAndroid Build Coastguard Worker                 while(--num_cells) {
28*3ac0a46fSAndroid Build Coastguard Worker                     cur_cell = *++cells;
29*3ac0a46fSAndroid Build Coastguard Worker@@ -349,14 +348,14 @@ public:
30*3ac0a46fSAndroid Build Coastguard Worker                     cover += cur_cell->cover;
31*3ac0a46fSAndroid Build Coastguard Worker                 }
32*3ac0a46fSAndroid Build Coastguard Worker                 if(area) {
33*3ac0a46fSAndroid Build Coastguard Worker-                    alpha = calculate_alpha((cover << (poly_base_shift + 1)) - area, no_smooth);
34*3ac0a46fSAndroid Build Coastguard Worker+                    unsigned alpha = calculate_alpha(calculate_area(cover, poly_base_shift + 1) - area, no_smooth);
35*3ac0a46fSAndroid Build Coastguard Worker                     if(alpha) {
36*3ac0a46fSAndroid Build Coastguard Worker                         sl.add_cell(x, alpha);
37*3ac0a46fSAndroid Build Coastguard Worker                     }
38*3ac0a46fSAndroid Build Coastguard Worker                     x++;
39*3ac0a46fSAndroid Build Coastguard Worker                 }
40*3ac0a46fSAndroid Build Coastguard Worker                 if(num_cells && cur_cell->x > x) {
41*3ac0a46fSAndroid Build Coastguard Worker-                    alpha = calculate_alpha(cover << (poly_base_shift + 1), no_smooth);
42*3ac0a46fSAndroid Build Coastguard Worker+                    unsigned alpha = calculate_alpha(calculate_area(cover, poly_base_shift + 1), no_smooth);
43*3ac0a46fSAndroid Build Coastguard Worker                     if(alpha) {
44*3ac0a46fSAndroid Build Coastguard Worker                         sl.add_span(x, cur_cell->x - x, alpha);
45*3ac0a46fSAndroid Build Coastguard Worker                     }
46*3ac0a46fSAndroid Build Coastguard Worker@@ -459,6 +458,8 @@ private:
47*3ac0a46fSAndroid Build Coastguard Worker         m_prev_y = y;
48*3ac0a46fSAndroid Build Coastguard Worker     }
49*3ac0a46fSAndroid Build Coastguard Worker private:
50*3ac0a46fSAndroid Build Coastguard Worker+    static int calculate_area(int cover, int shift);
51*3ac0a46fSAndroid Build Coastguard Worker+
52*3ac0a46fSAndroid Build Coastguard Worker     outline_aa     m_outline;
53*3ac0a46fSAndroid Build Coastguard Worker     filling_rule_e m_filling_rule;
54*3ac0a46fSAndroid Build Coastguard Worker     int            m_clipped_start_x;
55