From d09ef36bd453b259733b891d92a0879136510641 Mon Sep 17 00:00:00 2001 From: kolaente Date: Wed, 15 Apr 2026 13:05:40 +0200 Subject: [PATCH] fix(frontend): guard Object.keys against null in refactored helpers typeof null === 'object', so null slipped past the type guards in objectToCamelCase/objectToSnakeCase/prepareParams. The original for...in loops silently iterated nothing on null; Object.keys(null) throws. Also guard saveCollapsedBucketState where state[projectId] may be undefined. --- frontend/src/helpers/case.ts | 4 ++-- frontend/src/helpers/saveCollapsedBucketState.ts | 2 +- frontend/src/services/abstractService.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/helpers/case.ts b/frontend/src/helpers/case.ts index 0b98fdb0e..6458eb115 100644 --- a/frontend/src/helpers/case.ts +++ b/frontend/src/helpers/case.ts @@ -7,7 +7,7 @@ import {camelCase, snakeCase} from 'change-case' export function objectToCamelCase(object: Record) { // When calling recursively, this can be called without being and object or array in which case we just return the value - if (typeof object !== 'object') { + if (typeof object !== 'object' || object === null) { return object } @@ -45,7 +45,7 @@ export function objectToCamelCase(object: Record) { export function objectToSnakeCase(object: Record) { // When calling recursively, this can be called without being and object or array in which case we just return the value - if (typeof object !== 'object') { + if (typeof object !== 'object' || object === null) { return object } diff --git a/frontend/src/helpers/saveCollapsedBucketState.ts b/frontend/src/helpers/saveCollapsedBucketState.ts index f4e0487de..d852690b4 100644 --- a/frontend/src/helpers/saveCollapsedBucketState.ts +++ b/frontend/src/helpers/saveCollapsedBucketState.ts @@ -18,7 +18,7 @@ export const saveCollapsedBucketState = ( ) => { const state = getAllState() state[projectId] = collapsedBuckets - for (const bucketId of Object.keys(state[projectId])) { + for (const bucketId of Object.keys(state[projectId] ?? {})) { if (!state[projectId][bucketId]) { delete state[projectId][bucketId] } diff --git a/frontend/src/services/abstractService.ts b/frontend/src/services/abstractService.ts index 73ac253d0..72261a4db 100644 --- a/frontend/src/services/abstractService.ts +++ b/frontend/src/services/abstractService.ts @@ -24,7 +24,7 @@ function convertObject(o: unknown) { } function prepareParams(params: Record) { - if (typeof params !== 'object') { + if (typeof params !== 'object' || params === null) { return params }