summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2014-11-10 23:16:22 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-11-10 23:16:22 +0000
commit3aef35600523eb6b4ccc8086a8913e80701a031a (patch)
tree04abfec97e7e0d0b54b1037b06529d2ca26ebbdd
parent4fbe49a83d41a64d44e363ccd691e7bfc41bb6af (diff)
parente360f0f6cad290f69e07fd3a20dcf11a1dbc4160 (diff)
downloadframeworks_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.h9
-rw-r--r--media/libmedia/IAudioPolicyService.cpp9
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;
}