So I'm confused. Why is this a bug? What would you expect mIRC to do here?

I think it's reasonable for a disconnect event to cancel a /LIST request, and, therefore, show what mIRC has retrieved. I don't see this as "out of nowhere", since you told mIRC to get you a LIST, and mIRC got it (or was in the middle of getting it, for all intents and purposes).

The real problem here is that the IRCd is returning an invalid response, causing mIRC to wait indefinitely for a *real* response. It *should* wait indefinitely for a real response. Quitting *should* cancel this request and display what mIRC has retrieved.

- argv[0] on EFnet #mIRC
- "Life is a pointer to an integer without a cast"