Avoid inifinite loop in agg_math_stroke.h

Loop goes nowhere if `da` == 0.

- Fix indentation while at it.

Bug: pdfium:1629
Change-Id: I8571e097423cf852bbc5de44c5fc5d13b35d6364
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/77270
Reviewed-by: Hui Yingst <nigi@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/third_party/agg23/0009-infinite-loop.patch b/third_party/agg23/0009-infinite-loop.patch
new file mode 100644
index 0000000..d1c22d8
--- /dev/null
+++ b/third_party/agg23/0009-infinite-loop.patch
@@ -0,0 +1,25 @@
+diff --git a/third_party/agg23/agg_math_stroke.h b/third_party/agg23/agg_math_stroke.h
+index 8515d2b16..70d1f2cf9 100644
+--- a/third_party/agg23/agg_math_stroke.h
++++ b/third_party/agg23/agg_math_stroke.h
+@@ -173,6 +173,9 @@ void stroke_calc_cap(VertexConsumer& out_vertices,
+       float a1 = atan2(dy1, -dx1);
+       float a2 = a1 + FX_PI;
+       float da = acos(width / (width + ((1.0f / 8) / approximation_scale))) * 2;
++      if (da < stroke_theta) {
++        da = stroke_theta;
++      }
+       out_vertices.add(coord_type(v0.x - dx1, v0.y + dy1));
+       a1 += da;
+       a2 -= da / 4;
+@@ -180,8 +183,8 @@ void stroke_calc_cap(VertexConsumer& out_vertices,
+         out_vertices.add(
+             coord_type(v0.x + (width * cos(a1)), v0.y + (width * sin(a1))));
+         a1 += da;
+-        }
+-        out_vertices.add(coord_type(v0.x + dx1, v0.y - dy1));
++      }
++      out_vertices.add(coord_type(v0.x + dx1, v0.y - dy1));
+     }
+ }
+ template<class VertexConsumer>
diff --git a/third_party/agg23/README.pdfium b/third_party/agg23/README.pdfium
index 55319e7..d9e3bf5 100644
--- a/third_party/agg23/README.pdfium
+++ b/third_party/agg23/README.pdfium
@@ -25,3 +25,4 @@
 0007-unused-struct.patch: Remove unused struct point_type_flag, which has a
 shadow variable.
 0008-namespace.patch: Wrap all AGG code in namespace pdfium.
+0009-infinite-loop.patch: avoid hang in agg_math_stroke.h
\ No newline at end of file
diff --git a/third_party/agg23/agg_math_stroke.h b/third_party/agg23/agg_math_stroke.h
index 8515d2b..70d1f2c 100644
--- a/third_party/agg23/agg_math_stroke.h
+++ b/third_party/agg23/agg_math_stroke.h
@@ -173,6 +173,9 @@
       float a1 = atan2(dy1, -dx1);
       float a2 = a1 + FX_PI;
       float da = acos(width / (width + ((1.0f / 8) / approximation_scale))) * 2;
+      if (da < stroke_theta) {
+        da = stroke_theta;
+      }
       out_vertices.add(coord_type(v0.x - dx1, v0.y + dy1));
       a1 += da;
       a2 -= da / 4;
@@ -180,8 +183,8 @@
         out_vertices.add(
             coord_type(v0.x + (width * cos(a1)), v0.y + (width * sin(a1))));
         a1 += da;
-        }
-        out_vertices.add(coord_type(v0.x + dx1, v0.y - dy1));
+      }
+      out_vertices.add(coord_type(v0.x + dx1, v0.y - dy1));
     }
 }
 template<class VertexConsumer>