[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Forbid creation of zero-height canvas
From: |
Michael Spang |
Subject: |
[PATCH] Forbid creation of zero-height canvas |
Date: |
Fri, 10 Aug 2012 14:21:00 -0400 |
The code is not prepared to handle a canvas with no lines. One way to
segfault screen with a 0-line canvas is:
- Start screen
- Enable caption with ":caption always"
- Run vim
- Resize the current terminal to one line high
- Resize the current terminal to multiple lines high
- Quit vim
If the window is too small then don't expect this to render ok,
but it does prevent screen from crashing.
---
src/resize.c | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/src/resize.c b/src/resize.c
index 0e491eb..0a911db 100644
--- a/src/resize.c
+++ b/src/resize.c
@@ -153,13 +153,20 @@ int change_fore;
struct win *p;
struct canvas *cv;
int wwi;
+ int minhe;
debug2("ChangeScreenSize from (%d,%d) ", D_width, D_height);
debug3("to (%d,%d) (change_fore: %d)\n",wi, he, change_fore);
cv = &D_canvas;
+ minhe = 1 + ((cv->c_slperp && cv->c_slperp->c_slnext) || captionalways) +
(D_has_hstatus == HSTATUS_LASTLINE);
+ if (he < minhe)
+ {
+ debug1("too small, new height: %d\n", minhe);
+ he = minhe;
+ }
cv->c_xe = wi - 1;
- cv->c_ye = he - 1 - ((cv->c_slperp && cv->c_slperp->c_slnext) ||
captionalways) - (D_has_hstatus == HSTATUS_LASTLINE);
+ cv->c_ye = he - minhe;
cv->c_blank.l_height = cv->c_ye - cv->c_ys + 1;
if (cv->c_slperp)
{
--
1.7.7.3
- [PATCH] Forbid creation of zero-height canvas,
Michael Spang <=