mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
url-mode: abort when running into un-allocated scrollback memory
When tagging URL cells (in preparation for rendering URL mode), we loop the URL’s entire range, setting the `url` attribute of all cells, and dirtying the rows. It is possible to create URLs that are invalid, and wrap around the scrollback, even though the scrollback hasn’t yet been filled. For example, by starting an OSC-8 URL, moving the cursor, and then closing the OSC-8 URL. These URLs are invalid, but are still rendered just fine. “Fine” being relative - they will typically fill the entire screen. But at least that’s a very clear indication for the user that’s something is wrong. The problem is when we hit un-allocated scrollback rows. We didn’t check for NULL rows, and crashed. This has now been fixed.
This commit is contained in:
parent
d22ba73c41
commit
f030c87ee6
2 changed files with 7 additions and 0 deletions
|
|
@ -53,6 +53,8 @@
|
|||
URLs.
|
||||
* Double free of URL while removing duplicated and/or overlapping URLs
|
||||
in URL mode (https://codeberg.org/dnkl/foot/issues/627).
|
||||
* Crash when an unclosed OSC-8 URL ran into un-allocated scrollback
|
||||
rows.
|
||||
|
||||
|
||||
### Security
|
||||
|
|
|
|||
|
|
@ -654,6 +654,11 @@ tag_cells_for_url(struct terminal *term, const struct url *url, bool value)
|
|||
c = 0;
|
||||
|
||||
row = term->grid->rows[r];
|
||||
if (row == NULL) {
|
||||
/* Un-allocated scrollback. This most likely means a
|
||||
* runaway OSC-8 URL. */
|
||||
break;
|
||||
}
|
||||
row->dirty = true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue