From 6bed610af303183b44d3adf1b8484687fe68a752 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Mon, 21 Feb 2022 18:02:56 +0200 Subject: [PATCH] Check for invalid version with leading zeros --- platformio/package/manifest/schema.py | 6 ++++++ tests/package/test_manifest.py | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/platformio/package/manifest/schema.py b/platformio/package/manifest/schema.py index 78bf43a7..cf2353de 100644 --- a/platformio/package/manifest/schema.py +++ b/platformio/package/manifest/schema.py @@ -236,6 +236,12 @@ class ManifestSchema(BaseSchema): try: value = str(value) assert "." in value + # check leading zeros + try: + semantic_version.Version(value) + except ValueError as exc: + if "Invalid leading zero" in str(exc): + raise exc semantic_version.Version.coerce(value) except (AssertionError, ValueError): raise ValidationError( diff --git a/tests/package/test_manifest.py b/tests/package/test_manifest.py index a07a035e..0fc76f1a 100644 --- a/tests/package/test_manifest.py +++ b/tests/package/test_manifest.py @@ -859,6 +859,11 @@ def test_broken_schemas(): ManifestValidationError, match=("Invalid semantic versioning format") ): ManifestSchema().load_manifest(dict(name="MyPackage", version="broken_version")) + # version with leading zeros + with pytest.raises( + ManifestValidationError, match=("Invalid semantic versioning format") + ): + ManifestSchema().load_manifest(dict(name="MyPackage", version="01.02.00")) # broken value for Nested with pytest.raises(ManifestValidationError, match=r"authors.*Invalid input type"):