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) {