{"record":{"id":"1a9059fa9d0771b8","repo":"larksuite/cli","slug":"expected-non-negative-integer","errorCode":null,"errorMessage":"expected non-negative integer","messagePattern":"expected non-negative integer","errorType":"validation","errorClass":"ArithmeticError","httpStatus":null,"severity":"error","filePath":"skills/lark-slides/scripts/sxsd_validator.py","lineNumber":498,"sourceCode":"        result[\"attr\"] = attr\n    return result\n\n\ndef builtin_scalar_value(type_name: str, value: str) -> Decimal | str | bool:\n    if type_name in {\"string\", \"anyURI\"}:\n        return value\n    if type_name == \"boolean\":\n        if value not in {\"true\", \"false\", \"1\", \"0\"}:\n            raise ValueError(\"expected boolean\")\n        return value in {\"true\", \"1\"}\n    if type_name in {\"integer\", \"positiveInteger\", \"nonNegativeInteger\"}:\n        if re.fullmatch(r\"[+-]?\\d+\", value) is None:\n            raise ValueError(\"expected integer\")\n        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","sourceCodeStart":480,"sourceCodeEnd":516,"githubUrl":"https://github.com/larksuite/cli/blob/7fd6ef3c07182257ce776cdc5a614e122d5bd4b3/skills/lark-slides/scripts/sxsd_validator.py#L480-L516","documentation":"This ArithmeticError is raised by builtin_scalar_value when a value typed xsd:nonNegativeInteger is negative. XSD allows 0 but forbids negative integers for this type. The validator checks the value space after confirming the lexical form is a valid integer.","triggerScenarios":"Calling scalar_value_for_type with type_name='nonNegativeInteger' and a value such as '-1', '-100', or '-0x...' style negative literals (after lexical integer check passes).","commonSituations":"Generated slides XML where an offset, count, or dimension went negative due to unsigned arithmetic underflow in the producer; subtracting more than available; copy-paste edits introducing minus signs.","solutions":["Replace the negative value with 0 or a positive integer as appropriate for the field.","Verify upstream producer logic cannot emit negative values for this attribute (guard/clamp at generation).","If negative values are meaningful, change the schema type to xsd:integer.","Re-run the validator to confirm."],"exampleFix":"// before\noffset=\"-2\"\n// after\noffset=\"0\"","handlingStrategy":"validation","validationCode":"def is_non_negative_integer(text):\n    import re\n    return bool(re.fullmatch(r'[+-]?\\d+', text)) and int(text) >= 0\n\nif not is_non_negative_integer(attr_value):\n    raise ValueError(f'attribute must be >= 0, got {attr_value!r}')","typeGuard":"def as_non_negative_int(text):\n    try:\n        n = int(text)\n    except ValueError:\n        return None\n    return n if n >= 0 else None","tryCatchPattern":"try:\n    value = scalar_value_for_type('nonNegativeInteger', raw)\nexcept ArithmeticError as e:\n    print(f'clamp to 0: {e}')","preventionTips":["Clamp computed offsets with max(0, n) before writing XML.","Avoid signed underflow when subtracting lengths/offsets in producers.","Validate generated XML attributes in CI with the schema validator."],"tags":["python","xsd","validation"],"backgroundTag":"xsd-non-negative-integer-violation","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"}