# HG changeset patch # User Christian Brabandt # Date 1691793003 -7200 # Node ID f1fdbcd46f3a979a524cb1f151beada1b2eee6b8 # Parent 94401c541ea313617248744690e3832b87505660 patch 9.0.1695: Crash with overlong textprop above Commit: https://github.com/vim/vim/commit/f1cc4d55b9ed3335985512fb9fedf31cc4bb65a0 Author: Christian Brabandt Date: Sat Aug 12 00:14:14 2023 +0200 patch 9.0.1695: Crash with overlong textprop above Problem: Crash with overlong textprop above Solution: Consider only positive padding closes: #12665 closes: #12661 Signed-off-by: Christian Brabandt diff --git a/src/drawline.c b/src/drawline.c --- a/src/drawline.c +++ b/src/drawline.c @@ -721,7 +721,7 @@ text_prop_position( // add 1 for NUL, 2 for when '…' is used if (n_attr != NULL) - l = alloc(n_used + before + after + padding + 3); + l = alloc(n_used + before + after + (padding > 0 ? padding : 0) + 3); if (n_attr == NULL || l != NULL) { int off = 0; @@ -801,7 +801,7 @@ text_prop_position( // n_attr_skip will not be decremented before draw_state is // WL_LINE - *n_attr_skip = before + padding; + *n_attr_skip = before + (padding > 0 ? padding : 0); } } } diff --git a/src/testdir/dumps/Test_prop_long_above_1.dump b/src/testdir/dumps/Test_prop_long_above_1.dump new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_prop_long_above_1.dump @@ -0,0 +1,8 @@ +|t+0#ffffff16#ff404010|h|e| |q|u|i|c|k| |b|r|o|w|n| |f|o|x| |j|u|m|p|s| |o|v|e|r| |t|h|e| |l|a|z|y| |d|o|g|.| |t|h|e| |q|u|i|c|k| |b|r|o|w|n +>x+0#0000000#ffffff0@2| @56 +|y@2| @56 +|~+0#4040ff13&| @58 +|~| @58 +|~| @58 +|~| @58 +| +0#0000000&@41|1|,|1|-|6|1| @7|A|l@1| diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim --- a/src/testdir/test_textprop.vim +++ b/src/testdir/test_textprop.vim @@ -3951,5 +3951,24 @@ func Test_error_after_using_negative_id( call StopVimInTerminal(buf) endfunc - +func Test_overlong_textprop_above_crash() + CheckRunVimInTerminal + + let lines =<< trim END + vim9script + prop_type_add('PropType', {highlight: 'Error'}) + setline(1, ['xxx ', 'yyy']) + prop_add(1, 0, { + type: 'PropType', + text: 'the quick brown fox jumps over the lazy dog. the quick brown fox jumps over the lazy dog. the quick brown fox jumps over the lazy dog.', + text_align: 'above', + text_wrap: 'wrap', + }) + END + call writefile(lines, 'XtextPropLongAbove', 'D') + let buf = RunVimInTerminal('-S XtextPropLongAbove', #{rows: 8, cols: 60}) + call VerifyScreenDump(buf, 'Test_prop_long_above_1', {}) + + call StopVimInTerminal(buf) +endfunc " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1695, +/**/ 1694, /**/ 1693,