diff --git a/lib/obp60task/ImageDecoder.cpp b/lib/obp60task/ImageDecoder.cpp index 545ace6..25783d2 100644 --- a/lib/obp60task/ImageDecoder.cpp +++ b/lib/obp60task/ImageDecoder.cpp @@ -2,13 +2,22 @@ #include // Decoder for Base64 content -bool ImageDecoder::decodeBase64(const String& base64, uint8_t* outBuffer, size_t outSize, size_t& decodedSize) { +bool ImageDecoder::decodeBase64(const char* base64, size_t base64Len, uint8_t* outBuffer, size_t outSize, size_t& decodedSize) { + if (base64 == nullptr) { + decodedSize = 0; + return false; + } int ret = mbedtls_base64_decode( outBuffer, outSize, &decodedSize, - (const unsigned char*)base64.c_str(), - base64.length() + (const unsigned char*)base64, + base64Len ); return (ret == 0); } + +// Decoder for Base64 content +bool ImageDecoder::decodeBase64(const String& base64, uint8_t* outBuffer, size_t outSize, size_t& decodedSize) { + return decodeBase64(base64.c_str(), base64.length(), outBuffer, outSize, decodedSize); +} diff --git a/lib/obp60task/ImageDecoder.h b/lib/obp60task/ImageDecoder.h index 473b168..5bae456 100644 --- a/lib/obp60task/ImageDecoder.h +++ b/lib/obp60task/ImageDecoder.h @@ -5,5 +5,6 @@ class ImageDecoder { public: + bool decodeBase64(const char* base64, size_t base64Len, uint8_t* outBuffer, size_t outSize, size_t& decodedSize); bool decodeBase64(const String& base64, uint8_t* outBuffer, size_t outSize, size_t& decodedSize); }; diff --git a/lib/obp60task/PageNavigation.cpp b/lib/obp60task/PageNavigation.cpp index 262bce1..9924f84 100644 --- a/lib/obp60task/PageNavigation.cpp +++ b/lib/obp60task/PageNavigation.cpp @@ -4,6 +4,7 @@ #include "OBP60Extensions.h" #include "NetworkClient.h" // Network connection #include "ImageDecoder.h" // Image decoder for navigation map +#include #include "Logo_OBP_400x300_sw.h" @@ -432,13 +433,21 @@ bool showValues = false; // Show values HDT, SOG, DBT in navigation map // Decode Base64 content to image size_t decodedSize = 0; - bool decodeOk = decoder.decodeBase64(b64, imageData, imgSize, decodedSize); + bool decodeOk = decoder.decodeBase64(b64, b64len, imageData, imgSize, decodedSize); if (!decodeOk || decodedSize < requiredBytes){ + int base64Ret = mbedtls_base64_decode( + nullptr, + 0, + &decodedSize, + (const unsigned char*)b64, + b64len + ); LOG_DEBUG(GwLog::ERROR, - "Error PageNavigation: decode failed (ok=%d, decoded=%u, required=%u)", + "Error PageNavigation: decode failed (ok=%d, decoded=%u, required=%u, b64ret=%d)", decodeOk ? 1 : 0, (unsigned int)decodedSize, - (unsigned int)requiredBytes + (unsigned int)requiredBytes, + base64Ret ); free(b64); free(imageData);