From 0be6ee069e0911cdac5abe4d2ff53bf32a6d62fc Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 18 Aug 2011 21:46:02 +0300 Subject: [PATCH] Protect the bidi iterator against zero bidi properties. src/bidi.c (bidi_get_type): If bidi_type_table reports zero as the character bidirectional type, use STRONG_L instead. Fixes crashes in a buffer produced by `describe-categories'. --- src/ChangeLog | 4 ++++ src/bidi.c | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 037a4b28a9e..2b5b6fd0602 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2011-08-18 Eli Zaretskii + * bidi.c (bidi_get_type): If bidi_type_table reports zero as the + character bidirectional type, use STRONG_L instead. Fixes crashes + in a buffer produced by `describe-categories'. + * dispextern.h (struct bidi_it): Move disp_pos and disp_prop_p members before the level stack, so they would be saved and restored when copying iterator state. Fixes incorrect reordering diff --git a/src/bidi.c b/src/bidi.c index c0eee33ab3f..7517eca5aed 100644 --- a/src/bidi.c +++ b/src/bidi.c @@ -108,6 +108,8 @@ bidi_get_type (int ch, bidi_dir_t override) abort (); default_type = (bidi_type_t) XINT (CHAR_TABLE_REF (bidi_type_table, ch)); + if (default_type == 0) + default_type = STRONG_L; if (override == NEUTRAL_DIR) return default_type; -- 2.39.2