From cb00db5bf0a84708e3f531c1f9265df15d03e24a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Sun, 24 Nov 2013 12:41:28 +0100 Subject: [PATCH] libmedia: fixed minor leak in BDiscreteParameter::AddItem. * CID 992460 --- src/kits/media/ParameterWeb.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/kits/media/ParameterWeb.cpp b/src/kits/media/ParameterWeb.cpp index 76adc082ab..cdf6f4d3d7 100644 --- a/src/kits/media/ParameterWeb.cpp +++ b/src/kits/media/ParameterWeb.cpp @@ -2016,17 +2016,27 @@ BDiscreteParameter::AddItem(int32 value, const char* name) { CALLED(); - int32* valueCopy = new int32(value); + int32* valueCopy = new(std::nothrow) int32(value); + if (valueCopy == NULL) + return B_NO_MEMORY; char* nameCopy = strndup(name, 255); if (name != NULL && nameCopy == NULL) { delete valueCopy; return B_NO_MEMORY; } - if (!fValues->AddItem(valueCopy) || !fSelections->AddItem(nameCopy)) - return B_NO_MEMORY; - + if (!fValues->AddItem(valueCopy)) + goto err; + if (!fSelections->AddItem(nameCopy)) { + fValues->RemoveItem(valueCopy); + goto err; + } return B_OK; + +err: + free(nameCopy); + delete valueCopy; + return B_NO_MEMORY; }