)]}'
{
  "commit": "dcef3bf041c949061878803d3b7c7f7e2373b413",
  "tree": "393a0355bcc6f0feb8dd9534b012e435da22a71f",
  "parents": [
    "94f057755b7941b321fd11fec1b2e3ca5313a4e0"
  ],
  "author": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Sat Jul 25 09:03:24 2026 -0700"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Sat Jul 25 10:13:37 2026 -0700"
  },
  "message": "remote: plug memory leaks\n\nThe in-core data structure used to keep track of\n\u0027url.\u003creal\u003e.{insteadOf,pushInsteadOf} \u003d \u003calias\u003e\u0027 settings is not\nproperly cleaned up when the process is done with it.\n\n\u0027struct rewrites\u0027 is embedded in \u0027remote_state\u0027 and serves as the\ntop level of the rewrite data.  This holds an array of a variable\nnumber of pointers to \u0027struct rewrite\u0027 allocated individually on the\nheap.  Each \u0027struct rewrite\u0027 holds a \u0027.base\u0027 string and an array of\n\u0027struct counted_string\u0027 called \u0027.instead_of\u0027, which is allocated\ncontiguously on the heap.  Each \u0027struct counted_string\u0027 has a\npointer to a string allocated on the heap.\n\nAmid these pointers, rewrites_release() fails to free everything\nother than \u0027struct rewrite\u0027\u0027s \u0027.base\u0027 member and the \u0027struct rewrite\u0027\ninstances themselves.\n\nFix rewrites_release() to also free the contiguous array storing\n\u0027.instead_of\u0027, the string pointers within each \u0027.instead_of\u0027 element,\nand each \u0027struct rewrite\u0027 instance individually allocated on the heap.\n\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a664cd166aa3b910c239645093782f7be475282f",
      "old_mode": 33188,
      "old_path": "remote.c",
      "new_id": "6c84adb36a3f0d52dca5d9bd0bf23f1d86ba60df",
      "new_mode": 33188,
      "new_path": "remote.c"
    }
  ]
}
