Dwarf: fix missing padding before incrementally updated entries

This commit is contained in:
Jacob Young 2024-09-04 08:47:17 -04:00
parent 9007534551
commit 778519bb0d

View file

@ -847,10 +847,11 @@ const Entry = struct {
unit.len -| (unit.header_len + unit.trailer_len); unit.len -| (unit.header_len + unit.trailer_len);
if (entry_ptr.off + len > end) { if (entry_ptr.off + len > end) {
if (entry_ptr.next.unwrap()) |next_entry| { if (entry_ptr.next.unwrap()) |next_entry| {
if (entry_ptr.prev.unwrap()) |prev_entry| if (entry_ptr.prev.unwrap()) |prev_entry| {
unit.getEntry(prev_entry).next = entry_ptr.next const prev_entry_ptr = unit.getEntry(prev_entry);
else prev_entry_ptr.next = entry_ptr.next;
unit.first = entry_ptr.next; try prev_entry_ptr.pad(unit, sec, dwarf);
} else unit.first = entry_ptr.next;
const next_entry_ptr = unit.getEntry(next_entry); const next_entry_ptr = unit.getEntry(next_entry);
const entry = next_entry_ptr.prev; const entry = next_entry_ptr.prev;
next_entry_ptr.prev = entry_ptr.prev; next_entry_ptr.prev = entry_ptr.prev;
@ -860,6 +861,7 @@ const Entry = struct {
entry_ptr.next = .none; entry_ptr.next = .none;
entry_ptr.off = last_entry_ptr.off + sec.padToIdeal(last_entry_ptr.len); entry_ptr.off = last_entry_ptr.off + sec.padToIdeal(last_entry_ptr.len);
unit.last = entry; unit.last = entry;
try last_entry_ptr.pad(unit, sec, dwarf);
} }
try unit.resize(sec, dwarf, 0, @intCast(unit.header_len + entry_ptr.off + sec.padToIdeal(len) + unit.trailer_len)); try unit.resize(sec, dwarf, 0, @intCast(unit.header_len + entry_ptr.off + sec.padToIdeal(len) + unit.trailer_len));
} }