Subject: bug#75199: 30.0.93; Emacs crashes when completing with corfu

From: Eli Zaretskii <[email-masked]>
Date: Mon, 30 Dec 2024 20:28:38 +0200

> From: Daniel Mendler <[email-masked]>
> Cc: Eli Zaretskii <[email-masked]>,  [email-masked],  [email-masked]
> Date: Mon, 30 Dec 2024 19:00:45 +0100
> 
> Zhengyi Fu <[email-masked]> writes:
> 
> > On 2024-12-30 23:24, Eli Zaretskii wrote:
> >
> >> Earlier you wrote:
> >> 
> >>> The error is probably caused by the width value of 0 passed to
> >>> XCreatePixmapFromBitmapData().
> >>> It seems gui_intersect_rectangles() returns true even if the resulted
> >>> rectangle is empty.  Is that correct behavior?
> >> Can you tell how this happens?  Is corfu doing something special with
> >> the fringes?
> >
> > I noticed the following calls in corfu--popup-show before the error:
> >
> > * define-fringe-bitmap(corfu--bar [-241] 1 8 (top periodic))
> > * define-fringe-bitmap(corfu--nil [])
> 
> I've adjusted the second call to the following, also for compatibility
> with older Emacs versions.
> 
> (define-fringe-bitmap 'corfu--nil [0] 1 1)

Doesn't

  (define-fringe-bitmap 'corfu--nil [0])

work as well?  If it doesn't, I guess the doc string is inaccurate?

> For the future, maybe `define-fringe-bitmap' should either check its
> argument carefully and disallow empty bitmaps, or empty bitmaps should
> be explicitly allowed?

Adding such argument-checking is fine by me, patches welcome.

Thanks.