From 02b5d2e4e3b31992153f98a454b98c48945d51e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 18 Aug 2010 17:55:23 +0000 Subject: [PATCH] * Stefano was right, there was another leak - I've fixed them all now in a nicer way. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38244 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/mail/Jamfile | 2 +- src/kits/mail/MailAttachment.cpp | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/kits/mail/Jamfile b/src/kits/mail/Jamfile index 6a5b88ffda..ebcb4ecb6e 100644 --- a/src/kits/mail/Jamfile +++ b/src/kits/mail/Jamfile @@ -5,7 +5,7 @@ SetSubDirSupportedPlatformsBeOSCompatible ; if $(TARGET_PLATFORM) != haiku { UsePublicHeaders mail ; } -UsePrivateHeaders mail ; +UsePrivateHeaders mail shared ; UsePublicHeaders [ FDirName add-ons mail_daemon ] ; if $(CHECK_MALLOC) { diff --git a/src/kits/mail/MailAttachment.cpp b/src/kits/mail/MailAttachment.cpp index 12faa37cda..8e0816bb2f 100644 --- a/src/kits/mail/MailAttachment.cpp +++ b/src/kits/mail/MailAttachment.cpp @@ -15,6 +15,8 @@ #include #include +#include + class _EXPORT BSimpleMailAttachment; class _EXPORT BAttributedMailAttachment; class _EXPORT BMailAttachment; @@ -352,11 +354,13 @@ status_t BSimpleMailAttachment::RenderToRFC822(BPositionIO *render_to) { if (src == NULL) return B_NO_MEMORY; + MemoryDeleter sourceDeleter(src); + _data->Seek(0,SEEK_SET); ssize_t read = _data->Read(src,size); if (read < B_OK) - return read; // Return an error code and leak memory. + return read; // The encoded text will never be more than twice as large with any // conceivable encoding. But just in case, there's a function call which @@ -368,15 +372,15 @@ status_t BSimpleMailAttachment::RenderToRFC822(BPositionIO *render_to) { if (dest == NULL) return B_NO_MEMORY; + MemoryDeleter destinationDeleter(dest); + destSize = encode (_encoding, dest, src, read, false /* headerMode */); - if (destSize < B_OK) { - free(dest); + if (destSize < B_OK) return destSize; - } + if (destSize > 0) read = render_to->Write(dest,destSize); - free (src); - free (dest); + return (read > 0) ? B_OK : read; }