From 130f90d7276bd638d02a6cf5c468f7edc454d81b Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 22 Oct 2025 15:45:21 +0200 Subject: [PATCH] fix(bfp): Trim meta data so it can still be stored Signed-off-by: Joas Schilling --- .../Bruteforce/Backend/DatabaseBackend.php | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/lib/private/Security/Bruteforce/Backend/DatabaseBackend.php b/lib/private/Security/Bruteforce/Backend/DatabaseBackend.php index 33c2a3aae62..ddf31175c5e 100644 --- a/lib/private/Security/Bruteforce/Backend/DatabaseBackend.php +++ b/lib/private/Security/Bruteforce/Backend/DatabaseBackend.php @@ -37,7 +37,8 @@ class DatabaseBackend implements IBackend { $query->andWhere($query->expr()->eq('action', $query->createNamedParameter($action))); if ($metadata !== null) { - $query->andWhere($query->expr()->eq('metadata', $query->createNamedParameter(json_encode($metadata)))); + $trimmedMetaData = $this->trimMetaData($metadata); + $query->andWhere($query->expr()->eq('metadata', $query->createNamedParameter($trimmedMetaData))); } } @@ -64,7 +65,8 @@ class DatabaseBackend implements IBackend { $query->andWhere($query->expr()->eq('action', $query->createNamedParameter($action))); if ($metadata !== null) { - $query->andWhere($query->expr()->eq('metadata', $query->createNamedParameter(json_encode($metadata)))); + $trimmedMetaData = $this->trimMetaData($metadata); + $query->andWhere($query->expr()->eq('metadata', $query->createNamedParameter($trimmedMetaData))); } } @@ -85,15 +87,32 @@ class DatabaseBackend implements IBackend { 'ip' => $ip, 'subnet' => $ipSubnet, 'action' => $action, - 'metadata' => json_encode($metadata), + 'metadata' => $metadata, 'occurred' => $timestamp, ]; $qb = $this->db->getQueryBuilder(); $qb->insert(self::TABLE_NAME); foreach ($values as $column => $value) { + if ($column === 'metadata') { + $value = $this->trimMetaData($value); + } $qb->setValue($column, $qb->createNamedParameter($value)); } $qb->executeStatement(); } + + protected function trimMetaData(array $metadata): string { + try { + $data = json_encode($metadata, JSON_THROW_ON_ERROR); + } catch (\JsonException) { + $data = 'INVALID'; + } + + $trimmed = substr($data, 0, 254); + if ($trimmed !== $data) { + $trimmed .= '…'; + } + return $trimmed; + } }