unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Alan Mackenzie <acm@muc.de>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 50946@debbugs.gnu.org, joaotavora@gmail.com
Subject: bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands
Date: Sat, 2 Oct 2021 20:07:26 +0000	[thread overview]
Message-ID: <YVi7/pbufFHPjZh6@ACM> (raw)
In-Reply-To: <83czonbhex.fsf@gnu.org>

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).





  reply	other threads:[~2021-10-02 20:07 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-01 17:10 bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands Alan Mackenzie
2021-10-01 17:53 ` Eli Zaretskii
2021-10-01 21:15   ` João Távora
2021-10-02  6:10     ` Eli Zaretskii
2021-10-02  0:48   ` João Távora
2021-10-02 10:50     ` Alan Mackenzie
2021-10-02 11:13       ` João Távora
2021-10-02 11:38       ` João Távora
2021-10-02 12:38         ` Alan Mackenzie
2021-10-02 12:52           ` Eli Zaretskii
2021-10-02 13:57             ` Alan Mackenzie
2021-10-02 14:19               ` Eli Zaretskii
2021-10-02 14:45                 ` Alan Mackenzie
2021-10-02 15:00                   ` Eli Zaretskii
2021-10-02 20:07                     ` Alan Mackenzie [this message]
2021-10-03 11:45                       ` Eli Zaretskii
2021-10-03 12:10                     ` bug#50946: insert-file-contents can corrupt buffers. [Was: bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands] Alan Mackenzie
2021-10-03 12:40                       ` Eli Zaretskii
2021-10-03 13:33                         ` Alan Mackenzie
2021-10-03 15:04                         ` bug#50946: insert-file-contents can corrupt buffers Alan Mackenzie
2021-10-03 15:25                           ` Eli Zaretskii
2021-10-03 17:21                             ` Alan Mackenzie
2021-10-03 17:36                               ` Eli Zaretskii
2021-10-03 18:19                                 ` Alan Mackenzie
2021-10-03 15:34                         ` 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 15:42                           ` João Távora
2021-10-03 15:56                           ` Eli Zaretskii
2021-10-03 16:02                             ` João Távora
2021-10-03 16:20                               ` Eli Zaretskii
2021-10-03 17:05                                 ` João Távora
2021-10-03 17:56                                   ` Eli Zaretskii
2021-10-03 18:59                                     ` João Távora
2021-10-03 19:51                                       ` Eli Zaretskii
2021-10-03 19:59                                         ` João Távora
2021-10-02 15:02                 ` bug#50946: Emacs-28: Inadequate coding in hack-elisp-shorthands João Távora
2021-10-04  0:14                   ` Richard Stallman
2021-10-02 14:47           ` João Távora

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YVi7/pbufFHPjZh6@ACM \
    --to=acm@muc.de \
    --cc=50946@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    --cc=joaotavora@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).