diff --git a/lib/lv_lib_qrcode/qrcodegen.cpp b/lib/lv_lib_qrcode/qrcodegen.cpp index bd8ed669..57bf3405 100644 --- a/lib/lv_lib_qrcode/qrcodegen.cpp +++ b/lib/lv_lib_qrcode/qrcodegen.cpp @@ -138,6 +138,11 @@ static const int PENALTY_N4 = 10; bool qrcodegen_encodeText(const char* text, uint8_t tempBuffer[], uint8_t qrcode[], enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl) { + /* preventing crashes */ + if (maxVersion > qrcodegen_VERSION_MAX_LIMIT) { + qrcode[0] = 0; // Set size to invalid value for safety + return false; + } size_t textLen = strlen(text); if(textLen == 0) @@ -172,6 +177,11 @@ fail: bool qrcodegen_encodeBinary(uint8_t dataAndTemp[], size_t dataLen, uint8_t qrcode[], enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl) { + /* preventing crashes */ + if (maxVersion > qrcodegen_VERSION_MAX_LIMIT) { + qrcode[0] = 0; // Set size to invalid value for safety + return false; + } struct qrcodegen_Segment seg; seg.mode = qrcodegen_Mode_BYTE; diff --git a/lib/lv_lib_qrcode/qrcodegen.h b/lib/lv_lib_qrcode/qrcodegen.h index 59a55a0c..74223270 100644 --- a/lib/lv_lib_qrcode/qrcodegen.h +++ b/lib/lv_lib_qrcode/qrcodegen.h @@ -132,12 +132,13 @@ struct qrcodegen_Segment * VERSION_MAX = 11 : max text length to encode 251 alphanumeric characters * VERSION_MAX = 15 : max text length to encode 412 alphanumeric characters * and so on -* VERSION_MAX = 25 : openHASP restarts on qrcode update +* 25 is the highest posible version, see below */ #define qrcodegen_VERSION_MIN 1 // The minimum version number #ifndef qrcodegen_VERSION_MAX #define qrcodegen_VERSION_MAX 7 // The maximum version number #endif +#define qrcodegen_VERSION_MAX_LIMIT 25 // Calculates the number of bytes needed to store any QR Code up to and including the given version number, // as a compile-time constant. For example, 'uint8_t buffer[qrcodegen_BUFFER_LEN_FOR_VERSION(25)];'