xref: /aosp_15_r20/external/pdfium/third_party/agg23/0002-ubsan-error-fixes.patch (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Workerdiff --git a/third_party/agg23/agg_clip_liang_barsky.h b/third_party/agg23/agg_clip_liang_barsky.h
2*3ac0a46fSAndroid Build Coastguard Workerindex db6ca97..5b1261f 100644
3*3ac0a46fSAndroid Build Coastguard Worker--- a/third_party/agg23/agg_clip_liang_barsky.h
4*3ac0a46fSAndroid Build Coastguard Worker+++ b/third_party/agg23/agg_clip_liang_barsky.h
5*3ac0a46fSAndroid Build Coastguard Worker@@ -20,6 +20,7 @@
6*3ac0a46fSAndroid Build Coastguard Worker #ifndef AGG_CLIP_LIANG_BARSKY_INCLUDED
7*3ac0a46fSAndroid Build Coastguard Worker #define AGG_CLIP_LIANG_BARSKY_INCLUDED
8*3ac0a46fSAndroid Build Coastguard Worker #include "agg_basics.h"
9*3ac0a46fSAndroid Build Coastguard Worker+#include "third_party/base/numerics/safe_math.h"
10*3ac0a46fSAndroid Build Coastguard Worker namespace agg
11*3ac0a46fSAndroid Build Coastguard Worker {
12*3ac0a46fSAndroid Build Coastguard Worker template<class T>
13*3ac0a46fSAndroid Build Coastguard Worker@@ -36,8 +37,18 @@ inline unsigned clip_liang_barsky(T x1, T y1, T x2, T y2,
14*3ac0a46fSAndroid Build Coastguard Worker                                   T* x, T* y)
15*3ac0a46fSAndroid Build Coastguard Worker {
16*3ac0a46fSAndroid Build Coastguard Worker     const float nearzero = 1e-30f;
17*3ac0a46fSAndroid Build Coastguard Worker-    float deltax = (float)(x2 - x1);
18*3ac0a46fSAndroid Build Coastguard Worker-    float deltay = (float)(y2 - y1);
19*3ac0a46fSAndroid Build Coastguard Worker+
20*3ac0a46fSAndroid Build Coastguard Worker+    pdfium::base::CheckedNumeric<float> width = x2;
21*3ac0a46fSAndroid Build Coastguard Worker+    width -= x1;
22*3ac0a46fSAndroid Build Coastguard Worker+    if (!width.IsValid())
23*3ac0a46fSAndroid Build Coastguard Worker+        return 0;
24*3ac0a46fSAndroid Build Coastguard Worker+    pdfium::base::CheckedNumeric<float> height = y2;
25*3ac0a46fSAndroid Build Coastguard Worker+    height -= y1;
26*3ac0a46fSAndroid Build Coastguard Worker+    if (!height.IsValid())
27*3ac0a46fSAndroid Build Coastguard Worker+        return 0;
28*3ac0a46fSAndroid Build Coastguard Worker+
29*3ac0a46fSAndroid Build Coastguard Worker+    float deltax = width.ValueOrDefault(0);
30*3ac0a46fSAndroid Build Coastguard Worker+    float deltay = height.ValueOrDefault(0);
31*3ac0a46fSAndroid Build Coastguard Worker     unsigned np = 0;
32*3ac0a46fSAndroid Build Coastguard Worker     if(deltax == 0) {
33*3ac0a46fSAndroid Build Coastguard Worker         deltax = (x1 > clip_box.x1) ? -nearzero : nearzero;
34