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