From fea5b4a8b9dc829aa8a53a208d60c30ed7096601 Mon Sep 17 00:00:00 2001 From: Chih-Hsuan Yen Date: Mon, 26 Apr 2021 16:05:50 +0800 Subject: [PATCH] Correctly truncate multibyte strings to fit into the database Closes: #26174 Signed-off-by: Chih-Hsuan Yen --- apps/dav/lib/CalDAV/CalDavBackend.php | 6 +++--- apps/dav/lib/CardDAV/CardDavBackend.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php index 15dabdbb14..0a57ce1745 100644 --- a/apps/dav/lib/CalDAV/CalDavBackend.php +++ b/apps/dav/lib/CalDAV/CalDavBackend.php @@ -2678,7 +2678,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription if (!$this->db->supports4ByteText()) { $value = preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $value); } - $value = mb_substr($value, 0, 254); + $value = mb_strcut($value, 0, 254); $query->setParameter('name', $property->name); $query->setParameter('parameter', null); @@ -2698,8 +2698,8 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription } $query->setParameter('name', $property->name); - $query->setParameter('parameter', mb_substr($key, 0, 254)); - $query->setParameter('value', mb_substr($value, 0, 254)); + $query->setParameter('parameter', mb_strcut($key, 0, 254)); + $query->setParameter('value', mb_strcut($value, 0, 254)); $query->executeUpdate(); } } diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php index 9246fc68ac..fa7db3750f 100644 --- a/apps/dav/lib/CardDAV/CardDavBackend.php +++ b/apps/dav/lib/CardDAV/CardDavBackend.php @@ -1271,7 +1271,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { } } $query->setParameter('name', $property->name); - $query->setParameter('value', mb_substr($property->getValue(), 0, 254)); + $query->setParameter('value', mb_strcut($property->getValue(), 0, 254)); $query->setParameter('preferred', $preferred); $query->execute(); }