Subject: Re: bug#66313: Acknowledgement (29.1.50; process-mark sometimes does not yield the expected value)

From: Eli Zaretskii <[email-masked]>
Date: Sat, 07 Oct 2023 18:03:27 +0300

> From: Markus Triska <[email-masked]>
> Date: Sat, 07 Oct 2023 16:15:38 +0200
> 
> 
> I have reduced this to the following problem: set-process-buffer
> sometimes unexpectedly changes the position of process-mark.
> 
> For a shorter test case that exhibits the issue, please download
> process-mark.el from:
> 
>     https://www.metalevel.at/ei/process-mark/process-mark.el
> 
> Its contents are:
> 
>    (let ((p (start-process "bash" nil "bash")))
>      (set-marker (process-mark p) (point))
>      (set-process-buffer p (current-buffer))
>      (marker-position (process-mark p)))
> 
>    (message "hello there!")
> 
> Place point after the first form in the file, and evaluate the form with
> C-x C-e.
> 
> The expected result is: 165. It is obtained with Emacs 26.1 and several
> later versions.
> 
> However, with the Emacs version I used to report this problem, the
> result I get is unexpectedly: 192.
> 
> I would greatly appreciate if the previous behaviour could be restored.

I fixed this on the emacs-29 branch, but please note that your code is
quite problematic: the set-marker call associates the process-mark
marker with the current buffer, but the process's buffer is still nil.
So between the 2nd and the 3rd line of your snippet, you have a window
where the process-mark points to a buffer different from the buffer
associated with the process.  You should do this the other way around:
first set the process-buffer, and then update the process-mark
position to a position in that buffer.

So in a nutshell, your code was hitting "undefined behavior", and
expecting it to be bug-for-bug compatible with old versions of Emacs
was not really reasonable.