From edc46535ed1f9db8917ded2a922aef599e339130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Sun, 24 Aug 2014 18:18:12 +0200 Subject: [PATCH] MessageBuilder: Fix potential leaks in PushObject(). --- src/kits/shared/MessageBuilder.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/kits/shared/MessageBuilder.cpp b/src/kits/shared/MessageBuilder.cpp index 4ab8a84371..84013dffb4 100644 --- a/src/kits/shared/MessageBuilder.cpp +++ b/src/kits/shared/MessageBuilder.cpp @@ -6,6 +6,7 @@ #include +#include #include @@ -30,14 +31,23 @@ BMessageBuilder::BMessageBuilder(BMessage& message) status_t BMessageBuilder::PushObject(const char* name) { - BMessage* newMessage = new BMessage; + BMessage* newMessage = new(std::nothrow) BMessage; if (newMessage == NULL) return B_NO_MEMORY; + ObjectDeleter messageDeleter(newMessage); - if (!fNameStack.AddItem(new BString(name))) - return B_ERROR; + BString* nameString = new(std::nothrow) BString(name); + if (nameString == NULL) + return B_NO_MEMORY; + ObjectDeleter stringDeleter(nameString); + + if (!fNameStack.AddItem(nameString)) + return B_NO_MEMORY; if (!fStack.AddItem(fCurrentMessage)) - return B_ERROR; + return B_NO_MEMORY; + + messageDeleter.Detach(); + stringDeleter.Detach(); fCurrentMessage = newMessage; return B_OK;