GNU bug report logs - #78636
30.1; package-install-file errors with some tar files

Previous Next

Package: emacs;

Reported by: Andy Rosen <ajr <at> corp.mlfs.org>

Date: Thu, 29 May 2025 20:02:02 UTC

Severity: normal

Found in version 30.1

Full log


View this message in rfc822 format

From: Andy Rosen <ajr <at> corp.mlfs.org>
To: Philip Kaludercic <philipk <at> posteo.net>
Cc: 78636 <at> debbugs.gnu.org <78636 <at> debbugs.gnu.org>, Eli Zaretskii <eliz <at> gnu.org>
Subject: bug#78636: 30.1; package-install-file errors with some tar files
Date: Tue, 10 Jun 2025 19:32:54 +0000
On Jun 9, 2025, at 7:46 AM, Philip Kaludercic <philipk <at> posteo.net> wrote:
> 
> Eli Zaretskii <eliz <at> gnu.org> writes:
> 
>>> Date: Thu, 29 May 2025 15:56:31 +0000
>>> From:  Andy Rosen via "Bug reports for GNU Emacs,
>>> the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>>> 
>>> I propose adding a 'condition-case' to 'package-install-file' to return a friendly message.
>>> 
>>> diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
>>> index 82fcf439a11..01f659e6982 100644
>>> --- a/lisp/emacs-lisp/package.el
>>> +++ b/lisp/emacs-lisp/package.el
>>> @@ -2439,8 +2439,10 @@ directory."
>>>       (insert-file-contents-literally file)
>>>       (set-visited-file-name file)
>>>       (set-buffer-modified-p nil)
>>> -      (when (string-match "\\.tar\\'" file) (tar-mode)))
>>> -    (package-install-from-buffer)))
>>> +      (when (string-match "\\.tar\\'" file) (tar-mode)
>                                                ^
> Please break the line here.  I initially missed the major-mode switch,
> which confused me.

Like this?

      (when (string-match "\\.tar\\'" file)
        (tar-mode)

It’s a single line in the current source.  Yes, it makes more sense to split it.

> Also, can't we use `tar-header-block-tokenize' or some other function to
> directly check if the file is a valid archive, instead of relying on
> downstream signals being raised?

I don’t think we can use `tar-header-block-tokenize'.  The file is a valid tar archive, it’s just not a valid package file.  From tar-mode’s point of view everything is correct.

`tar-get-file-descriptor’ is a possibility.  Part of this bug is `tar-get-file-descriptor’ does not check if `tar-header-name’ matched with anything in `tar-parse-info'.  In this case it does not, so `tar-get-file-descriptor’ passes nil to `tar--check-descriptor’, then to `tar--describe-as-link’, then to `tar-header-link-type’.  `tar-header-link-type’ throws "wrong-type-argument”.

Checking for (and returning) nil in `tar-get-file-descriptor’ prevents the error, and ends up with "No package descriptor file found” in the echo area.

-Andy






This bug report was last modified 5 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.