From 84b445f51c2da58893354f1bab6e75c66843378e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Teppo=20J=C3=A4rvelin?= Date: Wed, 21 Mar 2018 14:37:18 +0200 Subject: [PATCH] Fixed coverity warnings for class ATHandler and removed unnecessary assert from state machine. --- .../easy_cellular/CellularConnectionFSM.cpp | 1 - features/cellular/framework/AT/ATHandler.cpp | 23 ++++++++++--------- features/cellular/framework/AT/ATHandler.h | 2 -- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/features/cellular/easy_cellular/CellularConnectionFSM.cpp b/features/cellular/easy_cellular/CellularConnectionFSM.cpp index ca7a749985..19217d615f 100644 --- a/features/cellular/easy_cellular/CellularConnectionFSM.cpp +++ b/features/cellular/easy_cellular/CellularConnectionFSM.cpp @@ -120,7 +120,6 @@ nsapi_error_t CellularConnectionFSM::init() bool CellularConnectionFSM::power_on() { - MBED_ASSERT(1); nsapi_error_t err = _power->on(); if (err != NSAPI_ERROR_OK && err != NSAPI_ERROR_UNSUPPORTED) { tr_warn("Cellular start failed. Power off/on."); diff --git a/features/cellular/framework/AT/ATHandler.cpp b/features/cellular/framework/AT/ATHandler.cpp index f47b5ef3e8..9002d2636a 100644 --- a/features/cellular/framework/AT/ATHandler.cpp +++ b/features/cellular/framework/AT/ATHandler.cpp @@ -88,17 +88,18 @@ ATHandler::ATHandler(FileHandle *fh, EventQueue &queue, int timeout, const char clear_error(); if (output_delimiter) { - _output_delimiter_length = strlen(output_delimiter); - _output_delimiter = new char[_output_delimiter_length]; - for (unsigned i=0; i<_output_delimiter_length; i++) { - _output_delimiter[i] = output_delimiter[i]; + _output_delimiter = new char[strlen(output_delimiter) + 1]; + if (!_output_delimiter) { + MBED_ASSERT(0); + } else { + memcpy(_output_delimiter, output_delimiter, strlen(output_delimiter) + 1); } } else { - _output_delimiter = NULL; - _output_delimiter_length = 0; + _output_delimiter = NULL; } reset_buffer(); + memset(_recv_buff, 0, sizeof(_recv_buff)); memset(_info_resp_prefix, 0, sizeof(_info_resp_prefix)); _current_scope = NotSet; @@ -481,7 +482,9 @@ ssize_t ATHandler::read_string(char *buf, size_t size, bool read_even_stop_tag) break; } else if (c == '\"') { match_pos = 0; - len--; + if (len > 0) { + len--; + } continue; } else if (_stop_tag->len && c == _stop_tag->tag[match_pos]) { match_pos++; @@ -694,11 +697,9 @@ void ATHandler::set_3gpp_error(int err, DeviceErrorType error_type) void ATHandler::at_error(bool error_code_expected, DeviceErrorType error_type) { - int32_t err = -1; - if (error_code_expected && (error_type == DeviceErrorTypeErrorCMS || error_type == DeviceErrorTypeErrorCME)) { set_scope(InfoType); - err = read_int(); + int32_t err = read_int(); if (err != -1) { set_3gpp_error(err, error_type); @@ -1052,7 +1053,7 @@ void ATHandler::cmd_stop() return; } // Finish with CR - (void)write(_output_delimiter, _output_delimiter_length); + (void)write(_output_delimiter, strlen(_output_delimiter)); } size_t ATHandler::write_bytes(const uint8_t *data, size_t len) diff --git a/features/cellular/framework/AT/ATHandler.h b/features/cellular/framework/AT/ATHandler.h index 05cc264c8b..6959be0cd0 100644 --- a/features/cellular/framework/AT/ATHandler.h +++ b/features/cellular/framework/AT/ATHandler.h @@ -193,7 +193,6 @@ private: device_err_t _last_at_err; uint16_t _oob_string_max_length; char *_output_delimiter; - uint8_t _output_delimiter_length; struct oob_t { const char *prefix; @@ -201,7 +200,6 @@ private: oob_t *next; }; oob_t *_oobs; - bool _response_terminated; uint32_t _at_timeout; uint32_t _previous_at_timeout;