aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2021-09-28 12:08:09 +1000
committerNeil <nyamatongwe@gmail.com>2021-09-28 12:08:09 +1000
commit810964f8e6b80fbfdb7f96b9a084acc4cbe5a3a1 (patch)
treeef68c28d8c9f92f328a8f765c77092b849ecdd77
parent2f038d69e4c79d3dfb9979ad28d0c6b0f30e823c (diff)
downloadscintilla-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.h1
-rwxr-xr-xgtk/ScintillaGTK.cxx1
-rw-r--r--gtk/ScintillaGTKAccessible.cxx1
-rw-r--r--qt/ScintillaEditBase/ScintillaQt.h1
-rw-r--r--src/EditModel.cxx1
-rw-r--r--src/EditView.cxx1
-rw-r--r--src/Editor.cxx1
-rw-r--r--src/MarginView.cxx1
-rw-r--r--src/PositionCache.cxx7
-rw-r--r--src/PositionCache.h10
-rw-r--r--src/ScintillaBase.cxx1
-rw-r--r--win32/ScintillaWin.cxx1
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>