Skip to content

Commit 41eb720

Browse files
Janrupfjessebraham
authored andcommitted
Fix workaround causing corruption of segment length
1 parent 7b3418e commit 41eb720

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

espflash/src/image_format/esp32bootloader.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ impl<'a> Esp32BootloaderFormat<'a> {
129129
break;
130130
}
131131
}
132-
checksum = save_flash_segment(&mut data, &segment, checksum)?;
132+
checksum = save_flash_segment(&mut data, segment, checksum)?;
133133
segment_count += 1;
134134
}
135135

@@ -240,20 +240,23 @@ fn get_segment_padding(offset: usize, segment: &CodeSegment) -> u32 {
240240

241241
fn save_flash_segment(
242242
data: &mut Vec<u8>,
243-
segment: &CodeSegment,
243+
mut segment: CodeSegment,
244244
checksum: u8,
245245
) -> Result<u8, Error> {
246246
let end_pos = (data.len() + segment.data().len()) as u32 + SEG_HEADER_LEN;
247247
let segment_reminder = end_pos % IROM_ALIGN;
248248

249-
let checksum = save_segment(data, segment, checksum)?;
250-
251249
if segment_reminder < 0x24 {
252250
// Work around a bug in ESP-IDF 2nd stage bootloader, that it didn't map the
253251
// last MMU page, if an IROM/DROM segment was < 0x24 bytes over the page
254252
// boundary.
255-
data.write_all(&[0u8; 0x24][0..(0x24 - segment_reminder as usize)])?;
253+
static PADDING: [u8; 0x24] = [0; 0x24];
254+
255+
segment += &PADDING[0..(0x24 - segment_reminder as usize)];
256256
}
257+
258+
let checksum = save_segment(data, &segment, checksum)?;
259+
257260
Ok(checksum)
258261
}
259262

0 commit comments

Comments
 (0)