aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Jeon <kevinjeon@google.com>2021-07-27 16:06:07 +0000
committerKevin Jeon <kevinjeon@google.com>2021-08-04 01:06:44 +0000
commitf2551d82b776f2e524af13db35b7a546e1190c9c (patch)
tree5cd118c771e9569cbddfd7b9b21cb3dc1a1a75e3
parent1f3d8f76e9294908711ca72da1f114f4148b3d81 (diff)
downloadaidl-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
-rw-r--r--ast_java.cpp4
-rw-r--r--ast_java.h6
-rw-r--r--generate_java_binder.cpp43
-rw-r--r--tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INamedCallback.java7
-rw-r--r--tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INewName.java7
-rw-r--r--tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IOldName.java7
-rw-r--r--tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java157
-rw-r--r--tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java7
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);
diff --git a/ast_java.h b/ast_java.h
index d4e89444..a0076bb9 100644
--- a/ast_java.h
+++ b/ast_java.h
@@ -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
{