Subject: bug#78184: 30.0.93; ansi-osc-apply-on-region should use end marker

From: Troy Brown <[email-masked]>
Date: Thu, 1 May 2025 07:47:56 -0400

I've been running into an issue when using the ANSI OSC compilation
filters, where part way through parsing input, I'll get an "args out
of range" error on the call to `put-text-property`.  I believe this is
because `ansi-osc-apply-on-region` uses `delete-region` and therefore
the buffer can shrink from its original size.  Due to this shrinking,
the use of "end", in the call to `put-text-property` can reside
outside the current bounds of the buffer, causing the error.

Looking at similar functionality in `ansi-color-apply-on-region`, I
noticed that it creates a marker for "end" at the beginning of the
function, avoiding this problem.  I believe the ANSI OSC package
should use a similar approach and create a marker for "end".  It's
also likely that a marker should be used in other functions within the
package, such as `ansi-osc-filter-region`, although
`re-search-forward` doesn't seem to be susceptible to the range issue
that `put-text-property` is.

Currently, I use the following advice to workaround the problem by
ensuring that "end" is a marker before calling the original function:

```emacs
(defun init.el/advice/ansi-osc-apply-on-region (oldfun &rest r)
  (let ((start (car r))
        (end (cadr r)))
    (funcall oldfun start (copy-marker end))))
(advice-add 'ansi-osc-apply-on-region :around
#'init.el/advice/ansi-osc-apply-on-region)
```