diff options
author | Neil <nyamatongwe@gmail.com> | 2021-09-28 12:08:09 +1000 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2021-09-28 12:08:09 +1000 |
commit | 810964f8e6b80fbfdb7f96b9a084acc4cbe5a3a1 (patch) | |
tree | ef68c28d8c9f92f328a8f765c77092b849ecdd77 | |
parent | 2f038d69e4c79d3dfb9979ad28d0c6b0f30e823c (diff) | |
download | scintilla-mirror-810964f8e6b80fbfdb7f96b9a084acc4cbe5a3a1.tar.gz |
Widen styleNumber in PositionCacheEntry from 8 to 16 bits to allow styles
larger than 255 to be represented.
Before this, it may have been possible but extremely rare for a cache entry to
wrongly match a styled lexeme and produce incorrect layout.
Using uint16_t from cstdint instead of a bit field as tools perform more
checking on that.
-rw-r--r-- | cocoa/ScintillaCocoa.h | 1 | ||||
-rwxr-xr-x | gtk/ScintillaGTK.cxx | 1 | ||||
-rw-r--r-- | gtk/ScintillaGTKAccessible.cxx | 1 | ||||
-rw-r--r-- | qt/ScintillaEditBase/ScintillaQt.h | 1 | ||||
-rw-r--r-- | src/EditModel.cxx | 1 | ||||
-rw-r--r-- | src/EditView.cxx | 1 | ||||
-rw-r--r-- | src/Editor.cxx | 1 | ||||
-rw-r--r-- | src/MarginView.cxx | 1 | ||||
-rw-r--r-- | src/PositionCache.cxx | 7 | ||||
-rw-r--r-- | src/PositionCache.h | 10 | ||||
-rw-r--r-- | src/ScintillaBase.cxx | 1 | ||||
-rw-r--r-- | win32/ScintillaWin.cxx | 1 |
12 files changed, 19 insertions, 8 deletions
diff --git a/cocoa/ScintillaCocoa.h b/cocoa/ScintillaCocoa.h index 0aa38911c..311bcfa23 100644 --- a/cocoa/ScintillaCocoa.h +++ b/cocoa/ScintillaCocoa.h @@ -15,6 +15,7 @@ #include <cstddef> #include <cstdlib> +#include <cstdint> #include <cstdio> #include <ctime> diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx index 92973a083..d1004a3f0 100755 --- a/gtk/ScintillaGTK.cxx +++ b/gtk/ScintillaGTK.cxx @@ -5,6 +5,7 @@ #include <cstddef> #include <cstdlib> +#include <cstdint> #include <cassert> #include <cstring> #include <cstdio> diff --git a/gtk/ScintillaGTKAccessible.cxx b/gtk/ScintillaGTKAccessible.cxx index bff9a4572..e3c50e510 100644 --- a/gtk/ScintillaGTKAccessible.cxx +++ b/gtk/ScintillaGTKAccessible.cxx @@ -53,6 +53,7 @@ #include <cstddef> #include <cstdlib> +#include <cstdint> #include <cassert> #include <cstring> diff --git a/qt/ScintillaEditBase/ScintillaQt.h b/qt/ScintillaEditBase/ScintillaQt.h index a4b59e03c..df4c653cd 100644 --- a/qt/ScintillaEditBase/ScintillaQt.h +++ b/qt/ScintillaEditBase/ScintillaQt.h @@ -13,6 +13,7 @@ #include <cstddef> #include <cstdlib> +#include <cstdint> #include <cassert> #include <cstring> #include <cctype> diff --git a/src/EditModel.cxx b/src/EditModel.cxx index 5dd3cc87d..db215d9aa 100644 --- a/src/EditModel.cxx +++ b/src/EditModel.cxx @@ -7,6 +7,7 @@ #include <cstddef> #include <cstdlib> +#include <cstdint> #include <cassert> #include <cstring> #include <cmath> diff --git a/src/EditView.cxx b/src/EditView.cxx index fb192abef..3ab4c17a5 100644 --- a/src/EditView.cxx +++ b/src/EditView.cxx @@ -7,6 +7,7 @@ #include <cstddef> #include <cstdlib> +#include <cstdint> #include <cassert> #include <cstring> #include <cstdio> diff --git a/src/Editor.cxx b/src/Editor.cxx index 1559ece96..06d96134f 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -7,6 +7,7 @@ #include <cstddef> #include <cstdlib> +#include <cstdint> #include <cassert> #include <cstring> #include <cstdio> diff --git a/src/MarginView.cxx b/src/MarginView.cxx index 41ab68b6c..d2aad0c39 100644 --- a/src/MarginView.cxx +++ b/src/MarginView.cxx @@ -7,6 +7,7 @@ #include <cstddef> #include <cstdlib> +#include <cstdint> #include <cassert> #include <cstring> #include <cstdio> diff --git a/src/PositionCache.cxx b/src/PositionCache.cxx index d24b1ed8d..073a62692 100644 --- a/src/PositionCache.cxx +++ b/src/PositionCache.cxx @@ -7,6 +7,7 @@ #include <cstddef> #include <cstdlib> +#include <cstdint> #include <cstring> #include <cmath> @@ -801,10 +802,10 @@ PositionCacheEntry::PositionCacheEntry(const PositionCacheEntry &other) : } void PositionCacheEntry::Set(unsigned int styleNumber_, std::string_view sv, - const XYPOSITION *positions_, unsigned int clock_) { + const XYPOSITION *positions_, uint16_t clock_) { Clear(); - styleNumber = styleNumber_; - len = static_cast<unsigned int>(sv.length()); + styleNumber = static_cast<uint16_t>(styleNumber_); + len = static_cast<uint16_t>(sv.length()); clock = clock_; if (sv.data() && positions_) { positions = std::make_unique<XYPOSITION[]>(len + (len / sizeof(XYPOSITION)) + 1); diff --git a/src/PositionCache.h b/src/PositionCache.h index 3dc68a0fd..79d63ee75 100644 --- a/src/PositionCache.h +++ b/src/PositionCache.h @@ -172,9 +172,9 @@ public: }; class PositionCacheEntry { - unsigned int styleNumber:8; - unsigned int len:8; - unsigned int clock:16; + uint16_t styleNumber; + uint16_t len; + uint16_t clock; std::unique_ptr<XYPOSITION []> positions; public: PositionCacheEntry() noexcept; @@ -185,7 +185,7 @@ public: void operator=(const PositionCacheEntry &) = delete; void operator=(PositionCacheEntry &&) = delete; ~PositionCacheEntry(); - void Set(unsigned int styleNumber_, std::string_view sv, const XYPOSITION *positions_, unsigned int clock_); + void Set(unsigned int styleNumber_, std::string_view sv, const XYPOSITION *positions_, uint16_t clock_); void Clear() noexcept; bool Retrieve(unsigned int styleNumber_, std::string_view sv, XYPOSITION *positions_) const noexcept; static size_t Hash(unsigned int styleNumber_, std::string_view sv) noexcept; @@ -273,7 +273,7 @@ public: class PositionCache { std::vector<PositionCacheEntry> pces; - unsigned int clock; + uint16_t clock; bool allClear; public: PositionCache(); diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx index b2a15a286..566a55a3c 100644 --- a/src/ScintillaBase.cxx +++ b/src/ScintillaBase.cxx @@ -7,6 +7,7 @@ #include <cstddef> #include <cstdlib> +#include <cstdint> #include <cassert> #include <cstring> diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index c1a4b1372..a45c7a076 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -7,6 +7,7 @@ #include <cstddef> #include <cstdlib> +#include <cstdint> #include <cassert> #include <cstring> #include <cstdio> |