)]}'
{
  "commit": "188923f0d1c8148415b3173986cd1e21871c947e",
  "tree": "f62cb81f35c64e98c71caa596a0cd0eebccb8f2d",
  "parents": [
    "b81401c1de0e0fec39f8643ce7a794fda083f7a1"
  ],
  "author": {
    "name": "Jeff King",
    "email": "peff@peff.net",
    "time": "Fri Oct 12 02:22:49 2012 -0400"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Fri Oct 12 09:42:31 2012 -0700"
  },
  "message": "http: fix segfault in handle_curl_result\n\nWhen we create an http active_request_slot, we can set its\n\"results\" pointer back to local storage. The http code will\nfill in the details of how the request went, and we can\naccess those details even after the slot has been cleaned\nup.\n\nCommit 8809703 (http: factor out http error code handling)\nswitched us from accessing our local results struct directly\nto accessing it via the \"results\" pointer of the slot. That\nmeans we\u0027re accessing the slot after it has been marked as\nfinished, defeating the whole purpose of keeping the results\nstorage separate.\n\nMost of the time this doesn\u0027t matter, as finishing the slot\ndoes not actually clean up the pointer. However, when using\ncurl\u0027s multi interface with the dumb-http revision walker,\nwe might actually start a new request before handing control\nback to the original caller. In that case, we may reuse the\nslot, zeroing its results pointer, and leading the original\ncaller to segfault while looking for its results inside the\nslot.\n\nInstead, we need to pass a pointer to our local results\nstorage to the handle_curl_result function, rather than\nrelying on the pointer in the slot struct. This matches what\nthe original code did before the refactoring (which did not\nuse a separate function, and therefore just accessed the\nresults struct directly).\n\nSigned-off-by: Jeff King \u003cpeff@peff.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7c4a4072f24647bd3ab6cb6c24142d31c595bb86",
      "old_mode": 33188,
      "old_path": "http.c",
      "new_id": "9334386d194c5519c43889f261bf35e2efaea7f5",
      "new_mode": 33188,
      "new_path": "http.c"
    },
    {
      "type": "modify",
      "old_id": "12de25597df4077a52a44dace83093091514c10d",
      "old_mode": 33188,
      "old_path": "http.h",
      "new_id": "0bd1e849e1406c8c8a822c6ecc6de84d4b5e1798",
      "new_mode": 33188,
      "new_path": "http.h"
    },
    {
      "type": "modify",
      "old_id": "3ec474fc631eb3b433b3cadbd74aed4b83cba724",
      "old_mode": 33188,
      "old_path": "remote-curl.c",
      "new_id": "6054e47929f0ecc2a2a2465d7ee3413a3842f755",
      "new_mode": 33188,
      "new_path": "remote-curl.c"
    }
  ]
}
