[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands
From: |
Alan Mackenzie |
Subject: |
bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands |
Date: |
Sat, 2 Oct 2021 20:07:26 +0000 |
Hello, Eli.
On Sat, Oct 02, 2021 at 18:00:38 +0300, Eli Zaretskii wrote:
> > Date: Sat, 2 Oct 2021 14:45:52 +0000
> > Cc: joaotavora@gmail.com, 50946@debbugs.gnu.org
> > From: Alan Mackenzie <acm@muc.de>
> > > > The five aspects I enumerated on my original bug report. Not checking
> > > > for a properly formatted Local Variables: section
> > > That is not part of the function in question, is it? It's in
> > > hack-local-variables--find-variables, which we use everywhere.
> > It is now. It wasn't when I raised the bug a day or two ago.
> So this issue is no longer pertinent, right?
It was pertinent to my observation, but is no longer so, given that you
have reviewed the new C code.
[ .... ]
> > > > not going back at least 3000 characters
> > > That is now fixed, right?
> > No, it's not. In certain edge cases, it will go back fewer than 3000
> > characters.
> Does the patch below solve this?
I think it does, yes. Thanks!
> > > > I worry, to a lesser degree, it is not entirely clear whether setting
> > > > the elisp-shorthands variable in the first line of a short file should
> > > > be valid or not. I don't think the current hack-elisp-shorthands is
> > > > careful enough about this.
> > > Why does it matter?
Otherwise we could have the scenario where somebody sets elisp-shorthands
in the first line of a file, finds it works, then types more into the
file, saves the buffer, then finds when she visits the file again that it
no longer works. This, I think, would be a Bad Thing.
> > Because the first line definition should either be valid or not valid.
> > Currently it works for a sufficiently small file, but not for a normal
> > sized file. This, I think, is a bug.
> No, I don't think it's a bug, at least not a bug specific to
> shorthands. That's how file-local variables work in general.
No, not quite. For normal file-local variables, having one set in the
first line works regardless of the length of the file. It wouldn't for
elisp-shorthands, where it would only work for short files.
> > Say you have a file 3150 bytes long, which is less than 3000 characters
> > in Emacs. Your function will load only 3100 bytes, less than 3000
> > characters, into the temporary buffer. It thus may fail to find a Local
> > Variables section, even if this scenario is highly unusual.
> This should be solved by the change below.
Yes, thanks.
> > Have you checked that things work if the first byte in your temporary
> > buffer isn't at the start of a character?
> I don't see why this matters, can you explain?
It might matter, I simply don't know. I rarely type characters into
Emacs which are longer than a single byte in UTF8. I don't know whether
insert-file-contents does the Right Thing when there's half a character
at point-min, then insert-file-contents inserts the other half of the
character before it. I don't know to what extent normal Emacs functions
work when there are invalid "characters" at point-min or point-max. If I
were writing this function, I would want to check these things.
You are an expert on Unicode, so you are far likelier to know how Emacs
handles such things.
> Here's the patch I promised:
> diff --git a/lisp/shorthands.el b/lisp/shorthands.el
> index b8204d6..6162efd 100644
> --- a/lisp/shorthands.el
> +++ b/lisp/shorthands.el
> @@ -40,7 +40,10 @@ hack-elisp-shorthands
> (with-temp-buffer
> (while (and (< (buffer-size) 3000) (>= from 0))
> (insert-file-contents fullname nil from to)
> - (setq to from from (- from 100)))
> + (setq to from
> + from (cond
> + ((= from 0) -1)
> + (t (max 0 (- from 100))))))
> ;; FIXME: relies on the `hack-local-variables--find-variables'
> ;; detail of files.el. That function should be exported,
> ;; possibly be refactored into two parts, since we're only
Thanks! I think it's right.
--
Alan Mackenzie (Nuremberg, Germany).
- bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands, (continued)
- bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands, João Távora, 2021/10/01
- bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands, Alan Mackenzie, 2021/10/02
- bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands, João Távora, 2021/10/02
- bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands, João Távora, 2021/10/02
- bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands, Alan Mackenzie, 2021/10/02
- bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands, Eli Zaretskii, 2021/10/02
- bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands, Alan Mackenzie, 2021/10/02
- bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands, Eli Zaretskii, 2021/10/02
- bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands, Alan Mackenzie, 2021/10/02
- bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands, Eli Zaretskii, 2021/10/02
- bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands,
Alan Mackenzie <=
- bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands, Eli Zaretskii, 2021/10/03
- bug#50946: insert-file-contents can corrupt buffers. [Was: bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands], Alan Mackenzie, 2021/10/03
- bug#50946: insert-file-contents can corrupt buffers. [Was: bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands], Eli Zaretskii, 2021/10/03
- bug#50946: insert-file-contents can corrupt buffers. [Was: bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands], Alan Mackenzie, 2021/10/03
- bug#50946: insert-file-contents can corrupt buffers., Alan Mackenzie, 2021/10/03
- bug#50946: insert-file-contents can corrupt buffers., Eli Zaretskii, 2021/10/03
- bug#50946: insert-file-contents can corrupt buffers., Alan Mackenzie, 2021/10/03
- bug#50946: insert-file-contents can corrupt buffers., Eli Zaretskii, 2021/10/03
- bug#50946: insert-file-contents can corrupt buffers., Alan Mackenzie, 2021/10/03
- bug#50946: insert-file-contents can corrupt buffers. [Was: bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands], João Távora, 2021/10/03