summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2013-03-01 19:06:22 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2013-03-01 19:06:23 +0000
commitc0048178a1d312e7e05557ba99becd6a89b9e97a (patch)
tree374bc9528681b6bc179ca02dfcf8ca0d8afc48c5
parentceb83b8d8919dc778402bf610c073987d4f9f89b (diff)
parentd01c148195283d6bc68e2bd1486380f118d89e00 (diff)
Merge "Avoid invalid memory access when using extractMetadata()"
-rw-r--r--media/libmedia/IMediaMetadataRetriever.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/media/libmedia/IMediaMetadataRetriever.cpp b/media/libmedia/IMediaMetadataRetriever.cpp
index 7e6d54bd..bb066a00 100644
--- a/media/libmedia/IMediaMetadataRetriever.cpp
+++ b/media/libmedia/IMediaMetadataRetriever.cpp
@@ -20,6 +20,7 @@
#include <binder/Parcel.h>
#include <media/IMediaMetadataRetriever.h>
#include <utils/String8.h>
+#include <utils/KeyedVector.h>
// The binder is supposed to propagate the scheduler group across
// the binder interface so that remote calls are executed with
@@ -161,8 +162,22 @@ public:
if (ret != NO_ERROR) {
return NULL;
}
- return reply.readCString();
+ const char* str = reply.readCString();
+ if (str != NULL) {
+ String8 value(str);
+ if (mMetadata.indexOfKey(keyCode) < 0) {
+ mMetadata.add(keyCode, value);
+ } else {
+ mMetadata.replaceValueFor(keyCode, value);
+ }
+ return mMetadata.valueFor(keyCode).string();
+ } else {
+ return NULL;
+ }
}
+
+private:
+ KeyedVector<int, String8> mMetadata;
};
IMPLEMENT_META_INTERFACE(MediaMetadataRetriever, "android.media.IMediaMetadataRetriever");