{"record":{"id":"76f38a0b5237887a","repo":"larksuite/cli","slug":"expected-finite-type-name","errorCode":null,"errorMessage":"expected finite {type_name}","messagePattern":"expected finite (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"skills/lark-slides/scripts/sxsd_validator.py","lineNumber":512,"sourceCode":"        number = Decimal(value)\n        if type_name == \"positiveInteger\" and number <= 0:\n            raise ArithmeticError(\"expected positive integer\")\n        if type_name == \"nonNegativeInteger\" and number < 0:\n            raise ArithmeticError(\"expected non-negative integer\")\n        return number\n    if type_name in {\"double\", \"decimal\"}:\n        lexical_value = value.strip(\" \\t\\n\\r\")\n        decimal_pattern = r\"[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)\"\n        double_pattern = decimal_pattern + r\"(?:[eE][+-]?[0-9]+)?\"\n        expected_pattern = double_pattern if type_name == \"double\" else decimal_pattern\n        if re.fullmatch(expected_pattern, lexical_value) is None:\n            raise ValueError(f\"expected {type_name}\")\n        try:\n            number = Decimal(lexical_value)\n        except InvalidOperation as error:\n            raise ValueError(f\"expected {type_name}\") from error\n        if not math.isfinite(float(number)):\n            raise ValueError(f\"expected finite {type_name}\")\n        return number\n    return value\n\n\ndef scalar_value_for_type(\n    type_name: str,\n    value: str,\n    model: SchemaModel,\n    resolving: set[str] | None = None,\n) -> Decimal | str | bool:\n    resolving = resolving or set()\n    if type_name in resolving:\n        return value\n    rule = model.simple_types.get(type_name)\n    if rule is None or rule.base is None:\n        return builtin_scalar_value(type_name, value)\n    resolving.add(type_name)\n    try:","sourceCodeStart":494,"sourceCodeEnd":530,"githubUrl":"https://github.com/larksuite/cli/blob/7fd6ef3c07182257ce776cdc5a614e122d5bd4b3/skills/lark-slides/scripts/sxsd_validator.py#L494-L530","documentation":"This ValueError is raised by builtin_scalar_value when a double/decimal value converts to a Decimal but float(number) is not finite (inf or overflow to infinity). XSD requires finite values even for xsd:double in this validator, so literals like 1e999 that overflow to float inf are rejected with 'expected finite double/decimal'.","triggerScenarios":"Validating a value like '1e999', '-1e400', or an extremely long mantissa where float() overflows to infinity while checking an xsd:double or xsd:decimal typed value.","commonSituations":"Auto-generated XML with absurd magnitudes (division results not guarded), data corrupted by unit-conversion bugs, or scientific computation output dumped verbatim into slides XML.","solutions":["Replace the value with a finite number within double range (e.g. cap at 1.7976931348623157e308 or a sane domain limit).","Fix the producer to clamp/scale computed values before serialization.","If huge magnitudes are required, retype the field in the schema or store it as a string.","Re-run the validator to confirm."],"exampleFix":"// before\n<zoom level=\"1e999\"/>\n// after\n<zoom level=\"1e300\"/>","handlingStrategy":"validation","validationCode":"import math\n\ndef is_finite_xsd_number(text):\n    try:\n        return math.isfinite(float(text))\n    except (ValueError, OverflowError):\n        return False\n\nassert is_finite_xsd_number('1e300')\nassert not is_finite_xsd_number('1e999')","typeGuard":"def finite_float(text):\n    import math\n    try:\n        f = float(text)\n    except (ValueError, OverflowError):\n        return None\n    return f if math.isfinite(f) else None","tryCatchPattern":"try:\n    value = scalar_value_for_type('double', raw)\nexcept ValueError as e:\n    print(f'value overflows to infinity, clamp it: {e}')","preventionTips":["Clamp computed values to double range before serialization.","Guard division and unit conversions that can explode magnitude.","Never dump raw scientific computation output into XML numeric attributes."],"tags":["python","xsd","overflow"],"backgroundTag":"xsd-finite-value-required","analyzedSha":"7fd6ef3c07182257ce776cdc5a614e122d5bd4b3","analyzedAt":"2026-09-04T21:17:44.649Z","contentChangedAt":"2026-09-04T21:17:44.649Z","schemaVersion":2},"datasetVersion":"2026-09-12T02:17:10.037Z"}