[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master d52d6e1e10: Avoid assertion violations in STRING_CHAR
From: |
Eli Zaretskii |
Subject: |
master d52d6e1e10: Avoid assertion violations in STRING_CHAR |
Date: |
Tue, 4 Oct 2022 07:24:06 -0400 (EDT) |
branch: master
commit d52d6e1e106117eb4bba81a65e256e2e793037b6
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>
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'.
---
src/editfns.c | 4 +++-
src/xdisp.c | 5 ++++-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/editfns.c b/src/editfns.c
index b774e79337..c1414071c7 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -3552,7 +3552,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 818cf5e3f8..9534e27843 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -6312,7 +6312,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
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master d52d6e1e10: Avoid assertion violations in STRING_CHAR,
Eli Zaretskii <=