From 678e5402915fdaa488dc4ab455dd0193d64d8bdb Mon Sep 17 00:00:00 2001 From: Adelin Dobre Date: Fri, 21 Dec 2018 13:51:03 +0200 Subject: [PATCH] initio: Add safety checks inside MraaIo destructor Signed-off-by: Adelin Dobre Signed-off-by: Thomas Ingleby --- api/mraa/initio.hpp | 63 +++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/api/mraa/initio.hpp b/api/mraa/initio.hpp index ce08624..84c5bec 100644 --- a/api/mraa/initio.hpp +++ b/api/mraa/initio.hpp @@ -47,7 +47,7 @@ namespace mraa class MraaIo { private: - mraa_io_descriptor* descs; + mraa_io_descriptor* descs = nullptr; public: MraaIo(const std::string& initStr) : descs() @@ -109,39 +109,40 @@ class MraaIo ~MraaIo() { - if (descs->leftover_str) { - free(descs->leftover_str); - } - - if (descs->n_aio) { - free(descs->aios); - } - if (descs->n_gpio) { - free(descs->gpios); - } - if (descs->n_i2c) { - free(descs->i2cs); - } + if (descs != nullptr) { + if (descs->leftover_str) { + free(descs->leftover_str); + } + if (descs->n_aio) { + free(descs->aios); + } + if (descs->n_gpio) { + free(descs->gpios); + } + if (descs->n_i2c) { + free(descs->i2cs); + } #if !defined(PERIPHERALMAN) - if (descs->n_iio) { - free(descs->iios); - } + if (descs->n_iio) { + free(descs->iios); + } #endif - if (descs->n_pwm) { - free(descs->pwms); - } - if (descs->n_spi) { - free(descs->spis); - } - if (descs->n_uart) { - free(descs->uarts); - } - if (descs->n_uart_ow) { - free(descs->uart_ows); - } + if (descs->n_pwm) { + free(descs->pwms); + } + if (descs->n_spi) { + free(descs->spis); + } + if (descs->n_uart) { + free(descs->uarts); + } + if (descs->n_uart_ow) { + free(descs->uart_ows); + } - /* Finally free the mraa_io_descriptor structure. */ - free(descs); + /* Finally free the mraa_io_descriptor structure. */ + free(descs); + } } public: