OSDN Git Service

Don't assume layers exist when prop is set
authorMichael Lentine <mlentine@google.com>
Thu, 19 Nov 2015 02:28:07 +0000 (18:28 -0800)
committerJesse Hall <jessehall@google.com>
Mon, 25 Jan 2016 21:49:31 +0000 (13:49 -0800)
Previously we assumed that layers were valid when set via adb
shellprop but instead we should make sure they exist first. If they
don't ignore it and continue.

Change-Id: I161b7afa58e747080a9eeb112f933976a381b4c0
(cherry picked from commit c9625127034ab237da69d7da766e20d666545b13)

vulkan/libvulkan/loader.cpp

index 4b55b55..888c7d7 100644 (file)
@@ -320,6 +320,9 @@ template <class TObject>
 void ActivateLayer(TObject* object, Instance* instance, const String& name) {
     // If object has layer, do nothing
     auto element = instance->layers.find(name);
+    if (element == instance->layers.end()) {
+        return;
+    }
     if (std::find(object->active_layers.begin(), object->active_layers.end(),
                   element) != object->active_layers.end()) {
         ALOGW("Layer %s already activated; skipping", name.c_str());
@@ -405,10 +408,7 @@ VkResult ActivateAllLayers(TInfo create_info, Instance* instance, TObject* objec
         size_t end, start = 0;
         while ((end = layer_prop_str.find(':', start)) != std::string::npos) {
             layer_name = layer_prop_str.substr(start, end - start);
-            auto element = instance->layers.find(layer_name);
-            if (element != instance->layers.end()) {
-                ActivateLayer(object, instance, layer_name);
-            }
+            ActivateLayer(object, instance, layer_name);
             start = end + 1;
         }
         Vector<String> layer_names(CallbackAllocator<String>(instance->alloc));