From 0d4fbcc8fea16e76c48937dedca56c8ef6774706 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Fri, 27 Apr 2007 20:35:36 +0000 Subject: [PATCH] made _BInlineInput_::AddClause() more robust in low memory conditions git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20870 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/TextView.cpp | 3 ++- .../interface/textview_support/InlineInput.cpp | 14 ++++++++++---- src/kits/interface/textview_support/InlineInput.h | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) 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;