diff --git a/BL808Image.bt b/BL808Image.bt index f82e45e9f7635f67bbb836b0e7451152044f5c53..2a52c04cbdcfb045efc945e75bdc30fd3d3100f3 100644 --- a/BL808Image.bt +++ b/BL808Image.bt @@ -231,7 +231,7 @@ if (BootHeader.magic != 0x504e4642) return 1; } -if(BootHeader.flashCfgTableAddr < FileSize() && +if (BootHeader.flashCfgTableLen != 0 && BootHeader.flashCfgTableAddr < FileSize() && BootHeader.flashCfgTableAddr + BootHeader.flashCfgTableLen <= FileSize()) { FSeek(BootHeader.flashCfgTableAddr); local quad num_configs = (BootHeader.flashCfgTableLen - 8) / 8; @@ -268,7 +268,10 @@ if(BootHeader.flashCfgTableAddr < FileSize() && } FSeek(off); } else { - Warning("flashCfgTable appears to either overlap with header, exist after the end of the file or overlap with the end of the file!"); + // If flashCfgTableLen == 0, don't raise warning as it is allowed by this file format. + if (BootHeader.flashCfgTableLen != 0) { + Warning("flashCfgTable appears to either overlap with header, exist after the end of the file or overlap with the end of the file!"); + } } if(BootHeader.basicCfg.img_len_cnt < FileSize() && @@ -279,21 +282,22 @@ if(BootHeader.basicCfg.img_len_cnt < FileSize() && local int ret = ChecksumAlgStr(CHECKSUM_SHA256, s, startof(image),sizeof(image)); if(ret) { local char ChecksumAlgStrResult[64 + 1]; - for (i = 0; i < 8; i++) { - ChecksumAlgStrResult[i * 8 + 1] = (char)(BootHeader.basicCfg.hash[i] & 0xF); - ChecksumAlgStrResult[i * 8 + 0] = (char)((BootHeader.basicCfg.hash[i] >> 4) & 0xF); - ChecksumAlgStrResult[i * 8 + 3] = (char)((BootHeader.basicCfg.hash[i] >> 8) & 0xF); - ChecksumAlgStrResult[i * 8 + 2] = (char)((BootHeader.basicCfg.hash[i] >> 12) & 0xF); - ChecksumAlgStrResult[i * 8 + 5] = (char)((BootHeader.basicCfg.hash[i] >> 16) & 0xF); - ChecksumAlgStrResult[i * 8 + 4] = (char)((BootHeader.basicCfg.hash[i] >> 20) & 0xF); - ChecksumAlgStrResult[i * 8 + 7] = (char)((BootHeader.basicCfg.hash[i] >> 24) & 0xF); - ChecksumAlgStrResult[i * 8 + 6] = (char)((BootHeader.basicCfg.hash[i] >> 28) & 0xF); + local quad k; + for (k = 0; k < 8; k++) { + ChecksumAlgStrResult[k * 8 + 1] = (char)(BootHeader.basicCfg.hash[k] & 0xF); + ChecksumAlgStrResult[k * 8 + 0] = (char)((BootHeader.basicCfg.hash[k] >> 4) & 0xF); + ChecksumAlgStrResult[k * 8 + 3] = (char)((BootHeader.basicCfg.hash[k] >> 8) & 0xF); + ChecksumAlgStrResult[k * 8 + 2] = (char)((BootHeader.basicCfg.hash[k] >> 12) & 0xF); + ChecksumAlgStrResult[k * 8 + 5] = (char)((BootHeader.basicCfg.hash[k] >> 16) & 0xF); + ChecksumAlgStrResult[k * 8 + 4] = (char)((BootHeader.basicCfg.hash[k] >> 20) & 0xF); + ChecksumAlgStrResult[k * 8 + 7] = (char)((BootHeader.basicCfg.hash[k] >> 24) & 0xF); + ChecksumAlgStrResult[k * 8 + 6] = (char)((BootHeader.basicCfg.hash[k] >> 28) & 0xF); } - for (i = 0; i < 64; i++) { - if (ChecksumAlgStrResult[i] >= 10) { - ChecksumAlgStrResult[i] = ChecksumAlgStrResult[i] + 'A' - 10; + for (k = 0; k < 64; k++) { + if (ChecksumAlgStrResult[k] >= 10) { + ChecksumAlgStrResult[k] = ChecksumAlgStrResult[k] + 'A' - 10; } else { - ChecksumAlgStrResult[i] += '0'; + ChecksumAlgStrResult[k] += '0'; } } ChecksumAlgStrResult[64] = '\0';