From 24eff9108bd3bd70b934e227a680fb9d43690184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Sch=C3=BCler-Maroldt?= Date: Sat, 25 Apr 2020 00:37:40 +0200 Subject: [PATCH 1/2] NimBLE, rename installed to NimBLEDevice_initialized, fix sys_memcpy_swap() warning --- libesp32/NimBLE-Arduino/src/NimBLEDevice.cpp | 10 +++++----- libesp32/NimBLE-Arduino/src/mesh/glue.h | 7 +++++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/libesp32/NimBLE-Arduino/src/NimBLEDevice.cpp b/libesp32/NimBLE-Arduino/src/NimBLEDevice.cpp index 37c369052..a8de6718c 100644 --- a/libesp32/NimBLE-Arduino/src/NimBLEDevice.cpp +++ b/libesp32/NimBLE-Arduino/src/NimBLEDevice.cpp @@ -39,7 +39,7 @@ static const char* LOG_TAG = "NimBLEDevice"; /** * Singletons for the NimBLEDevice. */ -bool initialized = false; +bool NimBLEDevice_initialized = false; NimBLEScan* NimBLEDevice::m_pScan = nullptr; NimBLEServer* NimBLEDevice::m_pServer = nullptr; uint32_t NimBLEDevice::m_passkey = 123456; @@ -409,8 +409,8 @@ void NimBLEDevice::stopAdvertising() { * @param deviceName The device name of the device. */ /* STATIC */ void NimBLEDevice::init(std::string deviceName) { - if(!initialized){ - initialized = true; // Set the initialization flag to ensure we are only initialized once. + if(!NimBLEDevice_initialized){ + NimBLEDevice_initialized = true; // Set the initialization flag to ensure we are only initialized once. int rc=0; esp_err_t errRc = ESP_OK; @@ -476,7 +476,7 @@ void NimBLEDevice::stopAdvertising() { NIMBLE_LOGE(LOG_TAG, "esp_nimble_hci_and_controller_deinit() failed with error: %d", ret); } - initialized = false; + NimBLEDevice_initialized = false; } } // deinit @@ -485,7 +485,7 @@ void NimBLEDevice::stopAdvertising() { * @brief Check if the initialization is complete. */ bool NimBLEDevice::getInitialized() { - return initialized; + return NimBLEDevice_initialized; } // getInitialized diff --git a/libesp32/NimBLE-Arduino/src/mesh/glue.h b/libesp32/NimBLE-Arduino/src/mesh/glue.h index 08e81fa41..3b1636dcc 100644 --- a/libesp32/NimBLE-Arduino/src/mesh/glue.h +++ b/libesp32/NimBLE-Arduino/src/mesh/glue.h @@ -330,8 +330,11 @@ static inline void net_buf_simple_restore(struct os_mbuf *buf, buf->om_len = state->len; } -static inline void sys_memcpy_swap(void *dst, const void *src, size_t length) +static inline void sys_memcpy_swap(void *destination, const void *source, size_t length) { + u8_t *dst = destination; + const u8_t *src = source; + __ASSERT(((src < dst && (src + length) <= dst) || (src > dst && (dst + length) <= src)), "Source and destination buffers must not overlap"); @@ -339,7 +342,7 @@ static inline void sys_memcpy_swap(void *dst, const void *src, size_t length) src += length - 1; for (; length > 0; length--) { - *((u8_t *)dst++) = *((u8_t *)src--); + *dst++ = *src--; } } From 4c0a85ba0f18f59d4482f398d772e8a0907cde84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Sch=C3=BCler-Maroldt?= Date: Sat, 25 Apr 2020 00:55:39 +0200 Subject: [PATCH 2/2] CommandHandler() optimize and maybe security fix --- tasmota/support_command.ino | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino index a60a57b4c..6a8608560 100644 --- a/tasmota/support_command.ino +++ b/tasmota/support_command.ino @@ -204,14 +204,19 @@ void CommandHandler(char* topicBuf, char* dataBuf, uint32_t data_len) if (type != nullptr) { type++; uint32_t i; - for (i = 0; i < strlen(type); i++) { - type[i] = toupper(type[i]); + int nLen; // strlen(type) + char *s = type; + for (nLen = 0; *s; s++, nLen++) { + *s=toupper(*s); } - while (isdigit(type[i-1])) { - i--; + i = nLen; + if (i > 0) { // may be 0 + while (isdigit(type[i-1])) { + i--; + } } - if (i < strlen(type)) { - index = atoi(type +i); + if (i < nLen) { + index = atoi(type + i); user_index = true; } type[i] = '\0';