From 0685b981042acb57355e6742cf0ab18fbcfc4e25 Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Thu, 25 Mar 2021 11:59:22 +0000 Subject: Abort transaction when Class.forName() fails. And update VmClassLoader.findLoadedClass implementation in UnstartedRuntime which has erroneously diverged since https://android-review.googlesource.com/145075 . Also prevent transactional interpreter from transfering control to a catch handler for aborted transactions. Also clean up Transaction::kAbortExceptionDescriptor naming and some unused parameters. Test: TransactionTest.CatchClassForNameAbortClass Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Change-Id: Ibfc544283f5434efbaab238d11a6152ed2578050 --- test/Transaction/Transaction.java | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'test/Transaction/Transaction.java') diff --git a/test/Transaction/Transaction.java b/test/Transaction/Transaction.java index e7085c1734..6a4f5ef773 100644 --- a/test/Transaction/Transaction.java +++ b/test/Transaction/Transaction.java @@ -74,6 +74,31 @@ public class Transaction { } } + static class CatchClassForNameAbortClass { + static { + try { + Class.forName("non.existent.TestClass"); + } catch (Throwable e) { + // ignore exception. + } + } + } + + static class CatchClassForNameAbortClassTwice { + static { + try { + Class.forName("non.existent.TestClass"); + } catch (Throwable e) { + // ignore exception. + } + try { + Class.forName("non.existent.TestClass"); + } catch (Throwable e) { + // ignore exception. + } + } + } + // Helper class to abort transaction: finalizable class with natve methods. static class AbortHelperClass { public void finalize() throws Throwable { -- cgit v1.2.3-59-g8ed1b