From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 4338915800F for ; Mon, 30 Jan 2023 19:07:57 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 83BA5E0AB9; Mon, 30 Jan 2023 19:07:56 +0000 (UTC) Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 60756E0AB9 for ; Mon, 30 Jan 2023 19:07:56 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 54C49340E16 for ; Mon, 30 Jan 2023 19:07:55 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id E1D7085B for ; Mon, 30 Jan 2023 19:07:53 +0000 (UTC) From: "Arthur Zamarin" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Arthur Zamarin" Message-ID: <1674757490.088136ddc8008856eb6c3d3e432e15af8d704ba3.arthurzam@gentoo> Subject: [gentoo-commits] proj/pkgcore/pkgcheck:master commit in: src/pkgcheck/checks/, ... X-VCS-Repository: proj/pkgcore/pkgcheck X-VCS-Files: src/pkgcheck/checks/metadata_xml.py testdata/data/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/expected.json testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/InvalidMetadataRestrict-0.ebuild testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/metadata.xml X-VCS-Directories: testdata/data/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/ src/pkgcheck/checks/ testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/ X-VCS-Committer: arthurzam X-VCS-Committer-Name: Arthur Zamarin X-VCS-Revision: 088136ddc8008856eb6c3d3e432e15af8d704ba3 X-VCS-Branch: master Date: Mon, 30 Jan 2023 19:07:53 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 73b7df20-d54e-4c2f-9720-cff189285c2e X-Archives-Hash: d43851902d5cf1fc75f9d251cdb3899e commit: 088136ddc8008856eb6c3d3e432e15af8d704ba3 Author: Arthur Zamarin gentoo org> AuthorDate: Thu Jan 26 18:24:50 2023 +0000 Commit: Arthur Zamarin gentoo org> CommitDate: Thu Jan 26 18:24:50 2023 +0000 URL: https://gitweb.gentoo.org/proj/pkgcore/pkgcheck.git/commit/?id=088136dd InvalidMetadataRestrict: check for invalid restricts in metadata.xml Signed-off-by: Arthur Zamarin gentoo.org> src/pkgcheck/checks/metadata_xml.py | 34 ++++++++++++++++++++++ .../InvalidMetadataRestrict/expected.json | 1 + .../InvalidMetadataRestrict-0.ebuild | 8 +++++ .../InvalidMetadataRestrict/metadata.xml | 10 +++++++ 4 files changed, 53 insertions(+) diff --git a/src/pkgcheck/checks/metadata_xml.py b/src/pkgcheck/checks/metadata_xml.py index 0fcc31ac..adba0bdb 100644 --- a/src/pkgcheck/checks/metadata_xml.py +++ b/src/pkgcheck/checks/metadata_xml.py @@ -294,6 +294,19 @@ class InvalidRemoteID(results.PackageResult, results.Warning): ) +class InvalidMetadataRestrict(results.PackageResult, results.Error): + """Invalid package restrictions used in metadata.xml.""" + + def __init__(self, restrict: str, msg: str, **kwargs): + super().__init__(**kwargs) + self.restrict = restrict + self.msg = msg + + @property + def desc(self): + return f"metadata.xml: invalid package restrictions {self.restrict!r}: {self.msg}" + + class _XmlBaseCheck(Check): """Base class for metadata.xml scans.""" @@ -433,6 +446,7 @@ class PackageMetadataXmlCheck(_XmlBaseCheck): NonexistentProjectMaintainer, WrongMaintainerType, InvalidRemoteID, + InvalidMetadataRestrict, ] ) @@ -534,6 +548,26 @@ class PackageMetadataXmlCheck(_XmlBaseCheck): msg = "metadata.xml longdescription is too short" yield RedundantLongDescription(msg, pkg=pkg) + def _check_restricts(self, pkg, loc, doc): + restricts = ( + c.get("restrict") + for path in ("maintainer", "use/flag") + for c in doc.xpath(f"/pkgmetadata/{path}[string(@restrict)]") + ) + for restrict_str in restricts: + try: + restrict = atom(restrict_str, eapi="0") + if restrict.key != pkg.key: + yield InvalidMetadataRestrict( + restrict_str, "references another package", pkg=pkg + ) + if restrict.use: + yield InvalidMetadataRestrict( + restrict_str, "USE-conditionals are prohibited", pkg=pkg + ) + except MalformedAtom as exc: + yield InvalidMetadataRestrict(restrict_str, exc, pkg=pkg) + def _check_remote_id(self, pkg, loc, doc): for u in pkg.upstreams: # empty values are already reported as PkgMetadataXmlEmptyElement diff --git a/testdata/data/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/expected.json b/testdata/data/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/expected.json new file mode 100644 index 00000000..aca61195 --- /dev/null +++ b/testdata/data/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/expected.json @@ -0,0 +1 @@ +{"__class__": "InvalidMetadataRestrict", "category": "PackageMetadataXmlCheck", "package": "InvalidMetadataRestrict", "restrict": "<=PackageMetadataXmlCheck2/InvalidMetadataRestrict-5", "msg": "references another package"} diff --git a/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/InvalidMetadataRestrict-0.ebuild b/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/InvalidMetadataRestrict-0.ebuild new file mode 100644 index 00000000..eb5d8297 --- /dev/null +++ b/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/InvalidMetadataRestrict-0.ebuild @@ -0,0 +1,8 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +DESCRIPTION="Package metadata.xml with invalid restrict" +HOMEPAGE="https://github.com/pkgcore/pkgcheck" +SLOT="0" +LICENSE="BSD" +IUSE="flag1" diff --git a/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/metadata.xml b/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/metadata.xml new file mode 100644 index 00000000..52cd01df --- /dev/null +++ b/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/metadata.xml @@ -0,0 +1,10 @@ + + + + + random.gentoo.dev@gentoo.org + + + Some explanation + +