diff options
author | Neil <nyamatongwe@gmail.com> | 2021-12-12 09:32:18 +1100 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2021-12-12 09:32:18 +1100 |
commit | 1df5b5bf8d2988f57d9fe9c5f6aa903c9de0fb4e (patch) | |
tree | 8273a55be99a4bc3d65f918d7580853a89b92868 | |
parent | 18f1b6ba58164e16e81b015ff30f567beb19c67e (diff) | |
download | scintilla-mirror-1df5b5bf8d2988f57d9fe9c5f6aa903c9de0fb4e.tar.gz |
Ensure enough room for NUL terminator in string return values.
-rw-r--r-- | doc/ScintillaHistory.html | 3 | ||||
-rw-r--r-- | qt/ScintillaEdit/ScintillaEdit.cpp.template | 7 |
2 files changed, 7 insertions, 3 deletions
diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html index d02801cf6..a77acf033 100644 --- a/doc/ScintillaHistory.html +++ b/doc/ScintillaHistory.html @@ -579,6 +579,9 @@ <li> Made compatible with Qt 6. </li> + <li> + Fix potential issue with length of buffer for string returning APIs in ScintillaEdit on Qt. + </li> </ul> <h3> <a href="https://www.scintilla.org/scintilla515.zip">Release 5.1.5</a> diff --git a/qt/ScintillaEdit/ScintillaEdit.cpp.template b/qt/ScintillaEdit/ScintillaEdit.cpp.template index 9cebc8300..a46a1d12d 100644 --- a/qt/ScintillaEdit/ScintillaEdit.cpp.template +++ b/qt/ScintillaEdit/ScintillaEdit.cpp.template @@ -13,11 +13,12 @@ ScintillaEdit::~ScintillaEdit() { } QByteArray ScintillaEdit::TextReturner(int message, uptr_t wParam) const { - int length = send(message, wParam, 0); - QByteArray ba(length, '\0'); + // While Scintilla can return strings longer than maximum(int), QByteArray uses int size + const int length = static_cast<int>(send(message, wParam, 0)); + QByteArray ba(length + 1, '\0'); send(message, wParam, (sptr_t)ba.data()); // Remove extra NULs - if (ba.size() > 0 && ba.at(ba.size()-1) == 0) + if (ba.at(ba.size()-1) == 0) ba.chop(1); return ba; } |