diff --git a/src/kits/interface/TextView.cpp b/src/kits/interface/TextView.cpp index 9b2c265cb9..eefb86a7ae 100644 --- a/src/kits/interface/TextView.cpp +++ b/src/kits/interface/TextView.cpp @@ -4427,7 +4427,8 @@ BTextView::HandleInputMethodChanged(BMessage *message) int32 clauseEnd; while (message->FindInt32("be:clause_start", clauseCount, &clauseStart) == B_OK && message->FindInt32("be:clause_end", clauseCount, &clauseEnd) == B_OK) { - fInline->AddClause(clauseStart, clauseEnd); + if (!fInline->AddClause(clauseStart, clauseEnd)) + break; clauseCount++; } diff --git a/src/kits/interface/textview_support/InlineInput.cpp b/src/kits/interface/textview_support/InlineInput.cpp index e205373ca0..b1fcc4b314 100644 --- a/src/kits/interface/textview_support/InlineInput.cpp +++ b/src/kits/interface/textview_support/InlineInput.cpp @@ -153,12 +153,18 @@ _BInlineInput_::SetSelectionOffset(int32 offset) \param start The offset into the string where the clause starts. \param end The offset into the string where the clause finishes. */ -void +bool _BInlineInput_::AddClause(int32 start, int32 end) { - fClauses = (clause *)realloc(fClauses, ++fNumClauses * sizeof(clause)); - fClauses[fNumClauses - 1].start = start; - fClauses[fNumClauses - 1].end = end; + void *newData = realloc(fClauses, (fNumClauses + 1) * sizeof(clause)); + if (newData == NULL) + return false; + + fClauses = (clause *)newData; + fClauses[fNumClauses].start = start; + fClauses[fNumClauses].end = end; + fNumClauses++; + return true; } diff --git a/src/kits/interface/textview_support/InlineInput.h b/src/kits/interface/textview_support/InlineInput.h index 645aec91e3..b787f66605 100644 --- a/src/kits/interface/textview_support/InlineInput.h +++ b/src/kits/interface/textview_support/InlineInput.h @@ -34,7 +34,7 @@ public: int32 SelectionOffset() const; void SetSelectionOffset(int32 offset); - void AddClause(int32, int32); + bool AddClause(int32, int32); bool GetClause(int32 index, int32 *start, int32 *end) const; int32 CountClauses() const;