Subject: Re: bug#78042: Improper sequence of `before/after-change-functions` calls

From: Eli Zaretskii <[email-masked]>
Date: Fri, 25 Apr 2025 21:56:44 +0300

> From: Stefan Monnier <[email-masked]>
> Cc: [email-masked]
> Date: Fri, 25 Apr 2025 13:39:28 -0400
> 
> >> diff --git a/src/coding.c b/src/coding.c
> >> index 63b0dbeb18b..b4209986918 100644
> >> --- a/src/coding.c
> >> +++ b/src/coding.c
> >> @@ -7363,6 +7363,7 @@ decode_coding (struct coding_system *coding)
> >>    struct ccl_spec cclspec;
> >>    int carryover;
> >>    int i;
> >> +  specpdl_ref count = SPECPDL_INDEX ();
> >>  
> >>    USE_SAFE_ALLOCA;
> >>  
> >> @@ -7389,6 +7390,8 @@ decode_coding (struct coding_system *coding)
> >>  
> >>        undo_list = BVAR (current_buffer, undo_list);
> >>        bset_undo_list (current_buffer, Qt);
> >> +      /* The caller should run *-change-functions over the whole region.  */
> >> +      specbind (Qinhibit_modification_hooks, Qt);
> >>      }
> >
> > How do we make sure this requirement is heeded to?
> 
> The rest of the code in this function modifies the buffer without
> running any `before/after-change-functions` (except for things like
> charset properties, which is what I'm trying to suppress), so if a caller
> fails to run those hooks we'd know (and the above patch wouldn't make
> it worse).

I was asking how will we be able to make sure the caller does run the
modification hooks.  I don't quite understand what you mean by "we'd
know".  Know how and by what signs?

> > And how do we document this incompatible change in NEWS?
> 
> It's a bug fix, not an incompatible change.

We now require callers to do something they didn't have to do before,
or am I missing something?