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

From: Daniel Mendler <[email-masked]>
Date: Mon, 30 Dec 2024 19:43:34 +0100

Eli Zaretskii <[email-masked]> writes:

>> 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?

Yes. If I understand [info:elisp#Customizing Bitmaps] correctly, in this
case the HEIGHT would be 1, but the WIDTH would be 8. This is slightly
different from the above, but it should work just as well given that the
bitmap is all zero. The corfu--nil bitmap is just a placeholder for the
empty fringe.

Daniel