diff --git a/keyserver/src/creators/role-creator.js b/keyserver/src/creators/role-creator.js --- a/keyserver/src/creators/role-creator.js +++ b/keyserver/src/creators/role-creator.js @@ -1,5 +1,7 @@ // @flow +import invariant from 'invariant'; + import { getThreadPermissionBlobFromUserSurfacedPermissions } from 'lib/permissions/keyserver-permissions.js'; import { defaultSpecialRoles, @@ -48,6 +50,7 @@ const namesToIDs: { [string]: string } = {}; for (const name of Object.keys(rolePermissions)) { const id = ids.shift(); + invariant(id !== undefined, 'no role id created'); namesToIDs[name] = id; const permissionsBlob = JSON.stringify(rolePermissions[name]); const specialRole = defaultSpecialRoles[name] ?? null; diff --git a/keyserver/src/creators/upload-creator.js b/keyserver/src/creators/upload-creator.js --- a/keyserver/src/creators/upload-creator.js +++ b/keyserver/src/creators/upload-creator.js @@ -1,6 +1,7 @@ // @flow import crypto from 'crypto'; +import invariant from 'invariant'; import type { MediaType, @@ -46,6 +47,7 @@ const ids = await createIDs('uploads', uploadInfos.length); const uploadRows = uploadInfos.map(uploadInfo => { const id = ids.shift(); + invariant(id !== undefined, 'no role id created'); const secret = crypto.randomBytes(8).toString('hex'); const { content, dimensions, mediaType, loop, encryptionKey, thumbHash } = uploadInfo; diff --git a/native/redux/persist.js b/native/redux/persist.js --- a/native/redux/persist.js +++ b/native/redux/persist.js @@ -462,6 +462,9 @@ const stack = [...rootIDs]; while (stack.length > 0) { const threadID = stack.shift(); + if (!threadID) { + break; + } const threadInfo = state.threadStore.threadInfos[threadID]; const parentThreadInfo = threadInfo.parentThreadID ? threadInfos[threadInfo.parentThreadID]