src/lib/VSDContentCollector.cpp |    4 ++--
 src/lib/VSDMetaData.cpp         |    2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

New commits:
commit 0c69b34e5f1ca995d0b6acf14594319a4c1cf5f3
Author:     Bartosz Kosiorek <gan...@poczta.onet.pl>
AuthorDate: Fri Sep 20 20:04:35 2024 +0200
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Fri Sep 20 22:19:12 2024 +0200

    Avoid undefined behaviour when the std::vector is empty
    
    By getting address of first element (e.g. &tmpBuffer[0]),
    in case vector is empty, the undefined behaviour could occur.
    
    data() returns a pointer to the underlying array serving as element storage.
    The pointer is such that range [data(), data() + size()) is always a valid 
range,
    even if the container is empty (data() is not dereferenceable in that case).
    
    Change-Id: I62665a11ece0cc7e2226608004c0eb48788f95d1
    Reviewed-on: https://gerrit.libreoffice.org/c/libvisio/+/173740
    Tested-by: Miklos Vajna <vmik...@collabora.com>
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index dab4782..b34ed5c 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -3756,7 +3756,7 @@ void 
libvisio::VSDContentCollector::appendCharacters(librevenge::RVNGString &tex
     }
     if (U_SUCCESS(status) && conv)
     {
-      const auto *src = (const char *)&characters[0];
+      const auto *src = (const char *)characters.data();
       const char *srcLimit = (const char *)src + characters.size();
       while (src < srcLimit)
       {
@@ -3782,7 +3782,7 @@ void 
libvisio::VSDContentCollector::appendCharacters(librevenge::RVNGString &tex
 
   if (U_SUCCESS(status) && conv)
   {
-    const auto *src = (const char *)&characters[0];
+    const auto *src = (const char *)characters.data();
     const char *srcLimit = (const char *)src + characters.size();
     while (src < srcLimit)
     {
diff --git a/src/lib/VSDMetaData.cpp b/src/lib/VSDMetaData.cpp
index 09e8f97..8395c8b 100644
--- a/src/lib/VSDMetaData.cpp
+++ b/src/lib/VSDMetaData.cpp
@@ -278,7 +278,7 @@ librevenge::RVNGString 
libvisio::VSDMetaData::readCodePageString(librevenge::RVN
     if (U_SUCCESS(status) && conv)
     {
       assert(!characters.empty());
-      const auto *src = (const char *)&characters[0];
+      const auto *src = (const char *)characters.data();
       const char *srcLimit = (const char *)src + characters.size();
       while (src < srcLimit)
       {

Reply via email to