From d430453c379040c16d98bc701a83dc78a32061bb Mon Sep 17 00:00:00 2001 From: Richard Russon Date: Mon, 29 Apr 2019 14:57:29 +0100 Subject: [PATCH] libmutt: fix mbyte code for degenerate cases --- mutt/mbyte.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/mutt/mbyte.c b/mutt/mbyte.c index 6bfcb1fee..43abea81b 100644 --- a/mutt/mbyte.c +++ b/mutt/mbyte.c @@ -54,13 +54,13 @@ bool OptLocales; /**< (pseudo) set if user has valid locale definition */ */ int mutt_mb_charlen(const char *s, int *width) { + if (!s || !*s) + return 0; + wchar_t wc; mbstate_t mbstate; size_t k, n; - if (!s || !*s) - return 0; - n = mutt_str_strlen(s); memset(&mbstate, 0, sizeof(mbstate)); k = mbrtowc(&wc, s, n, &mbstate); @@ -195,6 +195,9 @@ int mutt_mb_wcwidth(wchar_t wc) */ int mutt_mb_wcswidth(const wchar_t *s, size_t n) { + if (!s) + return 0; + int w = 0; while (n--) w += mutt_mb_wcwidth(*s++); @@ -213,6 +216,9 @@ int mutt_mb_wcswidth(const wchar_t *s, size_t n) */ size_t mutt_mb_width_ceiling(const wchar_t *s, size_t n, int w1) { + if (!s) + return 0; + const wchar_t *s0 = s; int w = 0; for (; n; s++, n--) @@ -230,6 +236,9 @@ size_t mutt_mb_width_ceiling(const wchar_t *s, size_t n, int w1) */ void mutt_mb_wcstombs(char *dest, size_t dlen, const wchar_t *src, size_t slen) { + if (!dest || !src) + return; + mbstate_t st; size_t k; @@ -285,6 +294,9 @@ void mutt_mb_wcstombs(char *dest, size_t dlen, const wchar_t *src, size_t slen) */ size_t mutt_mb_mbstowcs(wchar_t **pwbuf, size_t *pwbuflen, size_t i, char *buf) { + if (!pwbuf || !pwbuflen || !buf) + return 0; + wchar_t wc; mbstate_t st; size_t k; @@ -345,6 +357,9 @@ bool mutt_mb_is_shell_char(wchar_t ch) */ bool mutt_mb_is_lower(const char *s) { + if (!s) + return false; + wchar_t w; mbstate_t mb; size_t l; @@ -408,6 +423,9 @@ bool mutt_mb_is_display_corrupting_utf8(wchar_t wc) */ int mutt_mb_filter_unprintable(char **s) { + if (!s || !*s) + return -1; + wchar_t wc; size_t k, k2; char scratch[MB_LEN_MAX + 1]; -- 2.40.0