diff options
author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2024-01-11 00:19:56 +0200 |
---|---|---|
committer | Andrey Kleshchev <117672381+akleshchev@users.noreply.github.com> | 2024-01-11 17:18:12 +0200 |
commit | 0d8bd79c79c1e917bc49669426bdfa89dc48ff04 (patch) | |
tree | f755f6c915d3b7310422afbca4cdf7aec770cc1d | |
parent | 7d4de08fa9c43f6e21267cb861cbac8a9280e5ec (diff) |
SL-20750 MacOS Crash processing attributed string
-rw-r--r-- | indra/llwindow/llopenglview-objc.mm | 68 | ||||
-rw-r--r-- | indra/newview/llinventorygallery.cpp | 4 |
2 files changed, 43 insertions, 29 deletions
diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm index 37f4568b98..0bd4e506a2 100644 --- a/indra/llwindow/llopenglview-objc.mm +++ b/indra/llwindow/llopenglview-objc.mm @@ -736,33 +736,49 @@ attributedStringInfo getSegments(NSAttributedString *str) // SL-19801 Special workaround for system emoji picker if ([aString length] == 2) { - uint32_t b0 = [aString characterAtIndex:0]; - uint32_t b1 = [aString characterAtIndex:1]; - if (((b0 & 0xF000) == 0xD000) && ((b1 & 0xF000) == 0xD000)) - { - uint32_t b = 0x10000 | ((b0 & 0x3F) << 10) | (b1 & 0x3FF); - callUnicodeCallback(b, 0); - return; - } - } - - if (!mHasMarkedText) - { - for (NSInteger i = 0; i < [aString length]; i++) - { - callUnicodeCallback([aString characterAtIndex:i], mModifiers); - } - } else { - resetPreedit(); - // We may never get this point since unmarkText may be called before insertText ever gets called once we submit our text. - // But just in case... - - for (NSInteger i = 0; i < [aString length]; i++) - { - handleUnicodeCharacter([aString characterAtIndex:i]); - } - mHasMarkedText = FALSE; + @try + { + uint32_t b0 = [aString characterAtIndex:0]; + uint32_t b1 = [aString characterAtIndex:1]; + if (((b0 & 0xF000) == 0xD000) && ((b1 & 0xF000) == 0xD000)) + { + uint32_t b = 0x10000 | ((b0 & 0x3F) << 10) | (b1 & 0x3FF); + callUnicodeCallback(b, 0); + return; + } + } + @catch(NSException * e) + { + // One of the characters is an attribute string? + NSLog(@"Encountered an unsupported attributed character. Exception: %@ String: %@", e.name, aString); + return; + } } + + @try + { + if (!mHasMarkedText) + { + for (NSInteger i = 0; i < [aString length]; i++) + { + callUnicodeCallback([aString characterAtIndex:i], mModifiers); + } + } else { + resetPreedit(); + // We may never get this point since unmarkText may be called before insertText ever gets called once we submit our text. + // But just in case... + + for (NSInteger i = 0; i < [aString length]; i++) + { + handleUnicodeCharacter([aString characterAtIndex:i]); + } + mHasMarkedText = FALSE; + } + } + @catch(NSException * e) + { + NSLog(@"Failed to process an attributed string. Exception: %@ String: %@", e.name, aString); + } } - (void) insertNewline:(id)sender diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp index 72ef6e5bb6..d4ca58f778 100644 --- a/indra/newview/llinventorygallery.cpp +++ b/indra/newview/llinventorygallery.cpp @@ -2432,9 +2432,7 @@ void LLInventoryGallery::startDrag() ids.push_back(selected_id); } } - // We must have set this for some reason, but it's causing compile errors - (void)src; - LLToolDragAndDrop::getInstance()->beginMultiDrag(types, ids, LLToolDragAndDrop::SOURCE_AGENT); + LLToolDragAndDrop::getInstance()->beginMultiDrag(types, ids, src); } bool LLInventoryGallery::areViewsInitialized() |