diff options
author | Neil Hodgson <nyamatongwe@gmail.com> | 2018-05-15 19:20:22 +1000 |
---|---|---|
committer | Neil Hodgson <nyamatongwe@gmail.com> | 2018-05-15 19:20:22 +1000 |
commit | 8e7274be250aa1b92f9d7b11fa3ae27dec7e2a2f (patch) | |
tree | a820a360b82f2bd58f23b625c503475e81d4d675 | |
parent | 3c9aa3183daaa3eb20838a69ed97195eab35272c (diff) | |
download | scintilla-mirror-8e7274be250aa1b92f9d7b11fa3ae27dec7e2a2f.tar.gz |
Backport: Fix crashes for invalid DBCS characters when dragging text, changing case of
text, case-insensitive searching, and retrieving text as UTF-8.
Backport of changeset 6952:7bfe9ec5222a.
-rw-r--r-- | cocoa/ScintillaCocoa.mm | 10 | ||||
-rw-r--r-- | doc/ScintillaHistory.html | 4 |
2 files changed, 14 insertions, 0 deletions
diff --git a/cocoa/ScintillaCocoa.mm b/cocoa/ScintillaCocoa.mm index 74113a364..2bd252e70 100644 --- a/cocoa/ScintillaCocoa.mm +++ b/cocoa/ScintillaCocoa.mm @@ -656,6 +656,9 @@ std::string ScintillaCocoa::CaseMapString(const std::string &s, int caseMapping) vs.styles[STYLE_DEFAULT].characterSet); CFStringRef cfsVal = CFStringFromString(s.c_str(), s.length(), encoding); + if (!cfsVal) { + return s; + } NSString *sMapped; switch (caseMapping) @@ -1301,6 +1304,8 @@ void ScintillaCocoa::DragScroll() selectedText.characterSet); CFStringRef cfsVal = CFStringFromString(selectedText.Data(), selectedText.Length(), encoding); + if (!cfsVal) + return; if ([type compare: NSPasteboardTypeString] == NSOrderedSame) { @@ -1584,6 +1589,8 @@ void ScintillaCocoa::SetPasteboardData(NSPasteboard* board, const SelectionText selectedText.characterSet); CFStringRef cfsVal = CFStringFromString(selectedText.Data(), selectedText.Length(), encoding); + if (!cfsVal) + return; NSArray *pbTypes = selectedText.rectangular ? [NSArray arrayWithObjects: NSStringPboardType, ScintillaRecPboardType, nil] : @@ -1663,6 +1670,9 @@ Sci::Position ScintillaCocoa::TargetAsUTF8(char *text) const vs.styles[STYLE_DEFAULT].characterSet); const std::string s = RangeText(targetStart, targetEnd); CFStringRef cfsVal = CFStringFromString(s.c_str(), s.length(), encoding); + if (!cfsVal) { + return 0; + } const std::string tmputf = EncodedBytesString(cfsVal, kCFStringEncodingUTF8); diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html index 300e81fee..fdb31fc25 100644 --- a/doc/ScintillaHistory.html +++ b/doc/ScintillaHistory.html @@ -575,6 +575,10 @@ "in selection" replace and the selection started after the line start. </li> <li> + Crashes fixed on macOS for invalid DBCS characters when dragging text, + changing case of text, case-insensitive searching, and retrieving text as UTF-8. + </li> + <li> On Win32, a new file, ScintillaDLL.cxx, provides the DllMain function required for a stand-alone Scintilla DLL. Build and project files should include this file when producing a DLL and omit it when producing a static library or linking Scintilla statically. |