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 | c0048178a1d312e7e05557ba99becd6a89b9e97a (patch) | |
tree | 374bc9528681b6bc179ca02dfcf8ca0d8afc48c5 /media | |
parent | ceb83b8d8919dc778402bf610c073987d4f9f89b (diff) | |
parent | d01c148195283d6bc68e2bd1486380f118d89e00 (diff) | |
download | frameworks_av-c0048178a1d312e7e05557ba99becd6a89b9e97a.zip frameworks_av-c0048178a1d312e7e05557ba99becd6a89b9e97a.tar.gz frameworks_av-c0048178a1d312e7e05557ba99becd6a89b9e97a.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"); |