source of highlighter
plain | download
    1 From b46d78b815ffc146efeed74656b592a9f0e90f36 Mon Sep 17 00:00:00 2001
    2 From: =?UTF-8?q?Marek=20Beh=C3=BAn?= <kabel@kernel.org>
    3 Date: Sun, 18 Sep 2022 13:42:55 +0200
    4 Subject: [PATCH 2/2] BinpkgVerifier: check for existence of "size" key after
    5  applying hash filter
    6 MIME-Version: 1.0
    7 Content-Type: text/plain; charset=UTF-8
    8 Content-Transfer-Encoding: 8bit
    9 
   10 Currently we check for "size" key in the digests dict before we call
   11 _apply_hash_filter(), resulting in the "size" key being lost, which then
   12 causes:
   13 
   14   File "/usr/lib/python3.10/site-packages/_emerge/BinpkgVerifier.py", line 54, in _start
   15     if size != digests["size"]:
   16   KeyError: 'size'
   17 
   18 This can be reproduced by for example setting
   19   PORTAGE_CHECKSUM_FILTER="-* sha512"
   20 in make.conf and then trying to fetch a binkpkg.
   21 
   22 Signed-off-by: Marek BehĂșn <kabel@kernel.org>
   23 ---
   24 
   25 Also why the hell does _apply_hash_filter() always discard "size" key???
   26 
   27 ---
   28  lib/_emerge/BinpkgVerifier.py | 10 +++++-----
   29  1 file changed, 5 insertions(+), 5 deletions(-)
   30 
   31 diff --git a/lib/_emerge/BinpkgVerifier.py b/lib/_emerge/BinpkgVerifier.py
   32 index 6d8efb9c4..69a3cfb4b 100644
   33 --- a/lib/_emerge/BinpkgVerifier.py
   34 +++ b/lib/_emerge/BinpkgVerifier.py
   35 @@ -25,16 +25,16 @@ class BinpkgVerifier(CompositeTask):
   36  
   37          bintree = self.pkg.root_config.trees["bintree"]
   38          digests = bintree._get_digests(self.pkg)
   39 -        if "size" not in digests:
   40 -            self.returncode = os.EX_OK
   41 -            self._async_wait()
   42 -            return
   43 -
   44          digests = _filter_unaccelarated_hashes(digests)
   45          hash_filter = _hash_filter(bintree.settings.get("PORTAGE_CHECKSUM_FILTER", ""))
   46          if not hash_filter.transparent:
   47              digests = _apply_hash_filter(digests, hash_filter)
   48  
   49 +        if "size" not in digests:
   50 +            self.returncode = os.EX_OK
   51 +            self._async_wait()
   52 +            return
   53 +
   54          self._digests = digests
   55  
   56          try:
   57 -- 
   58 2.35.1
   59