mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
fix(grid): don't use utfc_ptr2char_len() when printing until NUL (#19456)
This commit is contained in:
parent
946c8fd288
commit
8af3d641da
@ -230,16 +230,12 @@ void grid_puts_len(ScreenGrid *grid, char_u *text, int textlen, int row, int col
|
|||||||
&& *ptr != NUL) {
|
&& *ptr != NUL) {
|
||||||
c = *ptr;
|
c = *ptr;
|
||||||
// check if this is the first byte of a multibyte
|
// check if this is the first byte of a multibyte
|
||||||
if (len > 0) {
|
mbyte_blen = len > 0
|
||||||
mbyte_blen = utfc_ptr2len_len(ptr, (int)((text + len) - ptr));
|
? utfc_ptr2len_len(ptr, (int)((text + len) - ptr))
|
||||||
} else {
|
: utfc_ptr2len((char *)ptr);
|
||||||
mbyte_blen = utfc_ptr2len((char *)ptr);
|
u8c = len >= 0
|
||||||
}
|
? utfc_ptr2char_len(ptr, u8cc, (int)((text + len) - ptr))
|
||||||
if (len >= 0) {
|
: utfc_ptr2char(ptr, u8cc);
|
||||||
u8c = utfc_ptr2char_len(ptr, u8cc, (int)((text + len) - ptr));
|
|
||||||
} else {
|
|
||||||
u8c = utfc_ptr2char(ptr, u8cc);
|
|
||||||
}
|
|
||||||
mbyte_cells = utf_char2cells(u8c);
|
mbyte_cells = utf_char2cells(u8c);
|
||||||
if (p_arshape && !p_tbidi && ARABIC_CHAR(u8c)) {
|
if (p_arshape && !p_tbidi && ARABIC_CHAR(u8c)) {
|
||||||
// Do Arabic shaping.
|
// Do Arabic shaping.
|
||||||
@ -248,8 +244,9 @@ void grid_puts_len(ScreenGrid *grid, char_u *text, int textlen, int row, int col
|
|||||||
nc = NUL;
|
nc = NUL;
|
||||||
nc1 = NUL;
|
nc1 = NUL;
|
||||||
} else {
|
} else {
|
||||||
nc = utfc_ptr2char_len(ptr + mbyte_blen, pcc,
|
nc = len >= 0
|
||||||
(int)((text + len) - ptr - mbyte_blen));
|
? utfc_ptr2char_len(ptr + mbyte_blen, pcc, (int)((text + len) - ptr - mbyte_blen))
|
||||||
|
: utfc_ptr2char(ptr + mbyte_blen, pcc);
|
||||||
nc1 = pcc[0];
|
nc1 = pcc[0];
|
||||||
}
|
}
|
||||||
pc = prev_c;
|
pc = prev_c;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
local helpers = require('test.functional.helpers')(after_each)
|
local helpers = require('test.functional.helpers')(after_each)
|
||||||
local Screen = require('test.functional.ui.screen')
|
local Screen = require('test.functional.ui.screen')
|
||||||
|
local assert_alive = helpers.assert_alive
|
||||||
local clear = helpers.clear
|
local clear = helpers.clear
|
||||||
local command = helpers.command
|
local command = helpers.command
|
||||||
local feed = helpers.feed
|
local feed = helpers.feed
|
||||||
@ -368,3 +369,11 @@ describe('global statusline', function()
|
|||||||
eq(1, meths.get_option('cmdheight'))
|
eq(1, meths.get_option('cmdheight'))
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('statusline does not crash if it has Arabic characters #19447', function()
|
||||||
|
clear()
|
||||||
|
meths.set_option('statusline', 'غً')
|
||||||
|
meths.set_option('laststatus', 2)
|
||||||
|
command('redraw!')
|
||||||
|
assert_alive()
|
||||||
|
end)
|
||||||
|
Loading…
Reference in New Issue
Block a user