)]}'
{
  "log": [
    {
      "commit": "ce9ce28e5d760e32ab6c894dfaf7b8dad6de7ff6",
      "tree": "4df746aceda760ff26536720ff278ef77be39393",
      "parents": [
        "2f9400b679ffe08f7190781e64edda5edf0f7297"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Jun 03 11:35:48 2014 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Jun 03 17:22:07 2014 -0700"
      },
      "message": "Removes bcopy and bzero from bionic.\n\nThese symbols are still defined for LP32 for binary compatibility, but\nthe declarations have been replaced with the POSIX recommended #defines.\n\nBug: 13935372\nChange-Id: Ief7e6ca012db374588ba5839f11e8f3a13a20467\n"
    },
    {
      "commit": "a89864a20b818621a1da10e88fda815334062f9f",
      "tree": "7ebc6e1cf123c0f9d8ab50e775039e183990110b",
      "parents": [
        "d3bf954e9ffbdee8d732ccb6ad6143dc31b605fc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 01 17:35:49 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 01 17:35:49 2012 -0700"
      },
      "message": "Move non-upstream code into the libc/bionic directory.\n\nI\u0027ll need at least one more pass, because there\u0027s some upstream code\nlurking in libc/bionic, but this is still a step in the right direction.\n\nChange-Id: I55927315972da8327ae01c5240ed587db17e8462\n"
    },
    {
      "commit": "f3913b5b68347ce9a4cb17977df2c33f1e8f6000",
      "tree": "fae959e2f8c146b61eb43af80d9ae4918640d2c0",
      "parents": [
        "86a4fca0b473c49bcbcf2deb6b5822aa9ab9631e"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Jul 12 15:10:03 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Jul 12 15:38:15 2012 -0700"
      },
      "message": "FORTIFY_SOURCE: enhanced memcpy protections.\n\nTwo changes:\n\n1) Detect memory read overruns.\n\nFor example:\n\nint main() {\n  char buf[10];\n  memcpy(buf, \"abcde\", sizeof(buf));\n  sprintf(\"%s\\n\", buf);\n}\n\nbecause \"abcde\" is only 6 bytes, copying 10 bytes from it is a bug.\nThis particular bug will be detected at compile time.  Other similar\nbugs may be detected at runtime.\n\n2) Detect overlapping buffers on memcpy()\n\nIt is a bug to call memcpy() on buffers which overlap. For\nexample, the following code is buggy:\n\n  char buf3[0x800];\n  char *first_half  \u003d \u0026buf3[0x400];\n  char *second_half \u003d \u0026buf3[1];\n  memset(buf3, 0, sizeof(buf3));\n  memcpy(first_half, second_half, 0x400);\n  printf(\"1: %s\\n\", buf3);\n\nWe now detect this at compile and run time.\n\nChange-Id: I092bd89f11f18e08e8a9dda0ca903aaea8e06d91\n"
    },
    {
      "commit": "e64259e860a84c9527ffbe6d9bd2f6eeab6fdac4",
      "tree": "59b3fd8b76808b6e61bc2fa5853757293e2f8452",
      "parents": [
        "6334c662cae4cd9b61f5f3185048b0cd3633dad7"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Jul 11 17:34:04 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Jul 11 17:46:03 2012 -0700"
      },
      "message": "memmove: Don\u0027t call memcpy if regions overlap\n\nmemmove() unconditionally calls memcpy() if \"dst\" \u003c \"src\". For\nexample, in the code below, memmove() would end up calling memcpy(),\neven though the regions of memory overlap.\n\nint main() {\n  char buf3[0x800];\n  char *dst  \u003d \u0026buf3[1];\n  char *src \u003d \u0026buf3[0x400];\n  memset(buf3, 0, sizeof(buf3));\n  memmove(dst, src, 0x400);\n  printf(\"1: %s\\n\", buf3);\n  return 0;\n}\n\nCalling memcpy() on overlaping regions only works if you assume\nthat memcpy() copies from start to finish. On some architectures,\nit\u0027s more efficient to call memcpy() from finish to start.\n\nThis is also triggering a failure in some of my code.\n\nMore reading:\n* http://lwn.net/Articles/414467/\n* https://bugzilla.redhat.com/show_bug.cgi?id\u003d638477#c31 (comment 31)\n\nChange-Id: I65a51ae3a52dd4af335fe5c278056b8c2cbd8948\n"
    },
    {
      "commit": "0f67de14e605f519d74ed6fff67c6712158459d3",
      "tree": "a68c0e239c76d60c6d5dc6f193a485b04553cb35",
      "parents": [
        "9a3305128920e0ff018d267d1bf4f5e58a5146e5"
      ],
      "author": {
        "name": "Johannes Carlsson",
        "email": "johannes.carlsson.x@sonyericsson.com",
        "time": "Thu Feb 03 15:16:15 2011 +0100"
      },
      "committer": {
        "name": "Johan Redestig",
        "email": "johan.redestig@sonyericsson.com",
        "time": "Thu Feb 03 15:17:13 2011 +0100"
      },
      "message": "Use more optimized version of memmove\n\nOn ARM there is currently no assembler optimized memmove in libc.\nThere is however a more optimized bcopy which copies long instead\nof bytes where possible. This almost doubles the performance in\nbest case.\n\nChange-Id: I1f1cd27529443358047c385730deaf938ce4e642\n"
    },
    {
      "commit": "5b81b918173b4bf446c1a85240c094e4dd77231f",
      "tree": "dd4cab2ff2183ab7a13833f343870d57baaa1250",
      "parents": [
        "af00228b705b53165c132a22b30c2d6cbb9acd13"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Thu Oct 07 11:03:32 2010 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Thu Oct 07 11:03:32 2010 +0200"
      },
      "message": "libc: optimize memmove() with memcpy() if possible.\n\nChange-Id: I90e578fdc82e427caee8fa4157ce3f8c6c99926d\n"
    },
    {
      "commit": "af00228b705b53165c132a22b30c2d6cbb9acd13",
      "tree": "b66b8b3ce14c1731e6bebad7fcdc2bf019563d71",
      "parents": [
        "defd162212de3789d2268a1f3339c2a6097fa825"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Sep 28 10:24:20 2010 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Sep 28 10:24:20 2010 -0700"
      },
      "message": "Revert \"libc: memmove(): non-overlapping block optim.\"\n\nThis reverts commit 80fba9a2fe4eacaabee99cf0bbead872c2792231,\nwhich caused the system to not boot anymore, aborting with:\n\"java.lang.RuntimeException: Missing static main on com.android.server.SystemServer\".\n\nChange-Id: I745e0a23c728cccf5f95a3c7642d544478a4e57e\n"
    },
    {
      "commit": "80fba9a2fe4eacaabee99cf0bbead872c2792231",
      "tree": "35cf24d62149365bdad0994d837654e3d05399d9",
      "parents": [
        "b9e49ad56e5776ace7c6eab2e997d5b7acb16792"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Sun Sep 26 22:40:02 2010 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Sep 27 17:34:41 2010 +0200"
      },
      "message": "libc: memmove(): non-overlapping block optim.\n\nChange-Id: I5652f4f97ca59d95176443fc27c737ef76258183\n"
    },
    {
      "commit": "1dc9e472e19acfe6dc7f41e429236e7eef7ceda1",
      "tree": "3be0c520fae17689bbf5584e1136fb820caef26f",
      "parents": [
        "1767f908af327fa388b1c66883760ad851267013"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:28:35 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:28:35 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "1767f908af327fa388b1c66883760ad851267013",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [
        "a799b53f10e5a6fd51fef4436cfb7ec99836a516"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:13 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:13 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "a27d2baa0c1a2ec70f47ea9199b1dd6762c8a349",
      "tree": "defd1cc07d16ad2f3b21154114e092d11c94c5bb",
      "parents": [],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
