1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-14 11:59:58 +03:00

Fixed parsing of over length custom default headers.

This commit is contained in:
mikeller 2020-06-01 23:08:18 +12:00
parent 931b3b2b89
commit 4b5273c34e

View file

@ -228,12 +228,15 @@ static char cliBufferTemp[CLI_IN_BUFFER_SIZE];
#define CUSTOM_DEFAULTS_CHANGESET_ID_PREFIX ", version: " #define CUSTOM_DEFAULTS_CHANGESET_ID_PREFIX ", version: "
#define CUSTOM_DEFAULTS_DATE_PREFIX ", date: " #define CUSTOM_DEFAULTS_DATE_PREFIX ", date: "
#define MAX_CHANGESET_ID_LENGTH 8
#define MAX_DATE_LENGTH 20
static bool customDefaultsHeaderParsed = false; static bool customDefaultsHeaderParsed = false;
static bool customDefaultsFound = false; static bool customDefaultsFound = false;
static char customDefaultsManufacturerId[MAX_MANUFACTURER_ID_LENGTH + 1] = { 0 }; static char customDefaultsManufacturerId[MAX_MANUFACTURER_ID_LENGTH + 1] = { 0 };
static char customDefaultsBoardName[MAX_BOARD_NAME_LENGTH + 1] = { 0 }; static char customDefaultsBoardName[MAX_BOARD_NAME_LENGTH + 1] = { 0 };
static char customDefaultsChangesetId[9] = { 0 }; static char customDefaultsChangesetId[MAX_CHANGESET_ID_LENGTH + 1] = { 0 };
static char customDefaultsDate[21] = { 0 }; static char customDefaultsDate[MAX_DATE_LENGTH + 1] = { 0 };
#endif #endif
#if defined(USE_CUSTOM_DEFAULTS_ADDRESS) #if defined(USE_CUSTOM_DEFAULTS_ADDRESS)
@ -4252,7 +4255,7 @@ static bool customDefaultsHasNext(const char *customDefaultsPtr)
return *customDefaultsPtr && *customDefaultsPtr != 0xFF && customDefaultsPtr < customDefaultsEnd; return *customDefaultsPtr && *customDefaultsPtr != 0xFF && customDefaultsPtr < customDefaultsEnd;
} }
static const char *parseCustomDefaultsHeaderElement(char *dest, const char *customDefaultsPtr, const char *prefix, char terminator) static const char *parseCustomDefaultsHeaderElement(char *dest, const char *customDefaultsPtr, const char *prefix, const char terminator, const unsigned maxLength)
{ {
char *endPtr = NULL; char *endPtr = NULL;
unsigned len = strlen(prefix); unsigned len = strlen(prefix);
@ -4263,7 +4266,7 @@ static const char *parseCustomDefaultsHeaderElement(char *dest, const char *cust
if (endPtr && customDefaultsHasNext(endPtr)) { if (endPtr && customDefaultsHasNext(endPtr)) {
len = endPtr - customDefaultsPtr; len = endPtr - customDefaultsPtr;
memcpy(dest, customDefaultsPtr, len); memcpy(dest, customDefaultsPtr, MIN(len, maxLength));
customDefaultsPtr += len; customDefaultsPtr += len;
@ -4284,13 +4287,13 @@ static void parseCustomDefaultsHeader(void)
customDefaultsPtr++; customDefaultsPtr++;
} }
customDefaultsPtr = parseCustomDefaultsHeaderElement(customDefaultsManufacturerId, customDefaultsPtr, CUSTOM_DEFAULTS_MANUFACTURER_ID_PREFIX, CUSTOM_DEFAULTS_BOARD_NAME_PREFIX[0]); customDefaultsPtr = parseCustomDefaultsHeaderElement(customDefaultsManufacturerId, customDefaultsPtr, CUSTOM_DEFAULTS_MANUFACTURER_ID_PREFIX, CUSTOM_DEFAULTS_BOARD_NAME_PREFIX[0], MAX_MANUFACTURER_ID_LENGTH);
customDefaultsPtr = parseCustomDefaultsHeaderElement(customDefaultsBoardName, customDefaultsPtr, CUSTOM_DEFAULTS_BOARD_NAME_PREFIX, CUSTOM_DEFAULTS_CHANGESET_ID_PREFIX[0]); customDefaultsPtr = parseCustomDefaultsHeaderElement(customDefaultsBoardName, customDefaultsPtr, CUSTOM_DEFAULTS_BOARD_NAME_PREFIX, CUSTOM_DEFAULTS_CHANGESET_ID_PREFIX[0], MAX_BOARD_NAME_LENGTH);
customDefaultsPtr = parseCustomDefaultsHeaderElement(customDefaultsChangesetId, customDefaultsPtr, CUSTOM_DEFAULTS_CHANGESET_ID_PREFIX, CUSTOM_DEFAULTS_DATE_PREFIX[0]); customDefaultsPtr = parseCustomDefaultsHeaderElement(customDefaultsChangesetId, customDefaultsPtr, CUSTOM_DEFAULTS_CHANGESET_ID_PREFIX, CUSTOM_DEFAULTS_DATE_PREFIX[0], MAX_CHANGESET_ID_LENGTH);
customDefaultsPtr = parseCustomDefaultsHeaderElement(customDefaultsDate, customDefaultsPtr, CUSTOM_DEFAULTS_DATE_PREFIX, '\n'); customDefaultsPtr = parseCustomDefaultsHeaderElement(customDefaultsDate, customDefaultsPtr, CUSTOM_DEFAULTS_DATE_PREFIX, '\n', MAX_DATE_LENGTH);
} }
customDefaultsHeaderParsed = true; customDefaultsHeaderParsed = true;