Subject: bug#30320: 26.0.91; Crash when using lsp-ui-doc-mode

From: Eli Zaretskii <[email-masked]>
Date: Mon, 05 Feb 2018 19:03:01 +0200

> From: Jake Goulding <[email-masked]>
> Date: Sun, 4 Feb 2018 16:38:20 -0500
> 
> Ah, using `XSTRING(XSYMBOL(args[0])->u.s.name)->u.s.data` seems to do the trick:
> 
> <not a symbol 1>
> lsp--parser-on-message
> <not a symbol 2>
> lsp-ui-doc--callback
> lsp-ui-doc--display
> lsp-ui-doc--move-frame
> set-frame-size

Thanks, great job.  It is now clear what happens.  As I guessed,
lsp-ui assumes it is run in a GUI frame, so it calls functions that
make no sense on TTY frames.  I suggest to communicate this to the
developers of that package.

Can you avoid the crash if you remove the call to set-frame-size in
lsp-ui-doc--move-frame, or condition it on display-graphic-p returning
non-nil?

As for preventing such crashes even though some Lisp does nonsensical
things: I think a TTY frame cannot be less than 3 or 4 lines plus the
number of lines used for the menu bar.  Martin, WDYT about adding
these limitations to adjust_frame_size?

> not a symbol 1:
> 
> p *XVECTOR(args[0])
> (Lisp_Vector) $14 = {
>   header = (size = 4611686018729377797, gcaligned = '\x05')
>   contents = {}
> }
> (lldb) p PSEUDOVECTOR_TYPE(XVECTOR(args[0]))
> (pvec_type) $18 = PVEC_COMPILED
> 
> not a symbol 2:
> 
> p *XVECTOR(args[0])
> (Lisp_Vector) $16 = {
>   header = (size = 4611686018729377797, gcaligned = '\x05')
>   contents = {}
> }
> (lldb) p PSEUDOVECTOR_TYPE(XVECTOR(args[0]))
> (pvec_type) $17 = PVEC_COMPILED

Yes, these are byte-compiled functions.