)]}'
{
  "log": [
    {
      "commit": "13f26a7b2bff5ed88b925b7206256e07596f3626",
      "tree": "ea09999fc3508607d5bae97bbe0cf58edc23eed4",
      "parents": [
        "9817c6c0cfa01f6bf7e0700e2b7aab2c1220fe28"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 13 13:47:58 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 13 17:13:21 2016 -0800"
      },
      "message": "Add method to run fortified versions of funcs.\n\nAdd a way to turn fortify off for the files that test fortify functions.\n\nThis method involves simply compiling the same file with fortify off and\nchanging the test name slightly.\n\nIt\u0027s not very pretty, and it assumes that only these few files test\nfunctions that can be fortified.\n\nBug: 15195631\nChange-Id: Iba9db1d508b7d28a1d6968019cb70fe08864827b\n"
    },
    {
      "commit": "fdfcfce7c6392d32f95a9f776ecd13da205b906c",
      "tree": "2195834870f5c0ecda99c8f6354f974211eb6d66",
      "parents": [
        "1399759118f50071d499f88b18828e36aa2bad00"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Sep 23 22:09:09 2015 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Sep 24 14:17:36 2015 -0700"
      },
      "message": "Fix over read in strcpy/stpcpy/strcat.\n\nThis bug will happen when these circumstances are met:\n\n- Destination address \u0026 0x7 \u003d\u003d 1, strlen of src is 11, 12, 13.\n- Destination address \u0026 0x7 \u003d\u003d 2, strlen of src is 10, 11, 12.\n- Destination address \u0026 0x7 \u003d\u003d 3, strlen of src is 9, 10, 11.\n- Destination address \u0026 0x7 \u003d\u003d 4, strlen of src is 8, 9, 10.\n\nIn these cases, the dest alignment code does a ldr which reads 4 bytes,\nand it will read past the end of the source. In most cases, this is\nprobably benign, but if this crosses into a new page it could cause a\ncrash.\n\nFix the labels in the cortex-a9 strcat.\n\nModify the overread test to vary the dst alignment to expost this bug.\nAlso, shrink the strcat/strlcat overread cases since the dst alignment\nvariation increases the runtime too much.\n\nBug: 24345899\nChange-Id: Ib34a559bfcebd89861985b29cae6c1e47b5b5855\n"
    },
    {
      "commit": "7ac3c128bb5df83cb001cb50b6a5ee4da9a0b0e0",
      "tree": "c942f25efe8d5147ce59cb841806b2ed858fe928",
      "parents": [
        "4d5c4f085bc880af838d50f6bbd60d86e800b6e1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 26 09:59:29 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 26 09:59:29 2015 -0700"
      },
      "message": "Add strchrnul.\n\nBug: http://b/18374026\nChange-Id: Iea923309c090a51a2d41c5a83320ab3789f40f1c\n"
    },
    {
      "commit": "d2a9fb326769900b786ef36aa0ccf60a65fe497e",
      "tree": "359eebb258e59dbd1b72fbc409f60db718c94c24",
      "parents": [
        "cebef1a7812fe3552f12dd7e885a1f879a9946ed"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 27 20:55:03 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 27 20:55:03 2015 -0700"
      },
      "message": "Add a regression test for a fixed strnlen bug.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d74741\nChange-Id: I78b0114bdbe8e680b0e938af608a634e73c86eda\n"
    },
    {
      "commit": "3cfb52aab2548df635e9672218cc433e14922fd3",
      "tree": "eebbf162a1e5e1ed8726a9129ea17a410ebaa3ed",
      "parents": [
        "3e1b5f46c07aef5983ecf2feb1c3369b2cd200c0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 18 21:29:13 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 18 22:02:56 2015 -0800"
      },
      "message": "Add GNU extensions mempcpy and wmemcpy.\n\nUsed by elfutils. On the bright side, they stopped using __mempcpy.\n\nBug: 18374026\nChange-Id: Id29bbe6ef1c5ed5a171bb6c32182f129d8332abb\n"
    },
    {
      "commit": "41ef902379ba24bd8a3ca6d7733b8376efb55ebd",
      "tree": "855ac7e3fa276bfb55594e4efb28c7c29cf28f3f",
      "parents": [
        "f9fb52ab309c97d5b2ef4f8e1daff3eed4cf4024"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Feb 14 13:21:22 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Feb 14 13:21:22 2015 -0800"
      },
      "message": "Fix memchr overflow.\n\nThe overflow\u0027s actually in the generic C implementation of memchr.\n\nWhile I\u0027m here, let\u0027s switch our generic memrchr to the OpenBSD version too.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d147048\nChange-Id: I296ae06a1ee196d2c77c95a22f11ee4d658962da\n"
    },
    {
      "commit": "1468765f8ab81ae9e32638d25c14e1f5dd35da2b",
      "tree": "d3da91355bb91be89f2ec849cb801d97ea9b84b8",
      "parents": [
        "6330b70cac8072007be9c351a934f9ff10f30cb5"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Nov 10 13:58:17 2014 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Nov 10 13:58:17 2014 -0800"
      },
      "message": "Add align/overread tests for strlcpy/strlcat.\n\nChange-Id: I2801c7ee1847cd68ec95eba5bdffde5e52edf1e5\n"
    },
    {
      "commit": "7b956ede3f0f40bd8a085a8ad3729bb3e0e030f2",
      "tree": "b917b5aaa05f3bbc147d041e46e10ab5153f29a5",
      "parents": [
        "44352f5f7f06ff9383d695b0a7d4243f5268f430"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Sep 04 12:47:07 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Sep 04 18:38:21 2014 -0700"
      },
      "message": "Reset enviroment for math_tests\n\nBug: 17390824\nChange-Id: I42f4c8d9199a2efe7641f0b0e64580cacb5695da\n"
    },
    {
      "commit": "8da304b997bc0f81ebb30fadc79249fafc1c6fce",
      "tree": "2c9fdf27af04d3bb7caaeeb7182f32a1b2638ae7",
      "parents": [
        "28f1770101d84153e100ad7bc0628b4ef3b6e85c",
        "1467dfe3e89975f0d4905e31a27ac06257c097cf"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Sep 03 22:08:56 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 03 22:08:57 2014 +0000"
      },
      "message": "Merge \"Make string tests check all alignment combinations\""
    },
    {
      "commit": "416d7ddaff0946d480b6aa945a741b3eeaca5569",
      "tree": "d3fa6382f7d6d26ab7e3ecb95a715328e5f50b5e",
      "parents": [
        "f4e721dd519db89c504c8944763811a3df956b32"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 18 17:28:32 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 28 16:37:09 2014 -0700"
      },
      "message": "Add GNU-compatible strerror_r.\n\nWe already had the POSIX strerror_r, but some third-party code defines\n_GNU_SOURCE and expects to get the GNU strerror_r instead.\n\nThis exposed a bug in the libc internal logging functions where unlike\ntheir standard brethren they wouldn\u0027t return the number of bytes they\u0027d\nhave liked to have written.\n\nBug: 16243479\nChange-Id: I1745752ccbdc569646d34f5071f6df2be066d5f4\n"
    },
    {
      "commit": "09c39d6df0e952620f8c1751377b559a04e023aa",
      "tree": "1ca25e04d3ed7ebea1dde6f4d3baaeee9526c0e5",
      "parents": [
        "c5d6df6f2fe57fd5aadbd9ebb131023234c30a0c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 19 14:30:30 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 19 14:30:30 2014 -0700"
      },
      "message": "Implement the GNU basename(3) in addition to the POSIX one.\n\nCode like perf(1) needs this.\n\nBug: 11860789\nChange-Id: I907eb448052a7b165e4012d74303330d32328cb2\n"
    },
    {
      "commit": "1467dfe3e89975f0d4905e31a27ac06257c097cf",
      "tree": "e5281c1078fe4483ac473d9e78da08c95d4abe16",
      "parents": [
        "4f85c6ffd31d1f8cc000ab326edd8edb7ecd55a9"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Aug 13 11:24:37 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Aug 14 15:05:20 2014 -0700"
      },
      "message": "Make string tests check all alignment combinations\n\n Reduce randomization of the test by (1) replacing random() \u0026 255\n with hard-coded char and (2) by making State *Iteration function\n visit every possible alignment combination instead of 10 random ones.\n\nChange-Id: I0ff0b4ca817ba9fbbcce53e09b25eb10a1a853c2\n"
    },
    {
      "commit": "e03e1eac0b7682884b6628df1305d34299680cb4",
      "tree": "cd92bbdbf9b9ae464da7b46d25c01fe6bf5c1ad9",
      "parents": [
        "4ad5066e1de326e5db46df18eeade9a88bc11bec"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jul 30 16:06:56 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jul 30 16:06:56 2014 -0700"
      },
      "message": "Fix memchr with a zero length.\n\nThe memchr implementation for 64 bit fails if these conditions occur:\n\n- The buffer is 32 byte aligned.\n- The buffer contains the character in the first byte.\n- The count sent in is zero.\n\nThe function should return NULL, but it\u0027s not.\n\nBug: 16676625\nChange-Id: Iab33cc7a8b79920350c72f054dff0e0a3cde69ce\n"
    },
    {
      "commit": "3a657d01eca1529ba7002cbee44e149988834c9d",
      "tree": "975e264c3489de06c7047da78631d866403f4579",
      "parents": [
        "a4a28d90f30dad54a7851176ddffee435d75f83f"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jun 27 12:33:22 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jun 30 12:39:55 2014 -0700"
      },
      "message": "Add extra strchr testing.\n\nChange-Id: Idd0a779eb3388e402cfcb4e0df40872320f8e155\n"
    },
    {
      "commit": "e5fdaa4f9d102461a4d8a865e6ca84666893b9e7",
      "tree": "c17c2b67e2f12161e67f9b337c9cdc11bd8eab5f",
      "parents": [
        "a04d2bc28e7d7fcaf34ad71e4a6608a13cf84197"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Sat Jun 14 01:04:31 2014 +0000"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Sat Jun 14 01:04:31 2014 +0000"
      },
      "message": "Revert \"Backing this one out since the counterpart needs to be sent upstream.\"\n\nThis reverts commit a04d2bc28e7d7fcaf34ad71e4a6608a13cf84197.\n\nChange-Id: I1b49165ca5d4bafdba7948818256a6167a363aca\n"
    },
    {
      "commit": "a04d2bc28e7d7fcaf34ad71e4a6608a13cf84197",
      "tree": "729a98533b9d101d029556ca290d9524bd4b416e",
      "parents": [
        "5ee320dd35fafc11eaf90c62198e08c6670e35b4"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Sat Jun 14 00:51:14 2014 +0000"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Sat Jun 14 00:51:14 2014 +0000"
      },
      "message": "Backing this one out since the counterpart needs to be sent upstream.\n\nThis reverts commit 5ee320dd35fafc11eaf90c62198e08c6670e35b4.\n\nChange-Id: I1a9c6b06c3aca595f01c629f7649be743dc48e77\n"
    },
    {
      "commit": "5ee320dd35fafc11eaf90c62198e08c6670e35b4",
      "tree": "c17c2b67e2f12161e67f9b337c9cdc11bd8eab5f",
      "parents": [
        "0f690d9eda1893e66223138d2b930eb3e0164820"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Jun 12 10:55:13 2014 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri Jun 13 15:35:05 2014 -0700"
      },
      "message": "Hides valloc(3)/pvalloc(3) on LP64.\n\nThese were removed from POSIX 2004. Hides the header declarations for all\ntargets, and hides the symbols for LP64.\n\nBug: 13935372\nChange-Id: Id592f67e9b7051517a05f536e1373b30162e669c\n"
    },
    {
      "commit": "24614b4729a4c8665193f5793b93019b37f779b1",
      "tree": "52631806852b1c584e50f04981e1f64d99106d3f",
      "parents": [
        "346fa721ca20e481a624930425d823d452e11dfe"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 12 15:35:22 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 12 15:35:22 2014 -0700"
      },
      "message": "Remove __memcmp16 from bionic.\n\nChange-Id: I2486d667d96c8900dd368d855f37c1327161efb7\n"
    },
    {
      "commit": "2aca7fe8214d9b4f421499a6f07579c888313649",
      "tree": "531b7f413c11b3441719b461b5260422f08bb1ed",
      "parents": [
        "2b8246fa755cf3e2828d702b6c27c2d238395fad"
      ],
      "author": {
        "name": "Serban Constantinescu",
        "email": "serban.constantinescu@arm.com",
        "time": "Tue Jun 10 14:50:16 2014 +0100"
      },
      "committer": {
        "name": "Serban Constantinescu",
        "email": "serban.constantinescu@arm.com",
        "time": "Tue Jun 10 17:51:10 2014 +0100"
      },
      "message": "AArch64: Fix memcmp16() test\n\n__memcmp16() should return an integer less than, equal to, or greater than\nzero. However the tests looks for a specific value.\n\nChange-Id: I06052f58f9ccc67146a3df9abb349c4bc19f090e\nSigned-off-by: Serban Constantinescu \u003cserban.constantinescu@arm.com\u003e\n"
    },
    {
      "commit": "fce861498c8c4720c6ad2475a73bb4c3e55d6948",
      "tree": "4496b97573a1d8c1e1361a76aabcac63c90513c6",
      "parents": [
        "431aa4dc9282e23231ba9243f43fd3d49b5f88b3"
      ],
      "author": {
        "name": "Varvara Rainchik",
        "email": "varvara.rainchik@intel.com",
        "time": "Tue May 27 12:41:55 2014 +0400"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jun 05 11:08:09 2014 -0700"
      },
      "message": "Fix for slm-tuned memmove (both 32- and 64-bit).\n\nIntroduce a test for memmove that catches a fault.\nFix both 32- and 64-bit versions of slm-tuned memmove.\n\nChange-Id: Ib416def2610a0972e32c3b9b6055b54967643dc3\nSigned-off-by: Varvara Rainchik \u003cvarvara.rainchik@intel.com\u003e\n"
    },
    {
      "commit": "6c80ccdeed9d9b30e961f68229fe8171d79c5d14",
      "tree": "92081fee342cd265cb5c1e8269d5ca892b999f60",
      "parents": [
        "5265ad6273cd7c61d096ebe0e29e493915e7c63e"
      ],
      "author": {
        "name": "Shu Zhang",
        "email": "chazhang@nvidia.com",
        "time": "Mon May 12 18:12:15 2014 +0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue May 20 12:31:38 2014 -0700"
      },
      "message": "denver: optimize memmove\n\nOptimize 32-bit denver memmove with reversal memcpy.\n\nChange-Id: Iaad0a9475248cdd7e4f50d58bea9db1b767abc88\n"
    },
    {
      "commit": "0990d4fda898ada86e557f872f5cb7d16b138e3c",
      "tree": "43cd74258c43e23e8008c15aebdb0a3efd476f6c",
      "parents": [
        "77473e408504a7e298816b4071cd6902065b03d8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 30 09:45:40 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 30 10:06:09 2014 -0700"
      },
      "message": "Make SIGRTMIN hide the real-time signals we use internally.\n\n__SIGRTMIN will continue to tell the truth. This matches glibc\u0027s\nbehavior (as evidenced by the fact that we don\u0027t need a special case\nin the strsignal test now).\n\nChange-Id: I1abe1681d516577afa8cd39c837ef12467f68dd2\n"
    },
    {
      "commit": "950a58e24d1019eb9d814dbb16f111a6b61e3f23",
      "tree": "5a91099e0ce1b9d552e7210fb914ba8d4d5ddb10",
      "parents": [
        "5f149f1bdef31d198c0e84fd8c904204d263e825"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Apr 04 14:38:18 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 07 16:41:53 2014 -0700"
      },
      "message": "Add stpcpy/stpncpy.\n\nAdd tests for the above.\n\nAdd the fortify implementations of __stpcpy_chk and __stpncpy_chk.\n\nModify the strncpy test to cover more cases and use this template for\nstpncpy.\n\nAdd all of the fortify test cases.\n\nBug: 13746695\nChange-Id: I8c0f0d4991a878b8e8734fff12c8b73b07fdd344\n"
    },
    {
      "commit": "f04935c85e0b466f0d30d2cd4c0fa2fff62e7d6d",
      "tree": "8f1c6af75517892648f49adad9d4d5d44c20f49c",
      "parents": [
        "e163a3986aa7d1c67fe3274eb9204812be0a6245"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Dec 20 18:43:21 2013 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Feb 06 20:12:21 2014 -0800"
      },
      "message": "Make sure that the same tests are on all platforms.\n\nIn order to be able to generate a list of tests for cts, the same set of\ntests must exist across all platforms. This CL adds empty tests where a\ntest was conditionally compiled out.\n\nThis CL creates a single library libBionicTests that includes all of\nthe tests found in bionic-unit-tests-static.\n\nAlso fix a few missing include files in some test files.\n\nTested by running and compiling the tests for every platform and\nverifying the same number of tests are on each platform.\n\nChange-Id: I9989d4bfebb0f9c409a0ce7e87169299eac605a2\n"
    },
    {
      "commit": "e5bbb6b6ab662503f06ceb20fa841d2e558d596d",
      "tree": "c031e82ae3400ce97aa416185c9118812569434c",
      "parents": [
        "ed45970ac5a182e512669cfa5c15b9f4fa783ad7"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Dec 03 18:39:10 2013 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Dec 03 18:42:41 2013 -0800"
      },
      "message": "Add strcmp/memcmp testing.\n\nBug: 9797008\nChange-Id: I11b1da060d29f7dacbb53f20a3e2082395b5bd8a\n"
    },
    {
      "commit": "b687ad3c3491fffe22507cafc9347e10cbf6bd31",
      "tree": "d854ac3533adc7268002f2ad299f4a6a9140b464",
      "parents": [
        "05ec00bf62ac168c9787a3d0640879ab3e502fe5"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Nov 06 17:32:11 2013 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Nov 15 10:36:21 2013 -0800"
      },
      "message": "Add new tests for memory/string routines.\n\nCreate a few generic testing functions to allow any memory/string tests\nto be created.\n\nAdd alignment tests for memcpy/memset/strcat/strcpy/strlen.\n\nAdd an overread test for memcpy/strcat/strcpy/strlen. This test attempts\nto verify that the functions do not read past the end of their buffers\n(src buffer in the case of src/dst functions).\n\nBug: 9797008\n\nChange-Id: Ib3223ca1b99e729ae8229adc2d03f4dc3103d97c\n"
    },
    {
      "commit": "baa91f4f8974b6e9a81fa3aa49f051b3bf823653",
      "tree": "5107a2ba56f4f360dd171abaa3f84e360ab0ab5b",
      "parents": [
        "aa2733d17b87c607fccbd6e6a0f44d2d411ffd77"
      ],
      "author": {
        "name": "Alexander Ivchenko",
        "email": "alexander.ivchenko@intel.com",
        "time": "Thu Jun 27 12:55:46 2013 +0400"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 02 17:57:23 2013 -0700"
      },
      "message": "Add ssse3 implementation of __memcmp16.\n\n__memcmp16 was missing in x86. Also added C-version for backward\ncompatibility. Added bionic test for __memcmp16 and for wmemcmp.\n\nChange-Id: I33718441e7ee343cdb021d91dbeaf9ce2d4d7eb4\nSigned-off-by: Alexander Ivchenko \u003calexander.ivchenko@intel.com\u003e\n"
    },
    {
      "commit": "13476deec46d7ba101c1f76b8ddcaab9d0b96b84",
      "tree": "7b04e507eeb4ca2b169904d5657751b6d79cc961",
      "parents": [
        "0671393072a78e75a726c58aa3ca718e55eeac3e"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Jun 03 10:58:06 2013 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Jun 04 11:55:08 2013 -0700"
      },
      "message": "Add tests for __strcpy_chk()\n\nChange-Id: I5675d04fcd471732c1b87b83879a54fbcd27762e\n"
    },
    {
      "commit": "cf870199d576bdfc339b7fb016c9f6fe7f2c87ed",
      "tree": "e4bdb361862de3efd9b907379d0fe3f2ad3f4ae2",
      "parents": [
        "72f59c84fd73a0a701ce6448d103e9021c1cb060"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu May 30 16:48:53 2013 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri May 31 09:07:46 2013 -0700"
      },
      "message": "FORTIFY_SOURCE: strcat / strncat optimize\n\n__strcat_chk and __strncat_chk are slightly inefficient,\nbecause they end up traversing over the same memory region\ntwo times.\n\nThis change optimizes __strcat_chk / __strncat_chk so they\nonly access the memory once. Although I haven\u0027t benchmarked these\nchanges, it should improve the performance of these functions.\n\n__strlen_chk - expose this function, even if -D_FORTIFY_SOURCE\nisn\u0027t defined. This is needed to compile libc itself without\n-D_FORTIFY_SOURCE.\n\nChange-Id: Id2c70dff55a276b47c59db27a03734d659f84b74\n"
    },
    {
      "commit": "4f40e511b0612ea099ab5b0843977fe7a49372fd",
      "tree": "c0118aed430408fa8bf803ffabccb377eaefbb0b",
      "parents": [
        "5e3b502b6b56634953ea152409363088974fa5e9"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Apr 19 16:54:22 2013 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu May 02 13:58:03 2013 -0700"
      },
      "message": "libc: cleanup strchr\n\nMove strchr to a .cpp file, and change to bionic directory.\n\nChange-Id: I64ade7df326c0a9a714aca4caf5647b6833b1c97\n"
    },
    {
      "commit": "1aae9bd170883805f2e7975cd3dbd2502b083cc1",
      "tree": "de73c01b4e8b61a11b54e8c4ecc8de222c4b0872",
      "parents": [
        "c6dc62f09c814b9688aee83e80dcfe80cb0ef604"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Apr 29 14:07:06 2013 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Apr 29 15:22:10 2013 -0700"
      },
      "message": "strncpy: implement _FORTIFY_SOURCE\u003d2\n\nAdd support for fortify source level 2 to strncpy.\nThis will enable detection of more areas where strncpy\nis used inappropriately. For example, this would have detected\nbug 8727221.\n\nMove the fortify_source tests out of string_test.cpp, and\nput it into fortify1_test.cpp.\n\nCreate a new fortify2_test.cpp file, which copies all\nthe tests in fortify1_test.cpp, and adds fortify_source level\n2 specific tests.\n\nChange-Id: Ica0fba531cc7d0609e4f23b8176739b13f7f7a83\n"
    },
    {
      "commit": "a44e9afdd16105d6f36319cb538666d9cc78435a",
      "tree": "8606530bcdef438dc305894c805f0713edad5306",
      "parents": [
        "f3fe19459fd9263e8cc8a413a5313b1ec3cf3975"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Jan 17 15:41:33 2013 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Jan 17 15:41:33 2013 -0800"
      },
      "message": "FORTIFY_SOURCE: optimize\n\nDon\u0027t do the fortify_source checks if we can determine, at\ncompile time, that the provided operation is safe.\n\nThis avoids silliness like calling fortify source on things like:\n\n  size_t len \u003d strlen(\"asdf\");\n  printf(\"%d\\n\", len);\n\nand allows the compiler to optimize this code to:\n\n  printf(\"%d\\n\", 4);\n\nDefer to gcc\u0027s builtin functions instead of pointing our code\nto the libc implementation.\n\nChange-Id: I5e1dcb61946461c4afaaaa983e39f07c7a0df0ae\n"
    },
    {
      "commit": "606058933c5129cb1026960ea67624b9426c610f",
      "tree": "b041941841289aff7b9fd12217a97ab1bbd22054",
      "parents": [
        "b09d7d86004ab75b774358454d8ee261987af96b"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Jan 15 10:35:09 2013 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Jan 15 10:35:09 2013 -0800"
      },
      "message": "fix strerror_r test\n\ne6e60065ff093ff8c859ab146cf543531cb1967c modified strerror_r to\ntreat errno as signed. However, the change to the test code\nmodified the \"strerror\" test, not the \"strerror_r\" test.\n\nMake the same change for the strerror_r code.\n\nChange-Id: Ia236a53df5745935e229a4446a74da8bed0cfd7b\n"
    },
    {
      "commit": "dcab1b2c76a498c56bc00024613386de8b4b2aae",
      "tree": "6d7eb1ea166186df3092552b190b4485658b3e68",
      "parents": [
        "bfde0b6fd9e5de545746ab963d3a05ed2a8014f6"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Jan 10 17:12:29 2013 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Jan 11 10:52:36 2013 -0800"
      },
      "message": "Add stack canaries / strcpy tests.\n\nAdd a test to ensure that stack canaries are working\ncorrectly. Since stack canaries aren\u0027t normally generated\non non-string functions, we have to enable stack-protector-all.\n\nAdd a test to ensure that an out of bounds strcpy generates\na runtime failure.\n\nChange-Id: Id0d3e59fc4b9602da019e4d35c5c653e1a57fae4\n"
    },
    {
      "commit": "e6e60065ff093ff8c859ab146cf543531cb1967c",
      "tree": "41de4f1d0cf5cec9fa72c4ad6d0fed5bf1b00329",
      "parents": [
        "0d3700d957debe841c385f66a8026ca8b3755815"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 10 16:01:59 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 10 16:01:59 2013 -0800"
      },
      "message": "glibc 2.15 treats errno as signed in strerror(3).\n\nAnd the only reason I hadn\u0027t done that in bionic is because I wanted to behave\nthe same as glibc.\n\nChange-Id: I2cf1bf0aac82a748cd6305a2cabbac0790058570\n"
    },
    {
      "commit": "036154b0c2d64d618aded8674f2e13cbbb2867e2",
      "tree": "762ecdcbac0adba6fa068d5704eae2af1688c69d",
      "parents": [
        "604a163e4c7724f881605fdbda94db4f7c8f0e7a"
      ],
      "author": {
        "name": "Anna Tikhonova",
        "email": "anna.tikhonova@intel.com",
        "time": "Fri Oct 05 15:21:11 2012 +0400"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 07 18:14:29 2012 -0800"
      },
      "message": "Tests for string routines.\n\nChange-Id: I24068a228f59df1c3b758c5b2026a09720490616\nSigned-off-by: Anna Tikhonova \u003canna.tikhonova@intel.com\u003e\n"
    },
    {
      "commit": "ad88a0863110798cef5169dcf917e18b967a7cf6",
      "tree": "9b5fcbe6ebc81b4fb781dd788b8795a334def653",
      "parents": [
        "d0f2b7e7e65f19f978c59abcbb522c08e76b1508"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 24 18:37:21 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 25 12:04:03 2012 -0700"
      },
      "message": "Per-thread -fstack-protector guards for x86.\n\nBased on a pair of patches from Intel:\n\n  https://android-review.googlesource.com/#/c/43909/\n  https://android-review.googlesource.com/#/c/44903/\n\nFor x86, this patch supports _both_ the global that ARM/MIPS use\nand the per-thread TLS entry (%gs:20) that GCC uses by default. This\nlets us support binaries built with any x86 toolchain (right now,\nthe NDK is emitting x86 code that uses the global).\n\nI\u0027ve also extended the original tests to cover ARM/MIPS too, and\nbe a little more thorough for x86.\n\nChange-Id: I02f279a80c6b626aecad449771dec91df235ad01\n"
    },
    {
      "commit": "5419b9474753d25dff947c7740532f86d130c0be",
      "tree": "4d746cfc20a1d3b5886f691ed1a49ddf34e2df78",
      "parents": [
        "a9944cfe9e152ca46afb0a77300ec5a2a1a24e64"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 16 15:54:46 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 16 17:58:17 2012 -0700"
      },
      "message": "Make dlerror(3) thread-safe.\n\nI gave up trying to use the usual thread-local buffer idiom; calls to\ncalloc(3) and free(3) from any of the \"dl\" functions -- which live in\nthe dynamic linker -- end up resolving to the dynamic linker\u0027s stubs.\nI tried to work around that, but was just making things more complicated.\nThis alternative costs us a well-known TLS slot (instead of the\ndynamically-allocated TLS slot we\u0027d have used otherwise, so no difference\nthere), plus an extra buffer inside every pthread_internal_t.\n\nBug: 5404023\nChange-Id: Ie9614edd05b6d1eeaf7bf9172792d616c6361767\n"
    },
    {
      "commit": "b5f053b5a7deb084e7a052d527e0aa41339ae05c",
      "tree": "a75d6715f7c7c954d22440b8c21c59b01d87e83d",
      "parents": [
        "4a9b7c694a8312160d3cd953a8227c23a1624868"
      ],
      "author": {
        "name": "Irina Tirdea",
        "email": "irina.tirdea@intel.com",
        "time": "Sat Sep 08 09:17:54 2012 +0300"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 13 15:18:21 2012 -0700"
      },
      "message": "Make strerror(3) and strsignal(3) thread-safe, and add psignal(3) and psiginfo(3).\n\nChange-Id: I426109db25e907980d6cb3a7a695796e45783b78\n"
    }
  ]
}
