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 d2b6a46e4..2f19a1816 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@@ -227,10 +227,27 @@ AGG_INLINE void outline_aa::render_hline(int ey, int x1, int y1, int x2, int y2) 6*3ac0a46fSAndroid Build Coastguard Worker void outline_aa::render_line(int x1, int y1, int x2, int y2) 7*3ac0a46fSAndroid Build Coastguard Worker { 8*3ac0a46fSAndroid Build Coastguard Worker enum dx_limit_e { dx_limit = 16384 << poly_base_shift }; 9*3ac0a46fSAndroid Build Coastguard Worker- int dx = x2 - x1; 10*3ac0a46fSAndroid Build Coastguard Worker+ pdfium::base::CheckedNumeric<int> safe_dx = x2; 11*3ac0a46fSAndroid Build Coastguard Worker+ safe_dx -= x1; 12*3ac0a46fSAndroid Build Coastguard Worker+ if (!safe_dx.IsValid()) 13*3ac0a46fSAndroid Build Coastguard Worker+ return; 14*3ac0a46fSAndroid Build Coastguard Worker+ 15*3ac0a46fSAndroid Build Coastguard Worker+ int dx = safe_dx.ValueOrDie(); 16*3ac0a46fSAndroid Build Coastguard Worker if(dx >= dx_limit || dx <= -dx_limit) { 17*3ac0a46fSAndroid Build Coastguard Worker- int cx = (x1 + x2) >> 1; 18*3ac0a46fSAndroid Build Coastguard Worker- int cy = (y1 + y2) >> 1; 19*3ac0a46fSAndroid Build Coastguard Worker+ pdfium::base::CheckedNumeric<int> safe_cx = x1; 20*3ac0a46fSAndroid Build Coastguard Worker+ safe_cx += x2; 21*3ac0a46fSAndroid Build Coastguard Worker+ safe_cx /= 2; 22*3ac0a46fSAndroid Build Coastguard Worker+ if (!safe_cx.IsValid()) 23*3ac0a46fSAndroid Build Coastguard Worker+ return; 24*3ac0a46fSAndroid Build Coastguard Worker+ 25*3ac0a46fSAndroid Build Coastguard Worker+ pdfium::base::CheckedNumeric<int> safe_cy = y1; 26*3ac0a46fSAndroid Build Coastguard Worker+ safe_cy += y2; 27*3ac0a46fSAndroid Build Coastguard Worker+ safe_cy /= 2; 28*3ac0a46fSAndroid Build Coastguard Worker+ if (!safe_cy.IsValid()) 29*3ac0a46fSAndroid Build Coastguard Worker+ return; 30*3ac0a46fSAndroid Build Coastguard Worker+ 31*3ac0a46fSAndroid Build Coastguard Worker+ int cx = safe_cx.ValueOrDie(); 32*3ac0a46fSAndroid Build Coastguard Worker+ int cy = safe_cy.ValueOrDie(); 33*3ac0a46fSAndroid Build Coastguard Worker render_line(x1, y1, cx, cy); 34*3ac0a46fSAndroid Build Coastguard Worker render_line(cx, cy, x2, y2); 35*3ac0a46fSAndroid Build Coastguard Worker } 36