trivial: Make the SREC parser more spec compliant

Only upgrade S5 into S6 when there are over 0xFFFF records.
This commit is contained in:
Richard Hughes 2021-10-22 09:52:53 +01:00
parent 04a6877e06
commit 3a63f5bd9b
2 changed files with 4 additions and 3 deletions

View File

@ -550,11 +550,9 @@ fu_srec_firmware_write(FuFirmware *firmware, GError **error)
/* upgrade to longer addresses? */
if (fu_firmware_get_addr(firmware) >= (1ull << 24)) {
kind_data = FU_FIRMWARE_SREC_RECORD_KIND_S3_DATA_32;
kind_coun = FU_FIRMWARE_SREC_RECORD_KIND_S6_COUNT_24;
kind_term = FU_FIRMWARE_SREC_RECORD_KIND_S7_COUNT_32; /* intentional... */
} else if (fu_firmware_get_addr(firmware) >= (1ull << 16)) {
kind_data = FU_FIRMWARE_SREC_RECORD_KIND_S2_DATA_24;
kind_coun = FU_FIRMWARE_SREC_RECORD_KIND_S6_COUNT_24;
kind_term = FU_FIRMWARE_SREC_RECORD_KIND_S8_TERMINATION_24;
}
@ -585,6 +583,9 @@ fu_srec_firmware_write(FuFirmware *firmware, GError **error)
fu_chunk_get_data(chk),
fu_chunk_get_data_sz(chk));
}
/* upgrade to longer format */
if (chunks->len > G_MAXUINT16)
kind_coun = FU_FIRMWARE_SREC_RECORD_KIND_S6_COUNT_24;
fu_srec_firmware_write_line(str, kind_coun, chunks->len, NULL, 0);
}

View File

@ -73,7 +73,7 @@ fu_wac_firmware_xml_func(void)
g_assert_true(ret);
csum1 = fu_firmware_get_checksum(firmware1, G_CHECKSUM_SHA1, &error);
g_assert_no_error(error);
g_assert_cmpstr(csum1, ==, "bd734911430831127a7bba4664e212a56a2821bc");
g_assert_cmpstr(csum1, ==, "346f6196449b356777cf241f6edb039d503b88a1");
/* ensure we can round-trip */
xml_out = fu_firmware_export_to_xml(firmware1, FU_FIRMWARE_EXPORT_FLAG_NONE, &error);