summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-10-08 11:46:02 +0100
committerBram Moolenaar <Bram@vim.org>2022-10-08 11:46:02 +0100
commit2b7b4f7670f607704307f7715ce56752757c22e3 (patch)
treeb58e46a1e14d95085a7a54d6ba2d855a6fa3cb81
parenta0789478f6ebbb823670b7e14ce13ea3fd3b0217 (diff)
downloadvim-git-2b7b4f7670f607704307f7715ce56752757c22e3.tar.gz
patch 9.0.0691: lalloc(0) error in listchars testv9.0.0691
Problem: lalloc(0) error in listchars test. Solution: Skip generating text for tab if tab_len is zero.
-rw-r--r--src/drawline.c79
-rw-r--r--src/version.c2
2 files changed, 45 insertions, 36 deletions
diff --git a/src/drawline.c b/src/drawline.c
index cddb6ab65..a60673621 100644
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -2802,49 +2802,56 @@ win_line(
&& wlv.n_extra > tab_len)
tab_len += wlv.n_extra - tab_len;
# endif
- // If wlv.n_extra > 0, it gives the number of chars, to
- // use for a tab, else we need to calculate the width
- // for a tab.
- int tab2_len = mb_char2len(wp->w_lcs_chars.tab2);
- len = tab_len * tab2_len;
- if (wp->w_lcs_chars.tab3)
- len += mb_char2len(wp->w_lcs_chars.tab3) - tab2_len;
- if (wlv.n_extra > 0)
- len += wlv.n_extra - tab_len;
- c = wp->w_lcs_chars.tab1;
- p = alloc(len + 1);
- if (p == NULL)
- wlv.n_extra = 0;
- else
+ if (tab_len > 0)
{
- vim_memset(p, ' ', len);
- p[len] = NUL;
- vim_free(wlv.p_extra_free);
- wlv.p_extra_free = p;
- for (i = 0; i < tab_len; i++)
+ // If wlv.n_extra > 0, it gives the number of
+ // chars, to use for a tab, else we need to
+ // calculate the width for a tab.
+ int tab2_len = mb_char2len(wp->w_lcs_chars.tab2);
+ len = tab_len * tab2_len;
+ if (wp->w_lcs_chars.tab3)
+ len += mb_char2len(wp->w_lcs_chars.tab3)
+ - tab2_len;
+ if (wlv.n_extra > 0)
+ len += wlv.n_extra - tab_len;
+ c = wp->w_lcs_chars.tab1;
+ p = alloc(len + 1);
+ if (p == NULL)
+ wlv.n_extra = 0;
+ else
{
- int lcs = wp->w_lcs_chars.tab2;
-
- if (*p == NUL)
+ vim_memset(p, ' ', len);
+ p[len] = NUL;
+ vim_free(wlv.p_extra_free);
+ wlv.p_extra_free = p;
+ for (i = 0; i < tab_len; i++)
{
- tab_len = i;
- break;
- }
+ int lcs = wp->w_lcs_chars.tab2;
+
+ if (*p == NUL)
+ {
+ tab_len = i;
+ break;
+ }
- // if tab3 is given, use it for the last char
- if (wp->w_lcs_chars.tab3 && i == tab_len - 1)
- lcs = wp->w_lcs_chars.tab3;
- p += mb_char2bytes(lcs, p);
- wlv.n_extra += mb_char2len(lcs)
+ // if tab3 is given, use it for the last
+ // char
+ if (wp->w_lcs_chars.tab3
+ && i == tab_len - 1)
+ lcs = wp->w_lcs_chars.tab3;
+ p += mb_char2bytes(lcs, p);
+ wlv.n_extra += mb_char2len(lcs)
- (saved_nextra > 0 ? 1 : 0);
- }
- wlv.p_extra = wlv.p_extra_free;
+ }
+ wlv.p_extra = wlv.p_extra_free;
# ifdef FEAT_CONCEAL
- // n_extra will be increased by FIX_FOX_BOGUSCOLS
- // macro below, so need to adjust for that here
- if (wlv.vcol_off > 0)
- wlv.n_extra -= wlv.vcol_off;
+ // n_extra will be increased by
+ // FIX_FOX_BOGUSCOLS macro below, so need to
+ // adjust for that here
+ if (wlv.vcol_off > 0)
+ wlv.n_extra -= wlv.vcol_off;
# endif
+ }
}
}
#endif
diff --git a/src/version.c b/src/version.c
index 37046ba98..11fa0ce71 100644
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 691,
+/**/
690,
/**/
689,