diff options
author | Eric Laurent <elaurent@google.com> | 2014-11-10 23:16:22 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-11-10 23:16:22 +0000 |
commit | 3aef35600523eb6b4ccc8086a8913e80701a031a (patch) | |
tree | 04abfec97e7e0d0b54b1037b06529d2ca26ebbdd | |
parent | 4fbe49a83d41a64d44e363ccd691e7bfc41bb6af (diff) | |
parent | e360f0f6cad290f69e07fd3a20dcf11a1dbc4160 (diff) | |
download | frameworks_av-3aef35600523eb6b4ccc8086a8913e80701a031a.zip frameworks_av-3aef35600523eb6b4ccc8086a8913e80701a031a.tar.gz frameworks_av-3aef35600523eb6b4ccc8086a8913e80701a031a.tar.bz2 |
am e360f0f6: IAudioPolicyService: bound array size in queryDefaultPreProcessing
* commit 'e360f0f6cad290f69e07fd3a20dcf11a1dbc4160':
IAudioPolicyService: bound array size in queryDefaultPreProcessing
-rw-r--r-- | include/media/AudioEffect.h | 9 | ||||
-rw-r--r-- | media/libmedia/IAudioPolicyService.cpp | 9 |
2 files changed, 13 insertions, 5 deletions
diff --git a/include/media/AudioEffect.h b/include/media/AudioEffect.h index 05d834d..eef1b41 100644 --- a/include/media/AudioEffect.h +++ b/include/media/AudioEffect.h @@ -133,10 +133,11 @@ public: * * Returned value * *descriptor updated with descriptors of pre processings enabled by default - * *count number of descriptors returned if returned status is N_ERROR. + * *count number of descriptors returned if returned status is NO_ERROR. * total number of pre processing enabled by default if returned status is * NO_MEMORY. This happens if the count passed as input is less than the number - * of descriptors to return + * of descriptors to return. + * *count is limited to kMaxPreProcessing on return. */ static status_t queryDefaultPreProcessing(int audioSession, effect_descriptor_t *descriptors, @@ -390,6 +391,10 @@ public: */ static status_t guidToString(const effect_uuid_t *guid, char *str, size_t maxLen); + // kMaxPreProcessing is a reasonable value for the maximum number of preprocessing effects + // that can be applied simultaneously. + static const uint32_t kMaxPreProcessing = 10; + protected: bool mEnabled; // enable state int32_t mSessionId; // audio session ID diff --git a/media/libmedia/IAudioPolicyService.cpp b/media/libmedia/IAudioPolicyService.cpp index 386c351..109044d 100644 --- a/media/libmedia/IAudioPolicyService.cpp +++ b/media/libmedia/IAudioPolicyService.cpp @@ -23,6 +23,7 @@ #include <binder/Parcel.h> +#include <media/AudioEffect.h> #include <media/IAudioPolicyService.h> #include <system/audio.h> @@ -635,16 +636,18 @@ status_t BnAudioPolicyService::onTransact( CHECK_INTERFACE(IAudioPolicyService, data, reply); int audioSession = data.readInt32(); uint32_t count = data.readInt32(); + if (count > AudioEffect::kMaxPreProcessing) { + count = AudioEffect::kMaxPreProcessing; + } uint32_t retCount = count; - effect_descriptor_t *descriptors = - (effect_descriptor_t *)new char[count * sizeof(effect_descriptor_t)]; + effect_descriptor_t *descriptors = new effect_descriptor_t[count]; status_t status = queryDefaultPreProcessing(audioSession, descriptors, &retCount); reply->writeInt32(status); if (status != NO_ERROR && status != NO_MEMORY) { retCount = 0; } reply->writeInt32(retCount); - if (retCount) { + if (retCount != 0) { if (retCount < count) { count = retCount; } |