diff --git a/lib/SimpleSAML/Utils/Config/Metadata.php b/lib/SimpleSAML/Utils/Config/Metadata.php
index 3ac022ba3afa490de121c8de7b6ec7754ea9434f..3e50fab4f56a32357371a4128e0c210334d8fc88 100644
--- a/lib/SimpleSAML/Utils/Config/Metadata.php
+++ b/lib/SimpleSAML/Utils/Config/Metadata.php
@@ -257,10 +257,30 @@ class Metadata
      */
     public static function isHiddenFromDiscovery(array $metadata)
     {
-        try {
-            return @in_array(self::$HIDE_FROM_DISCOVERY, $metadata['EntityAttributes'][self::$ENTITY_CATEGORY]);
-        } catch (\Exception $e) {
+        if (!is_array($metadata)) {
+            return false;
         }
-        return false;
+
+        if (!array_key_exists('EntityAttributes', $metadata)) {
+            return false;
+        }
+
+        if (!is_array($metadata['EntityAttributes'])) {
+            return false;
+        }
+
+        if (!array_key_exists(self::$ENTITY_CATEGORY, $metadata['EntityAttributes'])) {
+            return false;
+        }
+
+        if (!is_array($metadata['EntityAttributes'][self::$ENTITY_CATEGORY])) {
+            return false;
+        }
+
+        if (!in_array(self::$HIDE_FROM_DISCOVERY, $metadata['EntityAttributes'][self::$ENTITY_CATEGORY])) {
+            return false;
+        }
+
+        return true;
     }
 }