diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/921-hello-failure/expected.txt | 3 | ||||
| -rw-r--r-- | test/921-hello-failure/src/Main.java | 1 | ||||
| -rw-r--r-- | test/921-hello-failure/src/Verification.java | 82 |
3 files changed, 86 insertions, 0 deletions
diff --git a/test/921-hello-failure/expected.txt b/test/921-hello-failure/expected.txt index e9b6a20cd6..a5dc10d59c 100644 --- a/test/921-hello-failure/expected.txt +++ b/test/921-hello-failure/expected.txt @@ -1,3 +1,6 @@ +hello - Verification +Transformation error : java.lang.Exception(Failed to redefine class <LTransform;> due to JVMTI_ERROR_FAILS_VERIFICATION) +hello - Verification hello - NewName Transformation error : java.lang.Exception(Failed to redefine class <LTransform;> due to JVMTI_ERROR_NAMES_DONT_MATCH) hello - NewName diff --git a/test/921-hello-failure/src/Main.java b/test/921-hello-failure/src/Main.java index 61d69e7396..5bbe2b5479 100644 --- a/test/921-hello-failure/src/Main.java +++ b/test/921-hello-failure/src/Main.java @@ -18,6 +18,7 @@ import java.util.ArrayList; public class Main { public static void main(String[] args) { + Verification.doTest(new Transform()); NewName.doTest(new Transform()); DifferentAccess.doTest(new Transform()); NewInterface.doTest(new Transform2()); diff --git a/test/921-hello-failure/src/Verification.java b/test/921-hello-failure/src/Verification.java new file mode 100644 index 0000000000..242b5d2b44 --- /dev/null +++ b/test/921-hello-failure/src/Verification.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2017 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. + */ + +import java.util.Base64; + +class Verification { + // Jasmin program: + // + // .source Transform.java + // .class Transform + // .super java/lang/Object + // .method <init>()V + // .limit stack 1 + // .limit locals 1 + // aload_0 + // invokespecial java/lang/Object/<init>()V + // return + // .end method + // .method sayHi(Ljava/lang/String;)V + // .limit stack 1 + // .limit locals 2 + // aload_1 + // areturn + // .end method + private static final byte[] CLASS_BYTES = Base64.getDecoder().decode( + "yv66vgADAC0ADgoADQAHBwAIAQAQamF2YS9sYW5nL09iamVjdAEAClNvdXJjZUZpbGUBAAY8aW5p" + + "dD4BAAVzYXlIaQwABQAKAQAJVHJhbnNmb3JtAQAEQ29kZQEAAygpVgEADlRyYW5zZm9ybS5qYXZh" + + "AQAVKExqYXZhL2xhbmcvU3RyaW5nOylWBwADACAAAgANAAAAAAACAAAABQAKAAEACQAAABEAAQAB" + + "AAAABSq3AAGxAAAAAAABAAYADAABAAkAAAAOAAEAAgAAAAIrsAAAAAAAAQAEAAAAAgAL"); + + // Smali program: + // + // .class LTransform; + // .super Ljava/lang/Object; + // .source "Transform.java" + // # direct methods + // .method constructor <init>()V + // .registers 1 + // invoke-direct {p0}, Ljava/lang/Object;-><init>()V + // return-void + // .end method + // # virtual methods + // .method public sayHi(Ljava/lang/String;)V + // .registers 2 + // return-object p1 + // .end method + private static final byte[] DEX_BYTES = Base64.getDecoder().decode( + "ZGV4CjAzNQClOAc4ZDMXaHMezhYcqZxcjUeVCWRYUkooAgAAcAAAAHhWNBIAAAAAAAAAAJQBAAAI" + + "AAAAcAAAAAQAAACQAAAAAgAAAKAAAAAAAAAAAAAAAAMAAAC4AAAAAQAAANAAAAA4AQAA8AAAAPAA" + + "AAD4AAAABQEAABkBAAAtAQAAPQEAAEABAABEAQAAAQAAAAIAAAADAAAABQAAAAUAAAADAAAAAAAA" + + "AAYAAAADAAAATAEAAAAAAAAAAAAAAAABAAcAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAAAA" + + "AAAAAIYBAAAAAAAABjxpbml0PgALTFRyYW5zZm9ybTsAEkxqYXZhL2xhbmcvT2JqZWN0OwASTGph" + + "dmEvbGFuZy9TdHJpbmc7AA5UcmFuc2Zvcm0uamF2YQABVgACVkwABXNheUhpAAABAAAAAgAAAAAA" + + "AAAAAAAAAQABAAEAAAAAAAAABAAAAHAQAgAAAA4AAgACAAAAAAAAAAAAAQAAABEBAAABAQCAgATc" + + "AgEB9AIMAAAAAAAAAAEAAAAAAAAAAQAAAAgAAABwAAAAAgAAAAQAAACQAAAAAwAAAAIAAACgAAAA" + + "BQAAAAMAAAC4AAAABgAAAAEAAADQAAAAAiAAAAgAAADwAAAAARAAAAEAAABMAQAAAxAAAAIAAABU" + + "AQAAASAAAAIAAABcAQAAACAAAAEAAACGAQAAABAAAAEAAACUAQAA"); + + public static void doTest(Transform t) { + t.sayHi("Verification"); + try { + Main.doCommonClassRedefinition(Transform.class, CLASS_BYTES, DEX_BYTES); + } catch (Exception e) { + System.out.println( + "Transformation error : " + e.getClass().getName() + "(" + e.getMessage() + ")"); + } + t.sayHi("Verification"); + } +} |