From d0efde07da335310b2e9da3bb9a690c2123fbc5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Sun, 11 Mar 2018 22:02:30 +0100 Subject: Reset parsing state after mbrtowc(3) failure The standard says "if an encoding error occurs ... the conversion state is unspecified". --- text-motions.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'text-motions.c') diff --git a/text-motions.c b/text-motions.c index d44e623..68f43b5 100644 --- a/text-motions.c +++ b/text-motions.c @@ -199,6 +199,7 @@ int text_line_width_get(Text *txt, size_t pos) { wchar_t wc; size_t wclen = mbrtowc(&wc, buf, len, &ps); if (wclen == (size_t)-1 && errno == EILSEQ) { + ps = (mbstate_t){0}; /* assume a replacement symbol will be displayed */ width++; } else if (wclen == (size_t)-2) { @@ -236,6 +237,7 @@ size_t text_line_width_set(Text *txt, size_t pos, int width) { wchar_t wc; size_t wclen = mbrtowc(&wc, buf, len, &ps); if (wclen == (size_t)-1 && errno == EILSEQ) { + ps = (mbstate_t){0}; /* assume a replacement symbol will be displayed */ cur_width++; } else if (wclen == (size_t)-2) { -- cgit v1.2.3