From 3ae8da0a803370be9dd410226438f636af553e22 Mon Sep 17 00:00:00 2001 From: Andreas Gampe Date: Fri, 26 Jun 2015 17:33:47 -0700 Subject: ART: Fix invalid access and DCHECK in verifier If we get a throwing failure when setting types from the signature, the work instruction index is still invalid. Do not try to copy the line then. As a throwing failure might happen in the above instance, but the flow analysis expects to have a cleared failure flag before processing each instruction, clear the flag. Bug: 21645819 Bug: 22080519 Change-Id: I224c4dad98fa5bb50e62210f0ee30c0dd020e3a6 --- test/800-smali/expected.txt | 1 + test/800-smali/smali/b_21645819.smali | 9 +++++++++ test/800-smali/src/Main.java | 2 ++ test/800-smali/src/pkg/ProtectedClass.java | 20 ++++++++++++++++++++ 4 files changed, 32 insertions(+) create mode 100644 test/800-smali/smali/b_21645819.smali create mode 100644 test/800-smali/src/pkg/ProtectedClass.java (limited to 'test') diff --git a/test/800-smali/expected.txt b/test/800-smali/expected.txt index 80b4f57..2196a88 100644 --- a/test/800-smali/expected.txt +++ b/test/800-smali/expected.txt @@ -22,4 +22,5 @@ b/21902684 b/21863767 b/21886894 b/22080519 +b/21645819 Done! diff --git a/test/800-smali/smali/b_21645819.smali b/test/800-smali/smali/b_21645819.smali new file mode 100644 index 0000000..195d662 --- /dev/null +++ b/test/800-smali/smali/b_21645819.smali @@ -0,0 +1,9 @@ +.class public LB21645819; +.super Ljava/lang/Object; + +# The method declares a parameter of an inaccessible class. This should not abort/kill us. + +.method public static run(Lpkg/ProtectedClass;)V +.registers 10 + return-void +.end method \ No newline at end of file diff --git a/test/800-smali/src/Main.java b/test/800-smali/src/Main.java index 337d0d9..e6f065e 100644 --- a/test/800-smali/src/Main.java +++ b/test/800-smali/src/Main.java @@ -91,6 +91,8 @@ public class Main { null)); testCases.add(new TestCase("b/22080519", "B22080519", "run", null, new NullPointerException(), null)); + testCases.add(new TestCase("b/21645819", "B21645819", "run", new Object[] { null }, + null, null)); } public void runTests() { diff --git a/test/800-smali/src/pkg/ProtectedClass.java b/test/800-smali/src/pkg/ProtectedClass.java new file mode 100644 index 0000000..b262155 --- /dev/null +++ b/test/800-smali/src/pkg/ProtectedClass.java @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package pkg; + +class ProtectedClass { +} -- cgit v1.1