)]}'
{
  "commit": "6c4a8d7a3b1e63054fd35710ee4c9e3bc177bf4a",
  "tree": "228c0874451f703a9b4d763a830575df95939081",
  "parents": [
    "c49e871b02ce8e566455573ae7b074094a079773"
  ],
  "author": {
    "name": "Maxim Smyatkin",
    "email": "smyatkinmaxim@gmail.com",
    "time": "Sat May 16 21:19:06 2026 +0300"
  },
  "committer": {
    "name": "Jianghua.yjh",
    "email": "yjhjstz@gmail.com",
    "time": "Thu May 21 06:41:53 2026 -0700"
  },
  "message": "Fix infinite loops in replaceStringInfoString\n\nThe function had a few problems:\n- replace \u003d\"a\" and replacement\u003d\"ab\" would give an infinite loop leading\n  to OOM. We have a similar case in pg_dump: replace\u003d\"range\",\n  replacement\u003d\"multirange\"\n- Copying the whole string each time there is a match\n- Empty replace pattern also leads to infinite loop\n\nWe can still do better: for example count number of matches and do a\nsingle allocation, or even run the replacement inplace. But it\u0027s\nprobably not worth it.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f177516c26fda43f8a693460e50c219236314217",
      "old_mode": 33188,
      "old_path": "src/common/stringinfo.c",
      "new_id": "e458f821a0cef2209154202a89b9a4c45aff2e0a",
      "new_mode": 33188,
      "new_path": "src/common/stringinfo.c"
    }
  ]
}
