Avoid assertion violations in bidi.c
authorEli Zaretskii <eliz@gnu.org>
Tue, 27 Feb 2024 11:12:15 +0000 (13:12 +0200)
committerEli Zaretskii <eliz@gnu.org>
Tue, 27 Feb 2024 11:12:15 +0000 (13:12 +0200)
* src/bidi.c (bidi_resolve_brackets): Move assertion about
'resolved_level' to where it belongs.  This avoids unnecessary
aborts when the character is not a bracket type and doesn't need
BPA resolution.  (Bug#69421)

src/bidi.c

index 93bb061ac32e2143896bc22239543011df6eac3a..90c0061549aafdb97ef7a395c2fec71db06d52dd 100644 (file)
@@ -2908,7 +2908,6 @@ bidi_resolve_brackets (struct bidi_it *bidi_it)
     }
   else if (bidi_it->bracket_pairing_pos != eob)
     {
-      eassert (bidi_it->resolved_level == -1);
       /* If the cached state shows an increase of embedding level due
         to an isolate initiator, we need to update the 1st cached
         state of the next run of the current isolating sequence with
@@ -2917,6 +2916,7 @@ bidi_resolve_brackets (struct bidi_it *bidi_it)
       if (bidi_it->level_stack[bidi_it->stack_idx].level > prev_level
          && ISOLATE_STATUS (bidi_it, bidi_it->stack_idx))
        {
+         eassert (bidi_it->resolved_level == -1);
          bidi_record_type_for_neutral (&prev_for_neutral, prev_level, 0);
          bidi_record_type_for_neutral (&next_for_neutral, prev_level, 1);
        }
@@ -2931,6 +2931,7 @@ bidi_resolve_brackets (struct bidi_it *bidi_it)
            }
          else if (bidi_it->bracket_pairing_pos == -1)
            {
+             eassert (bidi_it->resolved_level == -1);
              /* Higher levels were not BPA-resolved yet, even if
                 cached by bidi_find_bracket_pairs.  Force application
                 of BPA to the new level now.  */