)]}'
{
  "commit": "cfe5f8056aa2a4200723e0e109b4265783f5c983",
  "tree": "ecd28fcfb4bdf2534dc54767248e4bfaf444ef4f",
  "parents": [
    "9497f64edbb4b5b51fa27b2cb2601d261a5f6186"
  ],
  "author": {
    "name": "Rulong Chen（陈汝龙）",
    "email": "rulongchen@chromium.org",
    "time": "Thu Jan 08 10:01:23 2026 -0800"
  },
  "committer": {
    "name": "Pdfium LUCI CQ",
    "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Thu Jan 08 10:01:23 2026 -0800"
  },
  "message": "[PDFium] Prevent infinite loop in AGG with degenerate dash patterns\n\nWhen rendering paths with extremely small dash patterns (e.g.,\n[0.000015, 0.000015]), the AGG backend enters a near-infinite loop\nattempting to generate millions of dash segments. This causes the\nrenderer process to hang indefinitely.\n\nThis CL mitigates the issue by detecting degenerate dash patterns in\n`RasterizeStroke()`. If the total length of a dash cycle is less than a\nsafety threshold (0.1f), the dash pattern is ignored, and the path is\nrendered as a solid line.\n\nNote: AGG and Skia render this case differently because Skia\u0027s stroke\npath implementation likely has built-in robustness checks or different\nprecision handling for extremely small dash segments that prevent\ninfinite loops, whereas AGG requires this explicit safety threshold to\navoid hanging.\n\nAdded regression test: bug_467170761.in\n\nBug: 467170761\nChange-Id: I7dbc20945f46f687e7e8b26c0538ffb371a95f00\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/139210\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2a6c52cbd16dab97cdf0ef1257caa03adb742b97",
      "old_mode": 33188,
      "old_path": "core/fxge/agg/cfx_agg_devicedriver.cpp",
      "new_id": "09680a6e92ef254add2282e5dd42ccc33ea0d5d0",
      "new_mode": 33188,
      "new_path": "core/fxge/agg/cfx_agg_devicedriver.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "135bfa2cc18ab07cbacda6227b39d8a761d9256a",
      "new_mode": 33188,
      "new_path": "testing/resources/pixel/bug_467170761.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6517531a7889e9282669f609678a7edc8a30eb9e",
      "new_mode": 33188,
      "new_path": "testing/resources/pixel/bug_467170761_expected_agg.pdf.0.png"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "08497d245ce9e61464ab45e43270aa9b3e08f985",
      "new_mode": 33188,
      "new_path": "testing/resources/pixel/bug_467170761_expected_gdi.pdf.0.png"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "fa3f49f1ded163d90782a76accf1df994129d9db",
      "new_mode": 33188,
      "new_path": "testing/resources/pixel/bug_467170761_expected_skia.pdf.0.png"
    }
  ]
}
