Zero hidl-generated structs (cas)
Bug: 131356202
Test: boot
Change-Id: I41de4b8de19a060e064ff8457b81b918c4ce887f
diff --git a/cas/1.0/default/FactoryLoader.h b/cas/1.0/default/FactoryLoader.h
index 18c2186..943f761 100644
--- a/cas/1.0/default/FactoryLoader.h
+++ b/cas/1.0/default/FactoryLoader.h
@@ -45,9 +45,9 @@
sp<SharedLibrary> *library = NULL,
T** factory = NULL);
- bool enumeratePlugins(vector<HidlCasPluginDescriptor>* results);
+ bool enumeratePlugins(hidl_vec<HidlCasPluginDescriptor>* results);
-private:
+ private:
typedef T*(*CreateFactoryFunc)();
Mutex mMapLock;
@@ -63,9 +63,7 @@
sp<SharedLibrary> *library,
T** factory);
- bool queryPluginsFromPath(
- const String8 &path,
- vector<HidlCasPluginDescriptor>* results);
+ bool queryPluginsFromPath(const String8& path, hidl_vec<HidlCasPluginDescriptor>* results);
bool openFactory(const String8 &path);
void closeFactory();
@@ -121,12 +119,9 @@
}
template <class T>
-bool FactoryLoader<T>::enumeratePlugins(
- vector<HidlCasPluginDescriptor>* results) {
+bool FactoryLoader<T>::enumeratePlugins(hidl_vec<HidlCasPluginDescriptor>* results) {
ALOGI("enumeratePlugins");
- results->clear();
-
String8 dirPath("/vendor/lib/mediacas");
DIR* pDir = opendir(dirPath.string());
@@ -168,8 +163,8 @@
}
template <class T>
-bool FactoryLoader<T>::queryPluginsFromPath(
- const String8 &path, vector<HidlCasPluginDescriptor>* results) {
+bool FactoryLoader<T>::queryPluginsFromPath(const String8& path,
+ hidl_vec<HidlCasPluginDescriptor>* results) {
closeFactory();
vector<CasPluginDescriptor> descriptors;
@@ -178,11 +173,19 @@
return false;
}
- for (auto it = descriptors.begin(); it != descriptors.end(); it++) {
- results->push_back( HidlCasPluginDescriptor {
- .caSystemId = it->CA_system_id,
- .name = it->name.c_str()});
+ results->resize(descriptors.size());
+
+ if (results->size() >= SIZE_MAX / sizeof(HidlCasPluginDescriptor)) {
+ return false;
}
+ memset(results->data(), 0, results->size() * sizeof(HidlCasPluginDescriptor));
+
+ for (size_t i = 0; i < results->size(); i++) {
+ HidlCasPluginDescriptor& descriptor = (*results)[i];
+ descriptor.caSystemId = descriptors[i].CA_system_id;
+ descriptor.name = descriptors[i].name.c_str();
+ }
+
return true;
}
diff --git a/cas/1.0/default/MediaCasService.cpp b/cas/1.0/default/MediaCasService.cpp
index dbdd008..b159f5b 100644
--- a/cas/1.0/default/MediaCasService.cpp
+++ b/cas/1.0/default/MediaCasService.cpp
@@ -44,7 +44,7 @@
ALOGV("%s", __FUNCTION__);
- vector<HidlCasPluginDescriptor> results;
+ hidl_vec<HidlCasPluginDescriptor> results;
mCasLoader.enumeratePlugins(&results);
_hidl_cb(results);