diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index c4b332d0..7f406e7d 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -20,6 +20,7 @@ import git from pathlib import Path +import math import platform import os import re @@ -897,6 +898,14 @@ def _normalize_type_string(v): if v: return 'true' return 'false' + if isinstance(v, float): + # YAML 1.2 values for NaN, Inf, and -Inf + if math.isnan(v): + return '.nan' + if math.isinf(v): + if v > 0: + return '.inf' + return '-.inf' return str(v) diff --git a/tests/metadata.TestCase b/tests/metadata.TestCase index 89ce3e8b..2da4b16c 100755 --- a/tests/metadata.TestCase +++ b/tests/metadata.TestCase @@ -965,6 +965,24 @@ class MetadataTest(unittest.TestCase): {'AntiFeatures': {'true': {}}}, ) + def test_parse_yaml_app_antifeatures_float_nan(self): + self.assertEqual( + metadata.parse_yaml_metadata(io.StringIO('AntiFeatures: .nan')), + {'AntiFeatures': {'.nan': {}}}, + ) + + def test_parse_yaml_app_antifeatures_float_inf(self): + self.assertEqual( + metadata.parse_yaml_metadata(io.StringIO('AntiFeatures: .inf')), + {'AntiFeatures': {'.inf': {}}}, + ) + + def test_parse_yaml_app_antifeatures_float_negative_inf(self): + self.assertEqual( + metadata.parse_yaml_metadata(io.StringIO('AntiFeatures: -.inf')), + {'AntiFeatures': {'-.inf': {}}}, + ) + def test_parse_yaml_app_antifeatures_int(self): self.assertEqual( metadata.parse_yaml_metadata(io.StringIO('AntiFeatures: 1')),