emacs-pretest-bug
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Crash in redisplay_internal -> note_mode_line_or_margin_highlight


From: Chong Yidong
Subject: Re: Crash in redisplay_internal -> note_mode_line_or_margin_highlight
Date: Mon, 09 Apr 2007 12:25:16 -0400
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.97 (gnu/linux)

David Reitter <address@hidden> writes:

> This crash occurred with a (slightly modified) CVS version
> (2007-04-04), Carbon build.
>
> I was trying out tabbar.el (providing tabbar-mode) using PNG files
> for `tabbar-home-button-enabled-image' and the other tabbar buttons.
> I think I clicked on the "mode" (leftmost) button before this
> happened, but I'm not sure.

I can't reproduce this patch, but I can see how it could conceivably
happen.

Kim, could you study this patch and tell me what you think?

*** emacs/src/xdisp.c.~1.1145.~ 2007-04-09 11:36:15.000000000 -0400
--- emacs/src/xdisp.c   2007-04-09 12:23:04.000000000 -0400
***************
*** 22437,22443 ****
  
    Lisp_Object mouse_face;
    int original_x_pixel = x;
!   struct glyph * glyph = NULL;
    struct glyph_row *row;
  
    if (area == ON_MODE_LINE || area == ON_HEADER_LINE)
--- 22437,22443 ----
  
    Lisp_Object mouse_face;
    int original_x_pixel = x;
!   struct glyph * glyph = NULL, * row_start_glyph = NULL;
    struct glyph_row *row;
  
    if (area == ON_MODE_LINE || area == ON_HEADER_LINE)
***************
*** 22455,22461 ****
        /* Find glyph */
        if (row->mode_line_p && row->enabled_p)
        {
!         glyph = row->glyphs[TEXT_AREA];
          end = glyph + row->used[TEXT_AREA];
  
          for (x0 = original_x_pixel;
--- 22455,22461 ----
        /* Find glyph */
        if (row->mode_line_p && row->enabled_p)
        {
!         glyph = row_start_glyph = row->glyphs[TEXT_AREA];
          end = glyph + row->used[TEXT_AREA];
  
          for (x0 = original_x_pixel;
***************
*** 22579,22590 ****
             is converted to a flatten by emacs lisp interpreter.
             The internal string is an element of the structures.
             The displayed string is the flatten string. */
!         for (tmp_glyph = glyph - 1, gpos = 0;
!              tmp_glyph->charpos >= XINT (b);
!              tmp_glyph--, gpos++)
            {
!             if (!EQ (tmp_glyph->object, glyph->object))
!               break;
            }
  
          /* Calculate the lenght(glyph sequence length: GSEQ_LENGTH) of
--- 22579,22594 ----
             is converted to a flatten by emacs lisp interpreter.
             The internal string is an element of the structures.
             The displayed string is the flatten string. */
!         gpos = 0;
!         if (glyph != row_start_glyph)
            {
!             for (tmp_glyph = glyph - 1;
!                  tmp_glyph->charpos >= XINT (b);
!                  tmp_glyph--, gpos++)
!               {
!                 if (!EQ (tmp_glyph->object, glyph->object))
!                   break;
!               }
            }
  
          /* Calculate the lenght(glyph sequence length: GSEQ_LENGTH) of





reply via email to

[Prev in Thread] Current Thread [Next in Thread]