diff options
author | Marco Bubke <marco.bubke@qt.io> | 2022-08-07 03:37:47 +0200 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2022-08-16 16:15:51 +0000 |
commit | c9d45d1bc0570484fc6e5f462b3c693c3db07ea2 (patch) | |
tree | a96002e618270964974b037b88348ce0005f6238 /src/libs/utils/smallstringlayout.h | |
parent | cf064500aaa0c0de7eafffd179250f9922bb03f8 (diff) |
Utils: Remove null termination from SmallString
We expect mostly a string view which has no null termination. Code which
depends on null termination is broken and it is better break early.
Change-Id: I7c2c41fb114e6aaf3a23053b522b37f7af5e1abf
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Diffstat (limited to 'src/libs/utils/smallstringlayout.h')
-rw-r--r-- | src/libs/utils/smallstringlayout.h | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/src/libs/utils/smallstringlayout.h b/src/libs/utils/smallstringlayout.h index c1de97e109f..21c770d604c 100644 --- a/src/libs/utils/smallstringlayout.h +++ b/src/libs/utils/smallstringlayout.h @@ -124,7 +124,7 @@ struct alignas(16) StringDataLayout template<size_type Size> constexpr StringDataLayout(const char (&string)[Size]) noexcept { - if constexpr (Size <= MaximumShortStringDataAreaSize) { + if constexpr (Size + 1 <= MaximumShortStringDataAreaSize) { control = {Size - 1, false, false}; for (size_type i = 0; i < Size; ++i) shortString[i] = string[i]; @@ -136,14 +136,10 @@ struct alignas(16) StringDataLayout constexpr static size_type shortStringCapacity() noexcept { - return MaximumShortStringDataAreaSize - 1; + return MaximumShortStringDataAreaSize; } - constexpr void reset() - { - control = ControlBlock<MaximumShortStringDataAreaSize>(); - shortString[0] = '\0'; - } + constexpr void reset() { control = ControlBlock<MaximumShortStringDataAreaSize>(); } #pragma pack(push) #pragma pack(1) @@ -180,7 +176,7 @@ struct alignas(16) StringDataLayout<MaximumShortStringDataAreaSize, template<size_type Size> constexpr StringDataLayout(const char (&string)[Size]) noexcept { - if constexpr (Size <= MaximumShortStringDataAreaSize) { + if constexpr (Size + 1 <= MaximumShortStringDataAreaSize) { control = {Size - 1, false, false}; for (size_type i = 0; i < Size; ++i) shortString[i] = string[i]; @@ -204,14 +200,10 @@ struct alignas(16) StringDataLayout<MaximumShortStringDataAreaSize, constexpr static size_type shortStringCapacity() noexcept { - return MaximumShortStringDataAreaSize - 1; + return MaximumShortStringDataAreaSize; } - constexpr void reset() - { - control = ControlBlock<MaximumShortStringDataAreaSize>(); - shortString[0] = '\0'; - } + constexpr void reset() { control = ControlBlock<MaximumShortStringDataAreaSize>(); } #pragma pack(push) #pragma pack(1) |