From 604eef2ffde32f8f9571d622278165907dffa972 Mon Sep 17 00:00:00 2001 From: n-dusan Date: Wed, 12 Oct 2022 12:58:28 +0200 Subject: [PATCH] fix: allow `length` to be zero * As per TUF specification, length attribute is a numerical value (which can include 0) - https://theupdateframework.github.io/specification/latest/#metapath-length fix: update tests Signed-off-by: n-dusan --- tests/test_metadata_serialization.py | 2 +- tuf/api/metadata.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_metadata_serialization.py b/tests/test_metadata_serialization.py index cec4fd08..65d410bf 100644 --- a/tests/test_metadata_serialization.py +++ b/tests/test_metadata_serialization.py @@ -297,7 +297,6 @@ def test_invalid_root_serialization(self, test_case_data: str) -> None: invalid_metafiles: utils.DataSet = { "wrong length type": '{"version": 1, "length": "a", "hashes": {"sha256" : "abc"}}', "version 0": '{"version": 0, "length": 1, "hashes": {"sha256" : "abc"}}', - "length 0": '{"version": 1, "length": 0, "hashes": {"sha256" : "abc"}}', "length below 0": '{"version": 1, "length": -1, "hashes": {"sha256" : "abc"}}', "empty hashes dict": '{"version": 1, "length": 1, "hashes": {}}', "hashes wrong type": '{"version": 1, "length": 1, "hashes": 1}', @@ -313,6 +312,7 @@ def test_invalid_metafile_serialization(self, test_case_data: str) -> None: valid_metafiles: utils.DataSet = { "all": '{"hashes": {"sha256" : "abc"}, "length": 12, "version": 1}', "no length": '{"hashes": {"sha256" : "abc"}, "version": 1 }', + "length 0": '{"version": 1, "length": 0, "hashes": {"sha256" : "abc"}}', "no hashes": '{"length": 12, "version": 1}', "unrecognized field": '{"hashes": {"sha256" : "abc"}, "length": 12, "version": 1, "foo": "bar"}', "many hashes": '{"hashes": {"sha256" : "abc", "sha512": "cde"}, "length": 12, "version": 1}', diff --git a/tuf/api/metadata.py b/tuf/api/metadata.py index 285b6df1..6ecf9b53 100644 --- a/tuf/api/metadata.py +++ b/tuf/api/metadata.py @@ -1052,8 +1052,8 @@ def _validate_hashes(hashes: Dict[str, str]) -> None: @staticmethod def _validate_length(length: int) -> None: - if length <= 0: - raise ValueError(f"Length must be > 0, got {length}") + if length < 0: + raise ValueError(f"Length must be >= 0, got {length}") class MetaFile(BaseFile):