srec: Fix a fuzzing failure when trying to build zero sized firmware

This commit is contained in:
Richard Hughes 2021-03-11 12:15:38 +00:00
parent 42dcff32ca
commit d27bfc08fd

View File

@ -438,7 +438,6 @@ static GBytes *
fu_srec_firmware_write (FuFirmware *firmware, GError **error) fu_srec_firmware_write (FuFirmware *firmware, GError **error)
{ {
g_autoptr(GString) str = g_string_new (NULL); g_autoptr(GString) str = g_string_new (NULL);
g_autoptr(GPtrArray) chunks = NULL;
g_autoptr(GBytes) buf_blob = NULL; g_autoptr(GBytes) buf_blob = NULL;
const gchar *id = fu_firmware_get_id (firmware); const gchar *id = fu_firmware_get_id (firmware);
gsize id_strlen = id != NULL ? strlen (id) : 0; gsize id_strlen = id != NULL ? strlen (id) : 0;
@ -467,20 +466,21 @@ fu_srec_firmware_write (FuFirmware *firmware, GError **error)
0x0, (const guint8 *) id, id_strlen); 0x0, (const guint8 *) id, id_strlen);
/* payload */ /* payload */
chunks = fu_chunk_array_new_from_bytes (buf_blob, if (g_bytes_get_size (buf_blob) > 0) {
fu_firmware_get_addr (firmware), g_autoptr(GPtrArray) chunks = NULL;
0x0, 64); chunks = fu_chunk_array_new_from_bytes (buf_blob,
for (guint i = 0; i < chunks->len; i++) { fu_firmware_get_addr (firmware),
FuChunk *chk = g_ptr_array_index (chunks, i); 0x0, 64);
fu_srec_firmware_write_line (str, kind_data, for (guint i = 0; i < chunks->len; i++) {
fu_chunk_get_address (chk), FuChunk *chk = g_ptr_array_index (chunks, i);
fu_chunk_get_data (chk), fu_srec_firmware_write_line (str, kind_data,
fu_chunk_get_data_sz (chk)); fu_chunk_get_address (chk),
fu_chunk_get_data (chk),
fu_chunk_get_data_sz (chk));
}
fu_srec_firmware_write_line (str, kind_coun, chunks->len, NULL, 0);
} }
/* number of records */
fu_srec_firmware_write_line (str, kind_coun, chunks->len, NULL, 0);
/* EOF */ /* EOF */
fu_srec_firmware_write_line (str, kind_term, 0x0, NULL, 0); fu_srec_firmware_write_line (str, kind_term, 0x0, NULL, 0);