From 60cdf9e8d76baf01b5156b04e742eef2f4d8e50a Mon Sep 17 00:00:00 2001
From: Chris Beer <cabeer@stanford.edu>
Date: Sun, 17 May 2020 08:24:19 -0700
Subject: [PATCH] Guard against literal null values in metadata; fixes #3035

---
 __tests__/src/selectors/manifests.test.js | 2 ++
 src/state/selectors/manifests.js          | 3 ++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/__tests__/src/selectors/manifests.test.js b/__tests__/src/selectors/manifests.test.js
index c51962e0d..0460a07c5 100644
--- a/__tests__/src/selectors/manifests.test.js
+++ b/__tests__/src/selectors/manifests.test.js
@@ -360,6 +360,8 @@ describe('getMetadataLocales', () => {
           label: 'Some label',
           value: { '@language': 'one-value', '@value': '1' },
         },
+        { label: 'Bad value', value: null },
+        { label: null, value: 'Bad label' },
       ],
     };
     const state = { manifests: { x: { json: manifest } } };
diff --git a/src/state/selectors/manifests.js b/src/state/selectors/manifests.js
index 7c166c30d..4dc15f631 100644
--- a/src/state/selectors/manifests.js
+++ b/src/state/selectors/manifests.js
@@ -338,9 +338,10 @@ export const getManifestMetadata = createSelector(
 /** */
 function getLocalesForStructure(item) {
   const languages = [];
+
   if (Array.isArray(item)) {
     languages.push(...item.filter(i => (typeof i === 'object' && i['@language'])).map(i => i['@language']));
-  } else if (typeof item === 'object') {
+  } else if (item && typeof item === 'object') {
     if (item['@language']) languages.push(item['@language']);
   }
   return languages;
-- 
GitLab