Fix problem with empty string set as 'manufacturer_id'. (#8848)

Fix problem with empty string set as 'manufacturer_id'.
This commit is contained in:
Michael Keller 2019-09-09 23:26:37 +12:00 committed by GitHub
commit a979e424b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 14 deletions

View File

@ -3017,12 +3017,14 @@ static void printBoardName(dumpFlags_t dumpMask)
static void cliBoardName(char *cmdline)
{
const unsigned int len = strlen(cmdline);
if (len > 0 && boardInformationIsSet() && (len != strlen(getBoardName()) || strncmp(getBoardName(), cmdline, len))) {
cliPrintErrorLinef(ERROR_MESSAGE, "BOARD_NAME", getBoardName());
const char *boardName = getBoardName();
if (len > 0 && strlen(boardName) != 0 && boardInformationIsSet() && (len != strlen(boardName) || strncmp(boardName, cmdline, len))) {
cliPrintErrorLinef(ERROR_MESSAGE, "BOARD_NAME", boardName);
} else {
if (len > 0) {
setBoardName(cmdline);
if (len > 0 && !configIsInCopy && setBoardName(cmdline)) {
boardInformationUpdated = true;
cliPrintHashLine("Set board_name.");
}
printBoardName(DUMP_ALL);
}
@ -3038,12 +3040,14 @@ static void printManufacturerId(dumpFlags_t dumpMask)
static void cliManufacturerId(char *cmdline)
{
const unsigned int len = strlen(cmdline);
if (len > 0 && boardInformationIsSet() && (len != strlen(getManufacturerId()) || strncmp(getManufacturerId(), cmdline, len))) {
cliPrintErrorLinef(ERROR_MESSAGE, "MANUFACTURER_ID", getManufacturerId());
const char *manufacturerId = getManufacturerId();
if (len > 0 && boardInformationIsSet() && strlen(manufacturerId) != 0 && (len != strlen(manufacturerId) || strncmp(manufacturerId, cmdline, len))) {
cliPrintErrorLinef(ERROR_MESSAGE, "MANUFACTURER_ID", manufacturerId);
} else {
if (len > 0) {
setManufacturerId(cmdline);
if (len > 0 && !configIsInCopy && setManufacturerId(cmdline)) {
boardInformationUpdated = true;
cliPrintHashLine("Set manufacturer_id.");
}
printManufacturerId(DUMP_ALL);
}
@ -3092,12 +3096,12 @@ static void cliSignature(char *cmdline)
writeSignature(signatureStr, getSignature());
cliPrintErrorLinef(ERROR_MESSAGE, "SIGNATURE", signatureStr);
} else {
if (len > 0) {
setSignature(signature);
if (len > 0 && !configIsInCopy && setSignature(signature)) {
signatureUpdated = true;
writeSignature(signatureStr, getSignature());
cliPrintHashLine("Set signature.");
} else if (signatureUpdated || signatureIsSet()) {
writeSignature(signatureStr, getSignature());
}

View File

@ -29,6 +29,7 @@
static bool boardInformationSet = false;
static char manufacturerId[MAX_MANUFACTURER_ID_LENGTH + 1];
static char boardName[MAX_BOARD_NAME_LENGTH + 1];
static bool boardInformationWasUpdated = false;
static bool signatureSet = false;
static uint8_t signature[SIGNATURE_LENGTH];
@ -64,9 +65,11 @@ bool boardInformationIsSet(void)
bool setManufacturerId(const char *newManufacturerId)
{
if (!boardInformationSet) {
if (!boardInformationSet || strlen(manufacturerId) == 0) {
strncpy(manufacturerId, newManufacturerId, MAX_MANUFACTURER_ID_LENGTH);
boardInformationWasUpdated = true;
return true;
} else {
return false;
@ -75,9 +78,11 @@ bool setManufacturerId(const char *newManufacturerId)
bool setBoardName(const char *newBoardName)
{
if (!boardInformationSet) {
if (!boardInformationSet || strlen(boardName) == 0) {
strncpy(boardName, newBoardName, MAX_BOARD_NAME_LENGTH);
boardInformationWasUpdated = true;
return true;
} else {
return false;
@ -86,7 +91,7 @@ bool setBoardName(const char *newBoardName)
bool persistBoardInformation(void)
{
if (!boardInformationSet) {
if (boardInformationWasUpdated) {
strncpy(boardConfigMutable()->manufacturerId, manufacturerId, MAX_MANUFACTURER_ID_LENGTH);
strncpy(boardConfigMutable()->boardName, boardName, MAX_BOARD_NAME_LENGTH);
boardConfigMutable()->boardInformationSet = true;