From: Eli Zaretskii Date: Tue, 4 Oct 2022 11:23:20 +0000 (+0300) Subject: Avoid assertion violations in STRING_CHAR X-Git-Tag: emacs-28.3-rc1~41 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=b560ce3560;p=emacs.git Avoid assertion violations in STRING_CHAR * src/xdisp.c (handle_composition_prop): * src/editfns.c (styled_format): Don't call 'STRING_CHAR' on unibyte strings. This avoids assertion violation in 'string_char_and_length'. (cherry picked from commit d52d6e1e106117eb4bba81a65e256e2e793037b6) --- diff --git a/src/editfns.c b/src/editfns.c index 790f66e3a02..203d3a4a57f 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -3468,7 +3468,9 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message) || conversion == 'o' || conversion == 'x' || conversion == 'X')) error ("Invalid format operation %%%c", - STRING_CHAR ((unsigned char *) format - 1)); + multibyte_format + ? STRING_CHAR ((unsigned char *) format - 1) + : *((unsigned char *) format - 1)); else if (! (FIXNUMP (arg) || ((BIGNUMP (arg) || FLOATP (arg)) && conversion != 'c'))) error ("Format specifier doesn't match argument type"); diff --git a/src/xdisp.c b/src/xdisp.c index f5f3a811e9d..0d0f77566bf 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -6034,7 +6034,10 @@ handle_composition_prop (struct it *it) pos_byte = IT_STRING_BYTEPOS (*it); string = it->string; s = SDATA (string) + pos_byte; - it->c = STRING_CHAR (s); + if (STRING_MULTIBYTE (string)) + it->c = STRING_CHAR (s); + else + it->c = *s; } else {