mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-14 15:56:13 +03:00
fix(terminal): avoid trying to clone bad managed memory in reflow
If we call `moveLastRowToNewPage` at any point because we failed to copy some managed memory, it tries to copy managed memory that hasn't been cloned yet when moving our progress to a new page. Avoid this by setting our content tag, hyperlink flag, and style id to indicate no managed memory is present on the cell.
This commit is contained in:
@ -948,17 +948,15 @@ const ReflowCursor = struct {
|
||||
},
|
||||
}
|
||||
|
||||
// Prevent integrity checks from tripping
|
||||
// while copying graphemes and hyperlinks.
|
||||
if (comptime std.debug.runtime_safety) {
|
||||
self.page_cell.style_id = stylepkg.default_id;
|
||||
}
|
||||
// These will create issues by trying to clone managed memory that
|
||||
// isn't set if the current dst row needs to be moved to a new page.
|
||||
// They'll be fixed once we do properly copy the relevant memory.
|
||||
self.page_cell.content_tag = .codepoint;
|
||||
self.page_cell.hyperlink = false;
|
||||
self.page_cell.style_id = stylepkg.default_id;
|
||||
|
||||
// Copy grapheme data.
|
||||
if (cell.content_tag == .codepoint_grapheme) {
|
||||
// The tag is asserted to be .codepoint in setGraphemes.
|
||||
self.page_cell.content_tag = .codepoint;
|
||||
|
||||
// Copy the graphemes
|
||||
const cps = src_page.lookupGrapheme(cell).?;
|
||||
|
||||
@ -981,8 +979,6 @@ const ReflowCursor = struct {
|
||||
}
|
||||
}
|
||||
|
||||
self.page_row.grapheme = true;
|
||||
|
||||
// This shouldn't fail since we made sure we have space above.
|
||||
try self.page.setGraphemes(self.page_row, self.page_cell, cps);
|
||||
}
|
||||
@ -1015,8 +1011,6 @@ const ReflowCursor = struct {
|
||||
);
|
||||
} orelse src_id;
|
||||
|
||||
self.page_row.hyperlink = true;
|
||||
|
||||
// We expect this to succeed due to the
|
||||
// hyperlinkCapacity check we did before.
|
||||
try self.page.setHyperlink(
|
||||
|
Reference in New Issue
Block a user