From 250bf5f2960fd9ec7f70a7bd6cc8e1e2bd6f5c3d Mon Sep 17 00:00:00 2001 From: Miguel Gaio Date: Wed, 19 Aug 2015 15:14:39 +0200 Subject: [PATCH] Fix vasprintf() call usage. Conforming to ASPRINTF(3), use vasprintf return value to test its success. In case of failure the contents of buffer pointer is undefined. Signed-off-by: Miguel Gaio --- parameter/Element.cpp | 18 ++++++++++++------ parameter/SubsystemObject.cpp | 18 ++++++++++++------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/parameter/Element.cpp b/parameter/Element.cpp index 547c5914d..c761cce1d 100644 --- a/parameter/Element.cpp +++ b/parameter/Element.cpp @@ -52,37 +52,43 @@ CElement::~CElement() // Logging void CElement::log_info(const char* strMessage, ...) const { + int ret_val; char *pacBuffer; va_list listPointer; va_start(listPointer, strMessage); - vasprintf(&pacBuffer, strMessage, listPointer); + ret_val = vasprintf(&pacBuffer, strMessage, listPointer); va_end(listPointer); - if (pacBuffer != NULL) { - doLog(false, pacBuffer); + if (ret_val == -1) { + return; } + doLog(true, pacBuffer); + free(pacBuffer); } void CElement::log_warning(const char* strMessage, ...) const { + int ret_val; char *pacBuffer; va_list listPointer; va_start(listPointer, strMessage); - vasprintf(&pacBuffer, strMessage, listPointer); + ret_val = vasprintf(&pacBuffer, strMessage, listPointer); va_end(listPointer); - if (pacBuffer != NULL) { - doLog(true, pacBuffer); + if (ret_val == -1) { + return; } + doLog(true, pacBuffer); + free(pacBuffer); } diff --git a/parameter/SubsystemObject.cpp b/parameter/SubsystemObject.cpp index e6b7b442d..0d9dc92ed 100644 --- a/parameter/SubsystemObject.cpp +++ b/parameter/SubsystemObject.cpp @@ -215,37 +215,43 @@ void CSubsystemObject::blackboardWrite(const void* pvData, uint32_t uiSize) // Logging void CSubsystemObject::log_info(std::string strMessage, ...) const { + int ret_val; char *pacBuffer; va_list listPointer; va_start(listPointer, strMessage); - vasprintf(&pacBuffer, strMessage.c_str(), listPointer); + ret_val = vasprintf(&pacBuffer, strMessage.c_str(), listPointer); va_end(listPointer); - if (pacBuffer != NULL) { - _pInstanceConfigurableElement->log_info("%s", pacBuffer); + if (ret_val == -1) { + return ; } + _pInstanceConfigurableElement->log_info("%s", pacBuffer); + free(pacBuffer); } void CSubsystemObject::log_warning(std::string strMessage, ...) const { + int ret_val; char *pacBuffer; va_list listPointer; va_start(listPointer, strMessage); - vasprintf(&pacBuffer, strMessage.c_str(), listPointer); + ret_val = vasprintf(&pacBuffer, strMessage.c_str(), listPointer); va_end(listPointer); - if (pacBuffer != NULL) { - _pInstanceConfigurableElement->log_warning("%s", pacBuffer); + if (ret_val == -1) { + return ; } + _pInstanceConfigurableElement->log_warning("%s", pacBuffer); + free(pacBuffer); }