)]}'
{
  "log": [
    {
      "commit": "feb228244619237d110d8817865d7647f37b9b4f",
      "tree": "5f30c01597761e6552ea5f770443bc12785a9562",
      "parents": [
        "9dcc0733afe9c512e93317291de0b0a7124ef465"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Feb 13 21:25:57 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Feb 20 18:32:10 2019 +0000"
      },
      "message": "Improve `verified`, add `redefined` class status in VerifierDeps\n\nChanges implementation of `unverified_classes_` in VerifierDeps from\nstd::set\u003cdex::TypeIndex\u003e to `verified_classes_` of type std::vector\u003cbool\u003e\nindexed by class def indices. This cleans up the implementation and speeds\nup access during fast-verify. Encoding remains the same - a set of indices\nof unverified classes - only these are now class def indices.\n\nA second bit vector `redefined_classes_` is added, also indexed by class\ndef indices. It records classes that were not verified because they were\neclipsed by classes that took precedence during resolution. This allows\nVerifierDeps::VerifyInternalClasses to succeed when a class redefined\nnow was also redefined when the deps were being created because the\nclass was treated as external and dependencies on it were recorded.\n\nTest: m test-art-gtest-verifier_deps_test\nChange-Id: I7bcbe947c3c74535306e6dbb5b288076f320a7bc\n"
    },
    {
      "commit": "8fd6722f5840385462a31bd701426b3749ac1031",
      "tree": "7e5f202ed5596815c3638173273ab7d490c25636",
      "parents": [
        "ac52000e86077b3c45c192ec259d72413599ff11"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Feb 05 18:13:44 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Feb 06 17:34:57 2019 +0000"
      },
      "message": "Generalize vdex class redefinition check\n\nThe check introduced in CL If0c56b1970d8ebe701d198ffccec52f586aea9e6\nskips fast verification if an apk\u0027s class is overshadowed by a class in\nboot classpath because the vdex dependencies do not contain intra-apk\ndependencies.\n\nHowever, the change only checks for presence of a duplicate class in the\nboot classloader, while a duplicate class could be in any of the parent\nclassloaders. Fix this and move the check into VerifierDeps to make it\na proper part of the verification process.\n\nThe CL also refactors VerifierDeps::ValidateDependencies to output\nan error string for better logging.\n\nBug: 122968669\nTest: test/testrunner/testrunner.py -t 719\nTest: m test-art-gtest-verifier_deps_test\nChange-Id: I0d06b82e31088c58d4493723a5435309740f1d0c\n"
    },
    {
      "commit": "ba118827465d12177f3996e50133960087b1c916",
      "tree": "f39728cdafc7810004d51c0bef2728b98993daa9",
      "parents": [
        "64a102dde8c5daad83b991710decb418ce43aac5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 12 15:41:56 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 20 13:35:06 2017 +0100"
      },
      "message": "ART: Change method lookup to be more consistent to JLS and the RI.\n\nThe method lookup for different invoke types was previously\nwidely different and didn\u0027t work well with the dex cache\nmethod array where we have only a single slot for each\nMethodId. The new behavior is to perform the same lookup for\nall cases, distinguishing only between interface and\nnon-interface referencing class, and to further align the\nbehavior with the JLS and the RI. Where the JLS conflicts\nwith the RI, we follow the JLS semantics.\n\nThe new lookup for class methods first searches the methods\ndeclared in the superclass chain (ignoring \"copied\" methods)\nand only then looks in the \"copied\" methods. If the search\nin the superclass chain finds a method that has not been\ninherited (i.e. either a private method or a package-access\nmethod where one of the classes in the chain does not belong\nto the same package, see JLS 8.4.8), we still search the\n\"copied\" methods as there may actually be a method inherited\nfrom an interface. This follows the JLS semantics where\ninherited methods are included in the search (JLS 15.12.2.1)\nbut conflicts with the RI where the private or\npackage-access method takes precedence over methods\ninherited from interfaces.\n\nNote that this search can find an accessible method that is\nnot inherited by the qualifying type, either for a package\naccess method when the referrer is in the same package but\nthe qualifying type is in another package, or for a private\nmethod where the referrer is in the same class but the\nqualifying type is actually a subclass. For the moment we\nallow such calls and we shall consider whether to throw\nan IncompatibleClassChangeError in this situation in future\nto comply with JLS 15.12.4.3.\n\nThe new lookup for interface methods searches the interface\nclass, then all the superinterfaces and then the\njava.lang.Object class, see implicitly declared methods in\ninterfaces, JLS 9.2. The search for the maximally-specific\nnon-abstract superinterface method is not yet implemented,\nbut the difference should be difficult to observe as the\nusual subsequent call to FindVirtualMethodForInterface()\nshould yield the same result for any matching method.\n\nThe new test 162-method-idx-clash exposes several cases\nwhere we previously completely messed up due to the effects\nof the DexCache, or where we were out of line with the RI.\nIt also tests a case where the JLS and the RI disagree and\nwe follow the JLS.\n\nTest: art/test/run-test --host --jvm 162-method-resolution\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: testrunner.py --host --interp-ac\nTest: Nexus 6P boots.\nTest: testrunner.py --target\nBug: 62855082\nBug: 30627598\nChange-Id: If450c8cff2751369011d649c25d28a482a2c61a3\n"
    },
    {
      "commit": "bdb540dc8d09c48ee19cf035f418bcae0f00660e",
      "tree": "59a1d36ca6d626c827da70db758751e33a76cb60",
      "parents": [
        "aebc6870db9c1c4df78512732f11325740550663"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 19 13:50:34 2017 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 20 10:37:31 2017 +0100"
      },
      "message": "Vdex: Workaround arrays with erroneous component type.\n\nThe assignability DCHECK is only reliable when classes are not\nerroneous. For arrays whose component type could be erroneous,\nthe verifier can join types even if they\u0027re not assignable.\n\nbug:33770646\nTest: verifier_deps_test\nChange-Id: I4ec1b12b2e2c7d5b57b51a64aea381f951a38dcd\n"
    },
    {
      "commit": "fc38e919bad23670e38a484d4728f300406415c3",
      "tree": "ec249a6773e571244d30c980263e32c750fb4c96",
      "parents": [
        "f83f3f6ecb1153d96cc8007e8a0d1e35af4d3f38"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 16 16:51:59 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 17 08:59:25 2017 +0000"
      },
      "message": "Do not assume type relationship when recording \"not assignable\"\n\nThe verifier may record that an interface I does not extend a\nclass A. If A is not j.l.Object, this is always true, but\nA might change after a system update from a class to an interface.\n\nbug: 34849974\ntest: verifier_deps_test\nChange-Id: Ic2876edce9a2a6f7b402420a5e01763aba2b39a4\n"
    },
    {
      "commit": "7cc3ae5705416bd8fc4b7096904e2871aa761e73",
      "tree": "7828e0346d1961b1454a56fa7759b72c13e1b67a",
      "parents": [
        "a86b359441f349d9057d05c32c88c375d794cf86"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 07 14:33:37 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 07 17:44:43 2017 +0000"
      },
      "message": "Return the right value in VerifyClass.\n\nWe used to return kNoFailure when a class was already processed.\nBut it could have had soft failures.\n\nAlso remove IsCompileTimeVerified to avoid future confusions and\nintroduce ShouldVerifyAtRuntime.\n\nAdd some more checks to make sure we record the right things in\nthe vdex file.\n\nbug: 33845394\ntest: verifier_deps_test test-art-host\nChange-Id: Iff11a96e825c85db416083413761981515f405b7\n"
    },
    {
      "commit": "89ee0b30a3ca8d07a4a20738361adbce5bcb79e0",
      "tree": "5e4fa2199fed4f98220c6e6c97e3e805c97f61bb",
      "parents": [
        "eb242cd311e5e93dd85042321a63d55e690873d4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 26 16:55:18 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 26 16:55:18 2016 +0100"
      },
      "message": "Forgot these files from previous VerifierDeps change.\n\nhttps://android-review.googlesource.com/#/c/294326/ was missing\nthese files.\n\nbug: 30937355\ntest: m test-art-host\ntest: verifier_deps_test.cc\nChange-Id: Ic17ee6c70d17e998a2835415a6e7b25a2473ac37\n"
    },
    {
      "commit": "ca3c8c33501bf199d6fd0a5db30a27d8e010cb23",
      "tree": "12a6c3a4266bd17c6b9fe7066fd0b25cb8d9b2d6",
      "parents": [
        "0764877e21f1230e718923d5b84b048cd4346afa"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Sep 06 14:04:48 2016 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Sep 16 10:08:18 2016 +0100"
      },
      "message": "Collect verifier dependencies\n\nMethodVerifier tests whether a DEX method is valid w.r.t. the classes\nin class path. Since the APK does not change across OTA updates, it\nis not necessary to analyze the bytecode again with MethodVerifier,\nas long as its dependencies on the class path (which may have changed)\nare satisfied.\n\nThis patch introduces VerifierDeps, a class path dependency collector,\nand adds hooks into MethodVerifier where classes/methods/fields are\nresolved and where assignability of types is tested.\n\nTest: m test-art-host-gtest-verifier_deps_test\nBug: 30937355\nChange-Id: Iee0b321d772a5c7d1cb471aaa6e13918310b7e2f\n"
    }
  ]
}
