diff options
author | Marco Nelissen <marcone@google.com> | 2013-03-01 19:06:22 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2013-03-01 19:06:23 +0000 |
commit | 1a76084dd8918533b00d76fbef15888742f752df (patch) | |
tree | 31241ba242b5cf8c9c93a6ef1ee2eb1ca19cd101 /media | |
parent | d166e4c1b2463a1aa78ca9225a36aa956427446b (diff) | |
parent | d72b2aa86e19644bbaa72039b3a3044390ba0ecd (diff) | |
download | frameworks_av-1a76084dd8918533b00d76fbef15888742f752df.zip frameworks_av-1a76084dd8918533b00d76fbef15888742f752df.tar.gz frameworks_av-1a76084dd8918533b00d76fbef15888742f752df.tar.bz2 |
Merge "Avoid invalid memory access when using extractMetadata()"
Diffstat (limited to 'media')
-rw-r--r-- | media/libmedia/IMediaMetadataRetriever.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/media/libmedia/IMediaMetadataRetriever.cpp b/media/libmedia/IMediaMetadataRetriever.cpp index 7e6d54b..bb066a0 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"); |