Subject: bug#69259: 30.0.50; (get-pos-property 9483 'cursor-intangible) gives args-out-of-range error in folded magit buffer

From: StrawberryTea <[email-masked]>
Date: Tue, 20 Feb 2024 09:42:36 -0600

Hi Eli. I inserted a print function into magit-post-command-hook:

(defadvice! cae-magit-section-post-command-hook-a (oldfun)
  :around #’magit-section-post-command-hook
  (condition-case e
      (funcall oldfun)
    (error
     (+log “magit-post-command-hook error:”
           (current-buffer) (selected-window) (buffer-narrowed-p) (point-min)
  (point-max) (buffer-size)))))

and it outputted this:
Values: magit-post-command-hook error:, magit: emacs, #<window 156 on
*Messages*>, nil, 1, 20993, 20992 Eli Zaretskii <[email-masked]>

So basically, the situation is that the (current-buffer) is magit: emacs whereas
the window is on \*Messages\* and so when we call (get-pos-property pos
’cursor-intangible), it uses a point value from magit: emacs on the messages
buffer.

Why exactly are the window-buffer and the current-buffer different? I think this
has to do with persp-mode. My guess is that when it sets the new window
configuration, the current-buffer is not updated to the new window’s buffer
immediately.

Sincerely,
StrawberryTea

writes:

>> From: StrawberryTea <[email-masked]>
>> Date: Sun, 18 Feb 2024 15:08:20 -0600
>>
>> Hi. So I noticed that sometimes magit-section-post-command-hook was giving an
>> ars-out-of-range error and I have narrowed it down to a C function in Emacs:
>>
>> Debugger entered–Lisp error: (args-out-of-range 9482 9482)
>> cursor-sensor–intangible-p(9483)
>> cursor-sensor-tangible-pos(9483 #<window 3 on magit: emacs>)
>> cursor-sensor-move-to-tangible(#<window 3 on magit: emacs>)
>> #<subr magit-section-post-command-hook>()
>> apply(#<subr magit-section-post-command-hook> nil)
>> (condition-case err (apply func args) ((debug error) (signal (car err) (cdr err))))
>> cae-debug-reraise-error(#<subr magit-section-post-command-hook>)
>> apply(cae-debug-reraise-error #<subr magit-section-post-command-hook> nil)
>> magit-section-post-command-hook()
>>
>> Within cursor-sensor–intangible-p, (get-pos-property 9483 ’cursor-intangible)
>> is giving that error in the Magit buffer even though that 9483 number is less
>> than (point-max).
>
> Can you show a recipe to reproduce this, preferably without using
> Magit?
>
> I suspect some code narrows the buffer while this code runs, which is
> why the error is signaled.