diff --git a/src/apps/mail/Content.cpp b/src/apps/mail/Content.cpp index d990e2eb77..07998a992b 100644 --- a/src/apps/mail/Content.cpp +++ b/src/apps/mail/Content.cpp @@ -1039,12 +1039,20 @@ TTextView::KeyDown(const char *key, int32 count) end++; Select(start, end); if (fYankBuffer) { - fYankBuffer = (char *)realloc(fYankBuffer, + char *result = (char *)realloc(fYankBuffer, strlen(fYankBuffer) + (end - start) + 1); + if (result == NULL) { + free(fYankBuffer); + fYankBuffer = NULL; + break; + } + fYankBuffer = result; GetText(start, end - start, &fYankBuffer[strlen(fYankBuffer)]); } else { fYankBuffer = (char *)malloc(end - start + 1); + if (fYankBuffer == NULL) + break; GetText(start, end - start, fYankBuffer); } Delete(); @@ -2469,8 +2477,9 @@ TTextView::Reader::Run(void *_this) eol += 2; // CR+LF belong to the line size_t length = eol - header; - buffer = (char *)realloc(buffer, length + 1); - if (buffer == NULL) + free(buffer); + buffer = (char *)malloc(buffer, length + 1); + if (buffer == NULL) goto done; memcpy(buffer, header, length); @@ -3092,17 +3101,14 @@ TTextView::AddQuote(int32 start, int32 finish) // add quote to this line int32 lineLength = index - lastLine + 1; - char* newTarget = (char *)realloc(target, + char* result = (char *)realloc(target, targetLength + lineLength + quoteLength); - if (newTarget == NULL) { - // free the old buffer + if (result == NULL) { free(target); - target = NULL; free(text); return; - } else { - target = newTarget; } + target = result; // copy the quote sign memcpy(&target[targetLength], QUOTE, quoteLength);