remove char overflow caused by w not having a consistent length

This commit is contained in:
speedie 2023-02-10 16:51:51 +01:00
parent 5dc24865f1
commit acb0828906

View file

@ -312,9 +312,9 @@ drawitem(struct item *item, int x, int y, int w)
{ {
char buffer[sizeof(item->text) + lrpad / 2]; char buffer[sizeof(item->text) + lrpad / 2];
Clr scm[3]; Clr scm[3];
int lp = lrpad / 2; int lp = lrpad / 2; /* padding */
int wr, rd; int wr, rd;
int rw; int rw; /* width of text */
int fg = 7; int fg = 7;
int bg = 0; int bg = 0;
int bgfg = 0; int bgfg = 0;
@ -337,8 +337,13 @@ drawitem(struct item *item, int x, int y, int w)
buffer[wr] = '\0'; /* clear out character */ buffer[wr] = '\0'; /* clear out character */
/* draw text */ /* draw text */
rw = TEXTW(buffer) - lrpad; rw = TEXTWM(buffer) - lrpad;
drw_text(drw, x, y, rw + lp, bh, lp, buffer, 0, False); #if USERTL
apply_fribidi(buffer);
drw_text(drw, x, y, rw + lp, bh, lp, fribidi_text, 0, True);
#else
drw_text(drw, x, y, rw + lp, bh, lp, buffer, 0, True);
#endif
x += rw + lp; x += rw + lp;
lp = 0; /* no l padding, we only want it once */ lp = 0; /* no l padding, we only want it once */
@ -380,12 +385,16 @@ drawitem(struct item *item, int x, int y, int w)
buffer[wr] = '\0'; buffer[wr] = '\0';
/* width needs to be decreased now because we've already drawn some text
* if we haven't drawn text, this does nothing at all. */
w -= rw;
/* draw any text that doesn't use sgr sequences */ /* draw any text that doesn't use sgr sequences */
#if USERTL #if USERTL
apply_fribidi(buffer); apply_fribidi(buffer);
int r = drw_text(drw, x, y, w, bh, lp, fribidi_text, 0, False); int r = drw_text(drw, x, y, w, bh, lp, fribidi_text, 0, True);
#else #else
int r = drw_text(drw, x, y, w, bh, lp, buffer, 0, False); int r = drw_text(drw, x, y, w, bh, lp, buffer, 0, True);
#endif #endif
drawhighlights(item, x, y, w); drawhighlights(item, x, y, w);