Skip to content

Commit 9784272

Browse files
committed
fix(database): handle malformed criteria in saved filters and subscriptions
- Add validation for 'criteria' in saved filters and notification subscriptions - Skip processing for malformed criteria instead of throwing an error - Log a warning message for skipped filters or subscriptions
1 parent 9c3948b commit 9784272

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

lib/src/database/migrations/20251111000000_unify_interests_and_remote_config.dart

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,16 @@ class UnifyInterestsAndRemoteConfig extends Migration {
6363

6464
// Process saved filters
6565
for (final filter in savedFilters) {
66-
final criteria = InterestCriteria.fromJson(
67-
filter['criteria'] as Map<String, dynamic>,
68-
);
66+
final criteriaData = filter['criteria'];
67+
if (criteriaData is! Map<String, dynamic>) {
68+
log.warning(
69+
'User $userId has a malformed savedFilter with missing or invalid '
70+
'"criteria". Skipping this filter.',
71+
);
72+
continue;
73+
}
74+
75+
final criteria = InterestCriteria.fromJson(criteriaData);
6976
final key = _generateCriteriaKey(criteria);
7077

7178
interestMap.update(
@@ -84,9 +91,16 @@ class UnifyInterestsAndRemoteConfig extends Migration {
8491

8592
// Process notification subscriptions
8693
for (final subscription in notificationSubscriptions) {
87-
final criteria = InterestCriteria.fromJson(
88-
subscription['criteria'] as Map<String, dynamic>,
89-
);
94+
final criteriaData = subscription['criteria'];
95+
if (criteriaData is! Map<String, dynamic>) {
96+
log.warning(
97+
'User $userId has a malformed notificationSubscription with '
98+
'missing or invalid "criteria". Skipping this subscription.',
99+
);
100+
continue;
101+
}
102+
103+
final criteria = InterestCriteria.fromJson(criteriaData);
90104
final key = _generateCriteriaKey(criteria);
91105
final deliveryTypes =
92106
(subscription['deliveryTypes'] as List<dynamic>? ?? [])

0 commit comments

Comments
 (0)