From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Richard Hopkins Newsgroups: gmane.emacs.bugs Subject: bug#58367: `package-install-file' rejects some .tar files (tentative patch) Date: Fri, 07 Oct 2022 22:15:56 +0100 Message-ID: <263dae3ce307236c2694a2bc0baa3f63@unbit.co.uk> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=_f90569960d4e6187016a8cd0be90d3a8" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="31306"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Roundcube Webmail/1.5.2 To: 58367@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri Oct 07 23:19:38 2022 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ogukp-0007uZ-8v for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 07 Oct 2022 23:19:36 +0200 Original-Received: from localhost ([::1]:45766 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oguko-0005ID-3Q for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 07 Oct 2022 17:19:34 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:42836) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oguiN-0003vj-8O for bug-gnu-emacs@gnu.org; Fri, 07 Oct 2022 17:17:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:38509) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oguiN-0006Dz-0u for bug-gnu-emacs@gnu.org; Fri, 07 Oct 2022 17:17:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1oguiM-0006jX-H4 for bug-gnu-emacs@gnu.org; Fri, 07 Oct 2022 17:17:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Richard Hopkins Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 07 Oct 2022 21:17:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 58367 X-GNU-PR-Package: emacs X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.166517737925814 (code B ref -1); Fri, 07 Oct 2022 21:17:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 7 Oct 2022 21:16:19 +0000 Original-Received: from localhost ([127.0.0.1]:37583 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oguhe-0006iH-Ne for submit@debbugs.gnu.org; Fri, 07 Oct 2022 17:16:19 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:37836) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oguhc-0006i9-DU for submit@debbugs.gnu.org; Fri, 07 Oct 2022 17:16:16 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:47992) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oguhY-0003ON-L0 for bug-gnu-emacs@gnu.org; Fri, 07 Oct 2022 17:16:15 -0400 Original-Received: from cockroach.oak.relay.mailchannels.net ([23.83.215.37]:3195) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oguhV-0006A4-8h for bug-gnu-emacs@gnu.org; Fri, 07 Oct 2022 17:16:12 -0400 X-Sender-Id: 9wt3zsp42r|x-authuser|emacs@unbit.co.uk Original-Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 1E9DB540250 for ; Fri, 7 Oct 2022 21:16:00 +0000 (UTC) Original-Received: from apollo.krystal.co.uk (unknown [127.0.0.6]) (Authenticated sender: 9wt3zsp42r) by relay.mailchannels.net (Postfix) with ESMTPA id 2334A540E4E for ; Fri, 7 Oct 2022 21:15:58 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1665177359; a=rsa-sha256; cv=none; b=cg6Ret8UWDd8BtAESaD79ZDLVhy0UFdh63icOuc4e449nrFssuhagNdRgAS8tcsTu/nlhg 0ymt+QnjFB+ejUtpc+7JBmagI/By+1/wvJwEW7sYDCXLjULQv8wSmrhb+r5mu4+HJXhN+8 a6WsevqE2KmqekZSYwbJrd7C392U9Gks5RXt2ANwoIwePmXQy73v/LyBlHTz95cA6zhFGp mZDhRRPhQaKS61ja/yinv+KQ41ljGNgkOhFWJJw1i0ixHVHwE8VJ78vcVn12BV++wMCfCL A5HrtLEu5IZ+e1g02p/rb+k7KF/B/0hvu0+5ew2HSuhRooEIsijSBUhCCIo/9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1665177359; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: dkim-signature; bh=9t+g8Npq8QPLHxK16jI13sG8nVIOgdSNUTusRFEOmaU=; b=63GG1sGOOU6CympbmFqcn4+zfNc10Zf3mvZi1aVnns5Ynj8omPzp246yNzWGwsGcDjnsYg ftxtHfOfcgQfqubs32t+VqY+vfj5z8Jm2yzIlaQt5c9XdVr4jK0Cw4ruvU8aMzLBGCdvsu 21Ozd3NdjYBZvBW6+lQ/8H5g+EMqpCHVMCBw0Y2j8vndGyzZOeSffH+14hrhlSUe6e/xea duR2PYS3nWV6ujS8pbzOVAlISDNt91jzWeZXJv2OPVcLVJQ7SAKsm4VV6CCR9qFcNnVDOM cHIMi1egRKwVlcg2Oe5FiIWLLz2pJTQHC/QcHhN8DBccRP/57/aOzqzqSNKY2w== ARC-Authentication-Results: i=1; rspamd-755f899884-pnx8m; auth=pass smtp.auth=9wt3zsp42r smtp.mailfrom=emacs@unbit.co.uk X-Sender-Id: 9wt3zsp42r|x-authuser|emacs@unbit.co.uk X-MC-Relay: Bad X-MailChannels-SenderId: 9wt3zsp42r|x-authuser|emacs@unbit.co.uk X-MailChannels-Auth-Id: 9wt3zsp42r X-Belong-Left: 6b42274941be064e_1665177359693_4147672947 X-MC-Loop-Signature: 1665177359693:2870491509 X-MC-Ingress-Time: 1665177359693 Original-Received: from apollo.krystal.co.uk (apollo.krystal.co.uk [77.72.0.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384) by 100.97.34.80 (trex/6.7.1); Fri, 07 Oct 2022 21:15:59 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=unbit.co.uk ; s=default; h=Content-Type:Message-ID:Subject:To:From:Date:MIME-Version: Content-Transfer-Encoding:Sender:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=D/iJ94HXh0YyVEL/JJmmRqSEpoB50dQuCjXd8KCyCqI=; b=q/X9Rfirg8SiTxF+Q7UKA9zfTb te3Z5Xry9BWCA2akhDHesQ7288eQcepIy+2KHYiYbH6WDkrGrzsoRVR1cpXzqcm7uY7zQUmtc6vTS U1DVr5jOyZLZYlSpYemmiDTBNorjKdcf6VFQCV4AE3M9DGa0WKVlRgW+uLD5nmHGqHGwSnVUuOt1Q CdLkmHA+4GDw4qpVHgw6JNM4Penx+iFyatIwtbnavHNbbvvpjscjDBUdNaqCqOie7UGSMbL36v89m zH0a/cW7x73AmSA+e9Z4XAc+hHJaO4ild+xMvr6tug81CI+4pJEKA6Sd5fJ5sSmyJooQYHITXNVJt uPQqMrFw==; Original-Received: from [::1] (port=45714 helo=apollo.krystal.co.uk) by apollo.krystal.co.uk with esmtpa (Exim 4.95) (envelope-from ) id 1oguhK-003Qqe-Id for bug-gnu-emacs@gnu.org; Fri, 07 Oct 2022 22:15:56 +0100 X-Sender: emacs@unbit.co.uk X-AuthUser: emacs@unbit.co.uk Received-SPF: pass client-ip=23.83.215.37; envelope-from=emacs@unbit.co.uk; helo=cockroach.oak.relay.mailchannels.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:244853 Archived-At: --=_f90569960d4e6187016a8cd0be90d3a8 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed `package-install-file' signals an error for some .tar packages based on their structure - both file layout and tar format. This is specific to the package routines for .tar files as Emacs can understand them fine, and can also install the packages if they have already been extracted. There's 2 different issues that cause this: 1) An old style .tar file (autoconf tar-v7, `tar cof ...`) vs a new style file (autoconf tar-ustar, `tar cf ...`) 2) A package where all files are in a single directory vs having child directories. A package with child directories currently only installs successfully if it's already extracted; the manual also says they are allowed. Combining these issues the current state of package installation using .tar files is: * ustar-nosub - error * ustar-withsub - error * v7-nosub - success * v7-withsub - error The main issue is how the package functions try to calculate the root of the package directory and from there it can locate the "-pkg.el" file etc. From this we get two different errors: 1) Cannot handle a plain directory being first and missing a path separator. e.g. This happens for ustar files with or without a sub directory. $ tar tf ustar-nosub-0.1.tar ustar-nosub-0.1 ustar-nosub-0.1/ustar-nosub.el ustar-nosub-0.1/ustar-nosub-pkg.el M-: (package-install-file "ustar-nosub-0.1.tar") Debugger entered--Lisp error: (wrong-type-argument stringp nil) directory-file-name(nil) package--description-file(nil) package-tar-file-info() package-install-from-buffer() package-install-file("~/tmp/pkgtest/tars/ustar-nosub-0.1.tar") funcall-interactively(package-install-file "~/tmp/pkgtest/tars/ustar-nosub-0.1.tar") call-interactively(package-install-file record nil) command-execute(package-install-file record) execute-extended-command(nil "package-install-file" "package-install-file") funcall-interactively(execute-extended-command nil "package-install-file" "package-install-file") call-interactively(execute-extended-command nil nil) command-execute(execute-extended-command) 2) Looks for "-pkg.el" in a sub directory when it won't be there. This happens for a v7 file but may also happen for a ustar if it wasn't for error (1). $ tar tf v7-withsub-0.1.tar v7-withsub-0.1/v7-sub/foo.txt v7-withsub-0.1/v7-withsub.el v7-withsub-0.1/v7-withsub-pkg.el M-: (package-install-file "tar tf v7-withsub-0.1.tar") Debugger entered--Lisp error: (wrong-type-argument arrayp nil) tar--describe-as-link(nil) tar--check-descriptor(nil) tar-get-file-descriptor("v7-withsub-0.1/v7-sub/v7-sub-pkg.el") package-tar-file-info() package-install-from-buffer() package-install-file("~/tmp/pkgtest/tars/v7-withsub-0.1.tar") funcall-interactively(package-install-file "~/tmp/pkgtest/tars/v7-withsub-0.1.tar") call-interactively(package-install-file record nil) command-execute(package-install-file record) execute-extended-command(nil "package-install-file" "package-install-file") funcall-interactively(execute-extended-command nil "package-install-file" "package-install-file") call-interactively(execute-extended-command nil nil) command-execute(execute-extended-command) For comparison the only .tar file that works is an old style v7 file with all files in a single directory $ tar tf v7-nosub-0.1.tar v7-nosub-0.1/v7-nosub.el v7-nosub-0.1/v7-nosub-pkg.el M-: (package-install-file "v7-nosub-0.1.tar") success I've attached the example files to help you investigate. There is also a proof of concept patch as it fixes ustar files with or without sub directories, but it still fails on v7-withsub making the new summary: * ustar-nosub - success * ustar-withsub - success * v7-nosub - success * v7-withsub - error The modified functions were `package-untar-buffer' and `package-tar-file-info'. p.s. These results are from OpenBSD 7.1 with their `tar` and Emacs 28.2 and master. A related issue #13136 - https://debbugs.gnu.org/cgi/bugreport.cgi?bug=13136 --=_f90569960d4e6187016a8cd0be90d3a8 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0001-tar-package-install-file.patch Content-Disposition: attachment; filename=0001-tar-package-install-file.patch; size=2436 VGVhY2ggYHBhY2thZ2UtaW5zdGFsbC1maWxlJyB0byBpbnN0YWxsIHByZXZpb3VzbHkgcmVqZWN0 ZWQgdGFyYmFsbHMKCldoaWxzdCBFbWFjcyBjYW4gb3BlbiB0aGUgdmFyaWV0aWVzIG9mIHRhcmJh bGxzIHdpdGggbm8gcHJvYmxlbSwgdGhlCnBhY2thZ2UgbWFuYWdlbWVudCBmdW5jdGlvbnMgZGVw ZW5kZWQgb24gYSBwYXJ0aWN1bGFyIHRhYmxlIGxheW91dCBpbgp0aGUgdGFyYmFsbCB0byBjYWxj dWxhdGUgdGhlIGRpcmVjdG9yeSBmb3IgdGhlIHBhY2thZ2UuCgpGb3IgZXhhbXBsZSwgd2l0aCBC U0QgdGFyOiBgdGFyIGNmIC4uLmAgd291bGQgZ2VuZXJhdGUgYSByZWplY3RlZAp0YXJiYWxsLCBh bmQgYHRhciBjb2YgLi4uYCB3b3VsZCBnZW5lcmF0ZSBhbiBhY2NlcHRlZCBvbmUuCgoqIGxpc3Av ZW1hY3MtbGlzcC9wYWNrYWdlLmVsIChwYWNrYWdlLXVudGFyLWJ1ZmZlcik6IENvbXBhcmUgYWdh aW5zdAp0aGUgaGVhZGVyIG5hbWUgZnJvbSB0aGUgdGFyYmFsbCByYXRoZXIgdGhhbiB0aGUgZmls ZXN5c3RlbQpleHBhbmRlZCBmb3JtLgoocGFja2FnZS10YXItZmlsZS1pbmZvKTogQWxzbyBhbGxv dyB0aGUgZmlyc3QgZW50cnkgdG8gYmUgYSBwbGFpbgpkaXJlY3RvcnkgbmFtZSB3aXRob3V0IHRy YWlsaW5nIHBhdGggc2VwYXJhdG9yLgotLS0KIGxpc3AvZW1hY3MtbGlzcC9wYWNrYWdlLmVsIHwg MTEgKysrKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDQgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvbGlzcC9lbWFjcy1saXNwL3BhY2thZ2UuZWwgYi9saXNwL2Vt YWNzLWxpc3AvcGFja2FnZS5lbAppbmRleCA0MjY4ZjdkMjdhLi5jYzM3MWZiYzUwIDEwMDY0NAot LS0gYS9saXNwL2VtYWNzLWxpc3AvcGFja2FnZS5lbAorKysgYi9saXNwL2VtYWNzLWxpc3AvcGFj a2FnZS5lbApAQCAtOTI2LDExICs5MjYsMTIgQEAgcGFja2FnZS11bnRhci1idWZmZXIKICAgKGxl dCAoKHJlZ2V4cCAoY29uY2F0ICJcXGAiIChyZWdleHAtcXVvdGUgKGV4cGFuZC1maWxlLW5hbWUg ZGlyKSkgIi8iKSkKICAgICAgICAgKGNhc2UtZm9sZC1zZWFyY2ggKGZpbGUtbmFtZS1jYXNlLWlu c2Vuc2l0aXZlLXAgZGlyKSkpCiAgICAgKGRvbGlzdCAodGFyLWRhdGEgdGFyLXBhcnNlLWluZm8p Ci0gICAgICAobGV0ICgobmFtZSAoZXhwYW5kLWZpbGUtbmFtZSAodGFyLWhlYWRlci1uYW1lIHRh ci1kYXRhKSkpKQorICAgICAgKGxldCogKChoZWFkZXItbmFtZSAodGFyLWhlYWRlci1uYW1lIHRh ci1kYXRhKSkKKyAgICAgICAgICAgICAobmFtZSAoZXhwYW5kLWZpbGUtbmFtZSBoZWFkZXItbmFt ZSkpKQogICAgICAgICAob3IgKHN0cmluZy1tYXRjaCByZWdleHAgbmFtZSkKICAgICAgICAgICAg IDs7IFRhcmJhbGxzIGNyZWF0ZWQgYnkgc29tZSB1dGlsaXRpZXMgZG9uJ3QgbGlzdAogICAgICAg ICAgICAgOzsgZGlyZWN0b3JpZXMgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIChCdWcjMTMxMzYpLgot ICAgICAgICAgICAgKGFuZCAoc3RyaW5nLWVxdWFsIGRpciBuYW1lKQorICAgICAgICAgICAgKGFu ZCAoc3RyaW5nLWVxdWFsIGRpciBoZWFkZXItbmFtZSkKICAgICAgICAgICAgICAgICAgKGVxICh0 YXItaGVhZGVyLWxpbmstdHlwZSB0YXItZGF0YSkgNSkpCiAgICAgICAgICAgICAoZXJyb3IgIlBh Y2thZ2UgZG9lcyBub3QgdW50YXIgY2xlYW5seSBpbnRvIGRpcmVjdG9yeSAlcy8iIGRpcikpKSkp CiAgICh0YXItdW50YXItYnVmZmVyKSkKQEAgLTExOTIsOCArMTE5MywxMCBAQCBwYWNrYWdlLXRh ci1maWxlLWluZm8KICAgIkZpbmQgcGFja2FnZSBpbmZvcm1hdGlvbiBmb3IgYSB0YXIgZmlsZS4K IFRoZSByZXR1cm4gcmVzdWx0IGlzIGEgYHBhY2thZ2UtZGVzYycuIgogICAoY2wtYXNzZXJ0IChk ZXJpdmVkLW1vZGUtcCAndGFyLW1vZGUpKQotICAobGV0KiAoKGRpci1uYW1lIChmaWxlLW5hbWUt ZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgICh0YXItaGVhZGVyLW5hbWUgKGNhciB0YXIt cGFyc2UtaW5mbykpKSkKKyAgKGxldCogKChoZWFkZXItbmFtZSAodGFyLWhlYWRlci1uYW1lIChj YXIgdGFyLXBhcnNlLWluZm8pKSkKKwkgKGRpci1uYW1lIChvciAoZmlsZS1uYW1lLWRpcmVjdG9y eSBoZWFkZXItbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgOzsgU29tZSB0YXIgdXRpbGl0 aWVzIGdlbmVyYXRlIGEgcGxhaW4gZGlyZWN0b3J5IG5hbWUgZmlyc3QKKyAgICAgICAgICAgICAg ICAgICAgICAgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkgaGVhZGVyLW5hbWUpKSkKICAgICAgICAg IChkZXNjLWZpbGUgKHBhY2thZ2UtLWRlc2NyaXB0aW9uLWZpbGUgZGlyLW5hbWUpKQogICAgICAg ICAgKHRhci1kZXNjICh0YXItZ2V0LWZpbGUtZGVzY3JpcHRvciAoY29uY2F0IGRpci1uYW1lIGRl c2MtZmlsZSkpKSkKICAgICAodW5sZXNzIHRhci1kZXNjCjIuMzguMAoK --=_f90569960d4e6187016a8cd0be90d3a8 Content-Transfer-Encoding: base64 Content-Type: application/gzip; name=tar-package-install-file.tar.gz Content-Disposition: attachment; filename=tar-package-install-file.tar.gz; size=2342 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 /QAYAQA= --=_f90569960d4e6187016a8cd0be90d3a8--