diff options
author | 2019-11-05 12:34:36 -0800 | |
---|---|---|
committer | 2019-11-05 14:31:32 -0800 | |
commit | aeaaf1c2805dd4e51dedbafb705db0f7b44b443a (patch) | |
tree | 9c7fcfd5fa5f316e0749ecaafbd21fd568dc388e /libs/binder/IAppOpsService.cpp | |
parent | 0be01b4efc148049015e3df39bee7f1ec6f20ba6 (diff) |
Allow null featureIds in AppOpsService binder calls
Bug: 136595429
Test: atest CtsAppOpsTestCases
Change-Id: I48713e962e3c3b60bd31ef134712a1d2f3da7cf5
Diffstat (limited to 'libs/binder/IAppOpsService.cpp')
-rw-r--r-- | libs/binder/IAppOpsService.cpp | 61 |
1 files changed, 27 insertions, 34 deletions
diff --git a/libs/binder/IAppOpsService.cpp b/libs/binder/IAppOpsService.cpp index 9760e135a1..b85a5f298e 100644 --- a/libs/binder/IAppOpsService.cpp +++ b/libs/binder/IAppOpsService.cpp @@ -46,12 +46,14 @@ public: return reply.readInt32(); } - virtual int32_t noteOperation(int32_t code, int32_t uid, const String16& packageName) { + virtual int32_t noteOperation(int32_t code, int32_t uid, const String16& packageName, + const std::unique_ptr<String16>& featureId) { Parcel data, reply; data.writeInterfaceToken(IAppOpsService::getInterfaceDescriptor()); data.writeInt32(code); data.writeInt32(uid); data.writeString16(packageName); + data.writeString16(featureId); remote()->transact(NOTE_OPERATION_TRANSACTION, data, &reply); // fail on exception if (reply.readExceptionCode() != 0) return MODE_ERRORED; @@ -59,13 +61,15 @@ public: } virtual int32_t startOperation(const sp<IBinder>& token, int32_t code, int32_t uid, - const String16& packageName, bool startIfModeDefault) { + const String16& packageName, const std::unique_ptr<String16>& featureId, + bool startIfModeDefault) { Parcel data, reply; data.writeInterfaceToken(IAppOpsService::getInterfaceDescriptor()); data.writeStrongBinder(token); data.writeInt32(code); data.writeInt32(uid); data.writeString16(packageName); + data.writeString16(featureId); data.writeInt32(startIfModeDefault ? 1 : 0); remote()->transact(START_OPERATION_TRANSACTION, data, &reply); // fail on exception @@ -74,13 +78,14 @@ public: } virtual void finishOperation(const sp<IBinder>& token, int32_t code, int32_t uid, - const String16& packageName) { + const String16& packageName, const std::unique_ptr<String16>& featureId) { Parcel data, reply; data.writeInterfaceToken(IAppOpsService::getInterfaceDescriptor()); data.writeStrongBinder(token); data.writeInt32(code); data.writeInt32(uid); data.writeString16(packageName); + data.writeString16(featureId); remote()->transact(FINISH_OPERATION_TRANSACTION, data, &reply); } @@ -144,37 +149,16 @@ public: remote()->transact(SET_CAMERA_AUDIO_RESTRICTION_TRANSACTION, data, &reply); } - virtual void noteAsyncOp(const String16& callingPackageName, int32_t uid, - const String16& packageName, int32_t opCode, const String16& featureId, + virtual void noteAsyncOp(const std::unique_ptr<String16>& callingPackageName, int32_t uid, + const String16& packageName, int32_t opCode, const std::unique_ptr<String16>& featureId, const String16& message) { Parcel data, reply; data.writeInterfaceToken(IAppOpsService::getInterfaceDescriptor()); - - // Convert empty callingPackage into null string - if (callingPackageName.size() != 0) { - data.writeString16(callingPackageName); - } else { - data.writeString16(nullptr, 0); - } - + data.writeString16(callingPackageName); data.writeInt32(uid); - - // Convert empty packageName into null string - if (packageName.size() != 0) { - data.writeString16(packageName); - } else { - data.writeString16(nullptr, 0); - } - + data.writeString16(packageName); data.writeInt32(opCode); - - // Convert empty featureId into null string - if (featureId.size() != 0) { - data.writeString16(featureId); - } else { - data.writeString16(nullptr, 0); - } - + data.writeString16(featureId); data.writeString16(message); remote()->transact(NOTE_ASYNC_OP_TRANSACTION, data, &reply); } @@ -217,7 +201,9 @@ status_t BnAppOpsService::onTransact( int32_t code = data.readInt32(); int32_t uid = data.readInt32(); String16 packageName = data.readString16(); - int32_t res = noteOperation(code, uid, packageName); + std::unique_ptr<String16> featureId; + data.readString16(&featureId); + int32_t res = noteOperation(code, uid, packageName, featureId); reply->writeNoException(); reply->writeInt32(res); return NO_ERROR; @@ -228,8 +214,11 @@ status_t BnAppOpsService::onTransact( int32_t code = data.readInt32(); int32_t uid = data.readInt32(); String16 packageName = data.readString16(); + std::unique_ptr<String16> featureId; + data.readString16(&featureId); bool startIfModeDefault = data.readInt32() == 1; - int32_t res = startOperation(token, code, uid, packageName, startIfModeDefault); + int32_t res = startOperation(token, code, uid, packageName, featureId, + startIfModeDefault); reply->writeNoException(); reply->writeInt32(res); return NO_ERROR; @@ -240,7 +229,9 @@ status_t BnAppOpsService::onTransact( int32_t code = data.readInt32(); int32_t uid = data.readInt32(); String16 packageName = data.readString16(); - finishOperation(token, code, uid, packageName); + std::unique_ptr<String16> featureId; + data.readString16(&featureId); + finishOperation(token, code, uid, packageName, featureId); reply->writeNoException(); return NO_ERROR; } break; @@ -296,11 +287,13 @@ status_t BnAppOpsService::onTransact( } break; case NOTE_ASYNC_OP_TRANSACTION: { CHECK_INTERFACE(IAppOpsService, data, reply); - String16 callingPackageName = data.readString16(); + std::unique_ptr<String16> callingPackageName; + data.readString16(&callingPackageName); int32_t uid = data.readInt32(); String16 packageName = data.readString16(); int32_t opCode = data.readInt32(); - String16 featureId = data.readString16(); + std::unique_ptr<String16> featureId; + data.readString16(&featureId); String16 message = data.readString16(); noteAsyncOp(callingPackageName, uid, packageName, opCode, featureId, message); reply->writeNoException(); |