)]}'
{
  "commit": "c4acdf40033fc7bedba3ec6449b7a750b1fe5f24",
  "tree": "302c8ead92e4b163d156318c0e506b46b0b03964",
  "parents": [
    "3273d03562abb69b61e23fe6bfa3c7661905655e"
  ],
  "author": {
    "name": "Alex Deymo",
    "email": "deymo@chromium.org",
    "time": "Wed May 28 21:07:10 2014 -0700"
  },
  "committer": {
    "name": "chrome-internal-fetch",
    "email": "chrome-internal-fetch@google.com",
    "time": "Fri May 30 07:20:20 2014 +0000"
  },
  "message": "Fix memory leak on HttpFetcher and ProxyResolver.\n\nThe current HttpFetcher and ProxyResolver code uses\ngoogle::protobuf::Closure callbacks created with NewCallback. These\ncallbacks will self-delete them when you call Run(), leaking the\ncallback if that doesn\u0027t happens.\n\nThis patch replaces all the NewCallback() calls by\nNewPermanentCallback(), which won\u0027t delete the callback after running\nit. It then adds a new utils::GlibDestroyClosure() function to use in\nconjunction with the existing utils::GlibRunClosure() to schedule\ncallbacks from the glib main loop without leaking them.\n\nFinally, this patch fixes a use-after-free on the\nAbortingHttpFetcherTestDelegate class only affecting unit tests.\n\nOther minor linting errors fixed.\n\nBUG\u003dchromium:378548\nTEST\u003d`FEATURES\u003d\"test\" USE\u003d\"clang asan\" emerge-link update_engine` doesn\u0027t complain about HttpFetcher.\n\nChange-Id: Ica3265aca42f07811b7dff6131f9a43ab06269aa\nReviewed-on: https://chromium-review.googlesource.com/202062\nTested-by: Alex Deymo \u003cdeymo@chromium.org\u003e\nReviewed-by: Gilad Arnold \u003cgarnold@chromium.org\u003e\nCommit-Queue: Alex Deymo \u003cdeymo@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "94b9daef6efbe0062df39fe68a282c81ba6e7f67",
      "old_mode": 33188,
      "old_path": "chrome_browser_proxy_resolver.cc",
      "new_id": "4f7b8bd6d1340c4f38b2e652b6520d2373a0a292",
      "new_mode": 33188,
      "new_path": "chrome_browser_proxy_resolver.cc"
    },
    {
      "type": "modify",
      "old_id": "b59f988eb75f1351dfc31b0a739dd5505059a67c",
      "old_mode": 33188,
      "old_path": "http_fetcher.cc",
      "new_id": "2dd6ec453b71532be646a3f8062d052d19a5dfc4",
      "new_mode": 33188,
      "new_path": "http_fetcher.cc"
    },
    {
      "type": "modify",
      "old_id": "74c6a16135023dcec73706035013c3c4ccf1db50",
      "old_mode": 33188,
      "old_path": "http_fetcher_unittest.cc",
      "new_id": "d7713c5400d7229d3a2c460813148af928113ef7",
      "new_mode": 33188,
      "new_path": "http_fetcher_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "2c3fd4da8802d58083906defe3188952219fbe38",
      "old_mode": 33188,
      "old_path": "libcurl_http_fetcher.cc",
      "new_id": "be5df4178f3b7d250c210a8f1a2334714ba34db5",
      "new_mode": 33188,
      "new_path": "libcurl_http_fetcher.cc"
    },
    {
      "type": "modify",
      "old_id": "43754beb6b981e78f36db40039075a6ddfb32967",
      "old_mode": 33188,
      "old_path": "proxy_resolver.cc",
      "new_id": "f9905bb76daccbac3da46964293d6ae40642636b",
      "new_mode": 33188,
      "new_path": "proxy_resolver.cc"
    },
    {
      "type": "modify",
      "old_id": "b32a369d0b70e40ff5886efedd8ac776cd745e8e",
      "old_mode": 33188,
      "old_path": "utils.cc",
      "new_id": "2664f9c2f79c11b282c4fd7a6c85dfe94ae6cb24",
      "new_mode": 33188,
      "new_path": "utils.cc"
    },
    {
      "type": "modify",
      "old_id": "e83db5cc86e1ec6ff8605d5662b7c6adc8ffaf9c",
      "old_mode": 33188,
      "old_path": "utils.h",
      "new_id": "d2a0fc2131ce688e027fc879dbf2f34218bd948d",
      "new_mode": 33188,
      "new_path": "utils.h"
    }
  ]
}
