From 01587c74ac6848495bc07280f0b03bb1083f29e7 Mon Sep 17 00:00:00 2001 From: Thomas Roessler Date: Thu, 25 May 2000 10:46:00 +0000 Subject: [PATCH] Somewhat different sigsegv fix suggested by EGE. --- curs_lib.c | 6 ++++-- mbyte.c | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/curs_lib.c b/curs_lib.c index ac7dbc6a..dcf1f06d 100644 --- a/curs_lib.c +++ b/curs_lib.c @@ -492,6 +492,7 @@ void mutt_format_string (char *dest, size_t destlen, char *p; wchar_t wc; int w, k; + char scratch[MB_LEN_MAX]; --destlen; p = dest; @@ -506,11 +507,12 @@ void mutt_format_string (char *dest, size_t destlen, w = wc < M_TREE_MAX ? 1 : wcwidth (wc); /* hack */ if (w >= 0) { - if (w > max_width || wctomb (0, wc) > destlen) + if (w > max_width || (k = wctomb (scratch, wc)) > destlen) break; min_width -= w; max_width -= w; - p += (k = wctomb (p, wc)); + strncpy (p, scratch, k); + p += k; destlen -= k; } } diff --git a/mbyte.c b/mbyte.c index d2eff201..ee6eab56 100644 --- a/mbyte.c +++ b/mbyte.c @@ -22,11 +22,13 @@ void mutt_set_charset (char *charset) int wctomb (char *s, wchar_t wc) { + if (!s) + return 0; if (Charset_is_utf8) return mutt_wctoutf8 (s, wc); else if (wc < 0x100) { - if (s) *s = wc; + *s = wc; return 1; } else -- 2.40.0