diff options
author | Kevin Jeon <kevinjeon@google.com> | 2021-07-27 16:06:07 +0000 |
---|---|---|
committer | Kevin Jeon <kevinjeon@google.com> | 2021-08-04 01:06:44 +0000 |
commit | f2551d82b776f2e524af13db35b7a546e1190c9c (patch) | |
tree | 5cd118c771e9569cbddfd7b9b21cb3dc1a1a75e3 | |
parent | 1f3d8f76e9294908711ca72da1f114f4148b3d81 (diff) | |
download | aidl-f2551d82b776f2e524af13db35b7a546e1190c9c.tar.gz |
Hoist enforceInterface and escape onTransact
This change adds as check for user-defined transactions in order to call
enforceInterface before checking for different case in onTransact. It
also adds break statements to onTransact.
'system/tools/aidl/tests/golden_test.sh update' was used to update the
reference outputs.
Test: - builds and boots
- atest aidl_unittests CtsNdkBinderTestCases -m -c
- cd out/target/product/redfin/symbols/system/framework/arm64;
nm --size-sort -Sr boot-framework.oat | grep onTransact
- cd out/target/product/redfin/system/framework;
./apkanalyzer dex packages framework.jar | grep 'onTransact' |
sort -r -g -k 5,5 | awk '{$1=$2=$3=$4=""; print $0}')
Bug: 194712114
Change-Id: Ib13b0f694bd3bf151677abe98cdd3368c873beaf
8 files changed, 113 insertions, 125 deletions
diff --git a/ast_java.cpp b/ast_java.cpp index 066624ed..9bbc343f 100644 --- a/ast_java.cpp +++ b/ast_java.cpp @@ -285,6 +285,10 @@ void ReturnStatement::Write(CodeWriter* to) const { to->Write(";\n"); } +void BreakStatement::Write(CodeWriter* to) const { + to->Write("break;\n"); +} + void TryStatement::Write(CodeWriter* to) const { to->Write("try "); this->statements->Write(to); @@ -254,6 +254,12 @@ struct ReturnStatement : public Statement { void Write(CodeWriter* to) const override; }; +struct BreakStatement : public Statement { + BreakStatement() = default; + virtual ~BreakStatement() = default; + void Write(CodeWriter* to) const override; +}; + struct TryStatement : public Statement { std::shared_ptr<StatementBlock> statements = std::make_shared<StatementBlock>(); diff --git a/generate_java_binder.cpp b/generate_java_binder.cpp index fa1c14ac..04887fc6 100644 --- a/generate_java_binder.cpp +++ b/generate_java_binder.cpp @@ -207,8 +207,23 @@ void StubClass::finish() { std::vector<std::shared_ptr<Expression>>{this->transact_code, this->transact_data, this->transact_reply, this->transact_flags}); default_case->statements->Add(std::make_shared<ReturnStatement>(superCall)); + + auto case_count = transact_switch_user->cases.size(); transact_switch_user->cases.push_back(default_case); + // Interface token validation is done for user-defined transactions. + if (case_count > 0) { + auto ifStatement = std::make_shared<IfStatement>(); + ifStatement->expression = std::make_shared<LiteralExpression>( + "code >= android.os.IBinder.FIRST_CALL_TRANSACTION && " + "code <= android.os.IBinder.LAST_CALL_TRANSACTION"); + ifStatement->statements = std::make_shared<StatementBlock>(); + ifStatement->statements->Add(std::make_shared<MethodCall>( + this->transact_data, "enforceInterface", + std::vector<std::shared_ptr<Expression>>{this->get_transact_descriptor(nullptr)})); + transact_statements->Add(ifStatement); + } + // Meta transactions are looked up prior to user-defined transactions. transact_statements->Add(this->transact_switch_meta); transact_statements->Add(this->transact_switch_user); @@ -222,6 +237,12 @@ void StubClass::finish() { code_switch_default_case->statements->Add(std::make_shared<ReturnStatement>(NULL_VALUE)); this->code_to_method_name_switch->cases.push_back(code_switch_default_case); } + + // There will be at least one statement for the default, but if we emit a + // return true after that default, it will be unreachable. + if (case_count > 0) { + transact_statements->Add(std::make_shared<ReturnStatement>(TRUE_VALUE)); + } } // The the expression for the interface's descriptor to be used when @@ -425,7 +446,7 @@ static void generate_stub_code(const AidlInterface& iface, const AidlMethod& met std::shared_ptr<Variable> transact_reply, const AidlTypenames& typenames, std::shared_ptr<StatementBlock> statement_block, - std::shared_ptr<StubClass> stubClass, const Options& options) { + const Options& options) { // try and finally auto tryStatement = std::make_shared<TryStatement>(); auto finallyStatement = std::make_shared<FinallyStatement>(); @@ -449,11 +470,6 @@ static void generate_stub_code(const AidlInterface& iface, const AidlMethod& met auto realCall = std::make_shared<MethodCall>(THIS_VALUE, method.GetName()); - // interface token validation is the very first thing we do - statements->Add(std::make_shared<MethodCall>( - transact_data, "enforceInterface", - std::vector<std::shared_ptr<Expression>>{stubClass->get_transact_descriptor(&method)})); - // args VariableFactory stubArgs("_arg"); { @@ -525,9 +541,6 @@ static void generate_stub_code(const AidlInterface& iface, const AidlMethod& met generate_write_to_parcel(arg->GetType(), statements, v, transact_reply, true, typenames); } } - - // return true - statements->Add(std::make_shared<ReturnStatement>(TRUE_VALUE)); } static void generate_stub_case(const AidlInterface& iface, const AidlMethod& method, @@ -537,7 +550,8 @@ static void generate_stub_case(const AidlInterface& iface, const AidlMethod& met auto c = std::make_shared<Case>(transactCodeName); generate_stub_code(iface, method, oneway, stubClass->transact_data, stubClass->transact_reply, - typenames, c->statements, stubClass, options); + typenames, c->statements, options); + c->statements->Add(std::make_shared<BreakStatement>()); stubClass->transact_switch_user->cases.push_back(c); } @@ -562,7 +576,8 @@ static void generate_stub_case_outline(const AidlInterface& iface, const AidlMet stubClass->elements.push_back(onTransact_case); generate_stub_code(iface, method, oneway, transact_data, transact_reply, typenames, - onTransact_case->statements, stubClass, options); + onTransact_case->statements, options); + onTransact_case->statements->Add(std::make_shared<ReturnStatement>(TRUE_VALUE)); } // Generate the case dispatch. @@ -828,8 +843,7 @@ static void generate_methods(const AidlInterface& iface, const AidlMethod& metho if (method.GetName() == kGetInterfaceVersion && options.Version() > 0) { auto c = std::make_shared<Case>(transactCodeName); std::ostringstream code; - code << "data.enforceInterface(descriptor);\n" - << "reply.writeNoException();\n" + code << "reply.writeNoException();\n" << "reply.writeInt(" << kGetInterfaceVersion << "());\n" << "return true;\n"; c->statements->Add(std::make_shared<LiteralStatement>(code.str())); @@ -838,8 +852,7 @@ static void generate_methods(const AidlInterface& iface, const AidlMethod& metho if (method.GetName() == kGetInterfaceHash && !options.Hash().empty()) { auto c = std::make_shared<Case>(transactCodeName); std::ostringstream code; - code << "data.enforceInterface(descriptor);\n" - << "reply.writeNoException();\n" + code << "reply.writeNoException();\n" << "reply.writeString(" << kGetInterfaceHash << "());\n" << "return true;\n"; c->statements->Add(std::make_shared<LiteralStatement>(code.str())); diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INamedCallback.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INamedCallback.java index 60ddc7a0..aa427ae2 100644 --- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INamedCallback.java +++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INamedCallback.java @@ -46,6 +46,9 @@ public interface INamedCallback extends android.os.IInterface @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException { java.lang.String descriptor = DESCRIPTOR; + if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) { + data.enforceInterface(descriptor); + } switch (code) { case INTERFACE_TRANSACTION: @@ -58,17 +61,17 @@ public interface INamedCallback extends android.os.IInterface { case TRANSACTION_GetName: { - data.enforceInterface(descriptor); java.lang.String _result = this.GetName(); reply.writeNoException(); reply.writeString(_result); - return true; + break; } default: { return super.onTransact(code, data, reply, flags); } } + return true; } private static class Proxy implements android.aidl.tests.INamedCallback { diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INewName.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INewName.java index 893e43f3..e556b652 100644 --- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INewName.java +++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INewName.java @@ -46,6 +46,9 @@ public interface INewName extends android.os.IInterface @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException { java.lang.String descriptor = DESCRIPTOR; + if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) { + data.enforceInterface(descriptor); + } switch (code) { case INTERFACE_TRANSACTION: @@ -58,17 +61,17 @@ public interface INewName extends android.os.IInterface { case TRANSACTION_RealName: { - data.enforceInterface(descriptor); java.lang.String _result = this.RealName(); reply.writeNoException(); reply.writeString(_result); - return true; + break; } default: { return super.onTransact(code, data, reply, flags); } } + return true; } private static class Proxy implements android.aidl.tests.INewName { diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IOldName.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IOldName.java index c52387cd..109b6ec4 100644 --- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IOldName.java +++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IOldName.java @@ -46,6 +46,9 @@ public interface IOldName extends android.os.IInterface @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException { java.lang.String descriptor = DESCRIPTOR; + if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) { + data.enforceInterface(descriptor); + } switch (code) { case INTERFACE_TRANSACTION: @@ -58,17 +61,17 @@ public interface IOldName extends android.os.IInterface { case TRANSACTION_RealName: { - data.enforceInterface(descriptor); java.lang.String _result = this.RealName(); reply.writeNoException(); reply.writeString(_result); - return true; + break; } default: { return super.onTransact(code, data, reply, flags); } } + return true; } private static class Proxy implements android.aidl.tests.IOldName { diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java index 4d6f9fd9..2cbda57e 100644 --- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java +++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java @@ -265,6 +265,9 @@ public interface ITestService extends android.os.IInterface @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException { java.lang.String descriptor = DESCRIPTOR; + if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) { + data.enforceInterface(descriptor); + } switch (code) { case INTERFACE_TRANSACTION: @@ -277,140 +280,125 @@ public interface ITestService extends android.os.IInterface { case TRANSACTION_UnimplementedMethod: { - data.enforceInterface(descriptor); int _arg0; _arg0 = data.readInt(); int _result = this.UnimplementedMethod(_arg0); reply.writeNoException(); reply.writeInt(_result); - return true; + break; } case TRANSACTION_Deprecated: { - data.enforceInterface(descriptor); this.Deprecated(); reply.writeNoException(); - return true; + break; } case TRANSACTION_TestOneway: { - data.enforceInterface(descriptor); this.TestOneway(); - return true; + break; } case TRANSACTION_RepeatBoolean: { - data.enforceInterface(descriptor); boolean _arg0; _arg0 = (0!=data.readInt()); boolean _result = this.RepeatBoolean(_arg0); reply.writeNoException(); reply.writeInt(((_result)?(1):(0))); - return true; + break; } case TRANSACTION_RepeatByte: { - data.enforceInterface(descriptor); byte _arg0; _arg0 = data.readByte(); byte _result = this.RepeatByte(_arg0); reply.writeNoException(); reply.writeByte(_result); - return true; + break; } case TRANSACTION_RepeatChar: { - data.enforceInterface(descriptor); char _arg0; _arg0 = (char)data.readInt(); char _result = this.RepeatChar(_arg0); reply.writeNoException(); reply.writeInt(((int)_result)); - return true; + break; } case TRANSACTION_RepeatInt: { - data.enforceInterface(descriptor); int _arg0; _arg0 = data.readInt(); int _result = this.RepeatInt(_arg0); reply.writeNoException(); reply.writeInt(_result); - return true; + break; } case TRANSACTION_RepeatLong: { - data.enforceInterface(descriptor); long _arg0; _arg0 = data.readLong(); long _result = this.RepeatLong(_arg0); reply.writeNoException(); reply.writeLong(_result); - return true; + break; } case TRANSACTION_RepeatFloat: { - data.enforceInterface(descriptor); float _arg0; _arg0 = data.readFloat(); float _result = this.RepeatFloat(_arg0); reply.writeNoException(); reply.writeFloat(_result); - return true; + break; } case TRANSACTION_RepeatDouble: { - data.enforceInterface(descriptor); double _arg0; _arg0 = data.readDouble(); double _result = this.RepeatDouble(_arg0); reply.writeNoException(); reply.writeDouble(_result); - return true; + break; } case TRANSACTION_RepeatString: { - data.enforceInterface(descriptor); java.lang.String _arg0; _arg0 = data.readString(); java.lang.String _result = this.RepeatString(_arg0); reply.writeNoException(); reply.writeString(_result); - return true; + break; } case TRANSACTION_RepeatByteEnum: { - data.enforceInterface(descriptor); byte _arg0; _arg0 = data.readByte(); byte _result = this.RepeatByteEnum(_arg0); reply.writeNoException(); reply.writeByte(_result); - return true; + break; } case TRANSACTION_RepeatIntEnum: { - data.enforceInterface(descriptor); int _arg0; _arg0 = data.readInt(); int _result = this.RepeatIntEnum(_arg0); reply.writeNoException(); reply.writeInt(_result); - return true; + break; } case TRANSACTION_RepeatLongEnum: { - data.enforceInterface(descriptor); long _arg0; _arg0 = data.readLong(); long _result = this.RepeatLongEnum(_arg0); reply.writeNoException(); reply.writeLong(_result); - return true; + break; } case TRANSACTION_ReverseBoolean: { - data.enforceInterface(descriptor); boolean[] _arg0; _arg0 = data.createBooleanArray(); boolean[] _arg1; @@ -425,11 +413,10 @@ public interface ITestService extends android.os.IInterface reply.writeNoException(); reply.writeBooleanArray(_result); reply.writeBooleanArray(_arg1); - return true; + break; } case TRANSACTION_ReverseByte: { - data.enforceInterface(descriptor); byte[] _arg0; _arg0 = data.createByteArray(); byte[] _arg1; @@ -444,11 +431,10 @@ public interface ITestService extends android.os.IInterface reply.writeNoException(); reply.writeByteArray(_result); reply.writeByteArray(_arg1); - return true; + break; } case TRANSACTION_ReverseChar: { - data.enforceInterface(descriptor); char[] _arg0; _arg0 = data.createCharArray(); char[] _arg1; @@ -463,11 +449,10 @@ public interface ITestService extends android.os.IInterface reply.writeNoException(); reply.writeCharArray(_result); reply.writeCharArray(_arg1); - return true; + break; } case TRANSACTION_ReverseInt: { - data.enforceInterface(descriptor); int[] _arg0; _arg0 = data.createIntArray(); int[] _arg1; @@ -482,11 +467,10 @@ public interface ITestService extends android.os.IInterface reply.writeNoException(); reply.writeIntArray(_result); reply.writeIntArray(_arg1); - return true; + break; } case TRANSACTION_ReverseLong: { - data.enforceInterface(descriptor); long[] _arg0; _arg0 = data.createLongArray(); long[] _arg1; @@ -501,11 +485,10 @@ public interface ITestService extends android.os.IInterface reply.writeNoException(); reply.writeLongArray(_result); reply.writeLongArray(_arg1); - return true; + break; } case TRANSACTION_ReverseFloat: { - data.enforceInterface(descriptor); float[] _arg0; _arg0 = data.createFloatArray(); float[] _arg1; @@ -520,11 +503,10 @@ public interface ITestService extends android.os.IInterface reply.writeNoException(); reply.writeFloatArray(_result); reply.writeFloatArray(_arg1); - return true; + break; } case TRANSACTION_ReverseDouble: { - data.enforceInterface(descriptor); double[] _arg0; _arg0 = data.createDoubleArray(); double[] _arg1; @@ -539,11 +521,10 @@ public interface ITestService extends android.os.IInterface reply.writeNoException(); reply.writeDoubleArray(_result); reply.writeDoubleArray(_arg1); - return true; + break; } case TRANSACTION_ReverseString: { - data.enforceInterface(descriptor); java.lang.String[] _arg0; _arg0 = data.createStringArray(); java.lang.String[] _arg1; @@ -558,11 +539,10 @@ public interface ITestService extends android.os.IInterface reply.writeNoException(); reply.writeStringArray(_result); reply.writeStringArray(_arg1); - return true; + break; } case TRANSACTION_ReverseByteEnum: { - data.enforceInterface(descriptor); byte[] _arg0; _arg0 = data.createByteArray(); byte[] _arg1; @@ -577,11 +557,10 @@ public interface ITestService extends android.os.IInterface reply.writeNoException(); reply.writeByteArray(_result); reply.writeByteArray(_arg1); - return true; + break; } case TRANSACTION_ReverseIntEnum: { - data.enforceInterface(descriptor); int[] _arg0; _arg0 = data.createIntArray(); int[] _arg1; @@ -596,11 +575,10 @@ public interface ITestService extends android.os.IInterface reply.writeNoException(); reply.writeIntArray(_result); reply.writeIntArray(_arg1); - return true; + break; } case TRANSACTION_ReverseLongEnum: { - data.enforceInterface(descriptor); long[] _arg0; _arg0 = data.createLongArray(); long[] _arg1; @@ -615,21 +593,19 @@ public interface ITestService extends android.os.IInterface reply.writeNoException(); reply.writeLongArray(_result); reply.writeLongArray(_arg1); - return true; + break; } case TRANSACTION_GetOtherTestService: { - data.enforceInterface(descriptor); java.lang.String _arg0; _arg0 = data.readString(); android.aidl.tests.INamedCallback _result = this.GetOtherTestService(_arg0); reply.writeNoException(); reply.writeStrongBinder((((_result!=null))?(_result.asBinder()):(null))); - return true; + break; } case TRANSACTION_VerifyName: { - data.enforceInterface(descriptor); android.aidl.tests.INamedCallback _arg0; _arg0 = android.aidl.tests.INamedCallback.Stub.asInterface(data.readStrongBinder()); java.lang.String _arg1; @@ -637,11 +613,10 @@ public interface ITestService extends android.os.IInterface boolean _result = this.VerifyName(_arg0, _arg1); reply.writeNoException(); reply.writeInt(((_result)?(1):(0))); - return true; + break; } case TRANSACTION_ReverseStringList: { - data.enforceInterface(descriptor); java.util.List<java.lang.String> _arg0; _arg0 = data.createStringArrayList(); java.util.List<java.lang.String> _arg1; @@ -650,11 +625,10 @@ public interface ITestService extends android.os.IInterface reply.writeNoException(); reply.writeStringList(_result); reply.writeStringList(_arg1); - return true; + break; } case TRANSACTION_RepeatParcelFileDescriptor: { - data.enforceInterface(descriptor); android.os.ParcelFileDescriptor _arg0; if ((0!=data.readInt())) { _arg0 = android.os.ParcelFileDescriptor.CREATOR.createFromParcel(data); @@ -671,11 +645,10 @@ public interface ITestService extends android.os.IInterface else { reply.writeInt(0); } - return true; + break; } case TRANSACTION_ReverseParcelFileDescriptorArray: { - data.enforceInterface(descriptor); android.os.ParcelFileDescriptor[] _arg0; _arg0 = data.createTypedArray(android.os.ParcelFileDescriptor.CREATOR); android.os.ParcelFileDescriptor[] _arg1; @@ -690,80 +663,72 @@ public interface ITestService extends android.os.IInterface reply.writeNoException(); reply.writeTypedArray(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); reply.writeTypedArray(_arg1, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); - return true; + break; } case TRANSACTION_ThrowServiceException: { - data.enforceInterface(descriptor); int _arg0; _arg0 = data.readInt(); this.ThrowServiceException(_arg0); reply.writeNoException(); - return true; + break; } case TRANSACTION_RepeatNullableIntArray: { - data.enforceInterface(descriptor); int[] _arg0; _arg0 = data.createIntArray(); int[] _result = this.RepeatNullableIntArray(_arg0); reply.writeNoException(); reply.writeIntArray(_result); - return true; + break; } case TRANSACTION_RepeatNullableByteEnumArray: { - data.enforceInterface(descriptor); byte[] _arg0; _arg0 = data.createByteArray(); byte[] _result = this.RepeatNullableByteEnumArray(_arg0); reply.writeNoException(); reply.writeByteArray(_result); - return true; + break; } case TRANSACTION_RepeatNullableIntEnumArray: { - data.enforceInterface(descriptor); int[] _arg0; _arg0 = data.createIntArray(); int[] _result = this.RepeatNullableIntEnumArray(_arg0); reply.writeNoException(); reply.writeIntArray(_result); - return true; + break; } case TRANSACTION_RepeatNullableLongEnumArray: { - data.enforceInterface(descriptor); long[] _arg0; _arg0 = data.createLongArray(); long[] _result = this.RepeatNullableLongEnumArray(_arg0); reply.writeNoException(); reply.writeLongArray(_result); - return true; + break; } case TRANSACTION_RepeatNullableString: { - data.enforceInterface(descriptor); java.lang.String _arg0; _arg0 = data.readString(); java.lang.String _result = this.RepeatNullableString(_arg0); reply.writeNoException(); reply.writeString(_result); - return true; + break; } case TRANSACTION_RepeatNullableStringList: { - data.enforceInterface(descriptor); java.util.List<java.lang.String> _arg0; _arg0 = data.createStringArrayList(); java.util.List<java.lang.String> _result = this.RepeatNullableStringList(_arg0); reply.writeNoException(); reply.writeStringList(_result); - return true; + break; } case TRANSACTION_RepeatNullableParcelable: { - data.enforceInterface(descriptor); android.aidl.tests.StructuredParcelable _arg0; if ((0!=data.readInt())) { _arg0 = android.aidl.tests.StructuredParcelable.CREATOR.createFromParcel(data); @@ -780,49 +745,44 @@ public interface ITestService extends android.os.IInterface else { reply.writeInt(0); } - return true; + break; } case TRANSACTION_TakesAnIBinder: { - data.enforceInterface(descriptor); android.os.IBinder _arg0; _arg0 = data.readStrongBinder(); this.TakesAnIBinder(_arg0); reply.writeNoException(); - return true; + break; } case TRANSACTION_TakesANullableIBinder: { - data.enforceInterface(descriptor); android.os.IBinder _arg0; _arg0 = data.readStrongBinder(); this.TakesANullableIBinder(_arg0); reply.writeNoException(); - return true; + break; } case TRANSACTION_RepeatUtf8CppString: { - data.enforceInterface(descriptor); java.lang.String _arg0; _arg0 = data.readString(); java.lang.String _result = this.RepeatUtf8CppString(_arg0); reply.writeNoException(); reply.writeString(_result); - return true; + break; } case TRANSACTION_RepeatNullableUtf8CppString: { - data.enforceInterface(descriptor); java.lang.String _arg0; _arg0 = data.readString(); java.lang.String _result = this.RepeatNullableUtf8CppString(_arg0); reply.writeNoException(); reply.writeString(_result); - return true; + break; } case TRANSACTION_ReverseUtf8CppString: { - data.enforceInterface(descriptor); java.lang.String[] _arg0; _arg0 = data.createStringArray(); java.lang.String[] _arg1; @@ -837,11 +797,10 @@ public interface ITestService extends android.os.IInterface reply.writeNoException(); reply.writeStringArray(_result); reply.writeStringArray(_arg1); - return true; + break; } case TRANSACTION_ReverseNullableUtf8CppString: { - data.enforceInterface(descriptor); java.lang.String[] _arg0; _arg0 = data.createStringArray(); java.lang.String[] _arg1; @@ -856,11 +815,10 @@ public interface ITestService extends android.os.IInterface reply.writeNoException(); reply.writeStringArray(_result); reply.writeStringArray(_arg1); - return true; + break; } case TRANSACTION_ReverseUtf8CppStringList: { - data.enforceInterface(descriptor); java.util.List<java.lang.String> _arg0; _arg0 = data.createStringArrayList(); java.util.List<java.lang.String> _arg1; @@ -869,21 +827,19 @@ public interface ITestService extends android.os.IInterface reply.writeNoException(); reply.writeStringList(_result); reply.writeStringList(_arg1); - return true; + break; } case TRANSACTION_GetCallback: { - data.enforceInterface(descriptor); boolean _arg0; _arg0 = (0!=data.readInt()); android.aidl.tests.INamedCallback _result = this.GetCallback(_arg0); reply.writeNoException(); reply.writeStrongBinder((((_result!=null))?(_result.asBinder()):(null))); - return true; + break; } case TRANSACTION_FillOutStructuredParcelable: { - data.enforceInterface(descriptor); android.aidl.tests.StructuredParcelable _arg0; if ((0!=data.readInt())) { _arg0 = android.aidl.tests.StructuredParcelable.CREATOR.createFromParcel(data); @@ -900,45 +856,42 @@ public interface ITestService extends android.os.IInterface else { reply.writeInt(0); } - return true; + break; } case TRANSACTION_GetOldNameInterface: { - data.enforceInterface(descriptor); android.aidl.tests.IOldName _result = this.GetOldNameInterface(); reply.writeNoException(); reply.writeStrongBinder((((_result!=null))?(_result.asBinder()):(null))); - return true; + break; } case TRANSACTION_GetNewNameInterface: { - data.enforceInterface(descriptor); android.aidl.tests.INewName _result = this.GetNewNameInterface(); reply.writeNoException(); reply.writeStrongBinder((((_result!=null))?(_result.asBinder()):(null))); - return true; + break; } case TRANSACTION_GetCppJavaTests: { - data.enforceInterface(descriptor); android.os.IBinder _result = this.GetCppJavaTests(); reply.writeNoException(); reply.writeStrongBinder(_result); - return true; + break; } case TRANSACTION_getBackendType: { - data.enforceInterface(descriptor); byte _result = this.getBackendType(); reply.writeNoException(); reply.writeByte(_result); - return true; + break; } default: { return super.onTransact(code, data, reply, flags); } } + return true; } private static class Proxy implements android.aidl.tests.ITestService { diff --git a/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java b/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java index bcb8001e..9927faf2 100644 --- a/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java +++ b/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java @@ -46,6 +46,9 @@ public interface ILoggableInterface extends android.os.IInterface @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException { java.lang.String descriptor = DESCRIPTOR; + if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) { + data.enforceInterface(descriptor); + } switch (code) { case INTERFACE_TRANSACTION: @@ -60,7 +63,6 @@ public interface ILoggableInterface extends android.os.IInterface { try { android.os.Trace.traceBegin(android.os.Trace.TRACE_TAG_AIDL, "AIDL::java::ILoggableInterface::LogThis::server"); - data.enforceInterface(descriptor); boolean _arg0; _arg0 = (0!=data.readInt()); boolean[] _arg1; @@ -133,17 +135,18 @@ public interface ILoggableInterface extends android.os.IInterface reply.writeInt(0); } reply.writeTypedArray(_arg20, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); - return true; } finally { android.os.Trace.traceEnd(android.os.Trace.TRACE_TAG_AIDL); } + break; } default: { return super.onTransact(code, data, reply, flags); } } + return true; } private static class Proxy implements android.aidl.loggable.ILoggableInterface { |