{"record":{"id":"63b00cd0d1d360fb","repo":"NationalSecurityAgency/ghidra","slug":"max-out-of-range-of-int64","errorCode":null,"errorMessage":"max out of range of int64","messagePattern":"max out of range of int64","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"Ghidra/Debug/Debugger-rmi-trace/src/main/py/src/ghidratrace/client.py","lineNumber":118,"sourceCode":"\n    def length(self) -> int:\n        return self.max - self.min + 1\n\n\nLIFESPAN_MIN = -1 << 63\nLIFESPAN_MAX = (1 << 63) - 1\n\n\n@dataclass(frozen=True)\nclass Lifespan:\n    min: int = LIFESPAN_MIN\n    max: int = LIFESPAN_MAX\n\n    def __post_init__(self) -> None:\n        if self.min < LIFESPAN_MIN:\n            raise ValueError(\"min out of range of int64\")\n        if self.max > LIFESPAN_MAX:\n            raise ValueError(\"max out of range of int64\")\n        if self.min > self.max and not (self.min == 0 and self.max == -1):\n            raise ValueError(\"min cannot exceed max\")\n\n    def is_empty(self) -> bool:\n        return self.min == 0 and self.max == -1\n\n    def __str__(self) -> str:\n        if self.is_empty():\n            return \"(EMPTY)\"\n        min = '(-inf' if self.min == LIFESPAN_MIN else f'[{self.min}'\n        max = '+inf)' if self.max == LIFESPAN_MAX else f'{self.max}]'\n        return f'{min},{max}'\n\n    def __repr__(self) -> str:\n        return 'Lifespan' + self.__str__()\n\n\n@dataclass","sourceCodeStart":100,"sourceCodeEnd":136,"githubUrl":"https://github.com/NationalSecurityAgency/ghidra/blob/d5f144c24d6bc53c9cbf4448c6d11143e7696206/Ghidra/Debug/Debugger-rmi-trace/src/main/py/src/ghidratrace/client.py#L100-L136","documentation":"Thrown by the Python ghidratrace Lifespan dataclass's __post_init__ when the `max` field exceeds LIFESPAN_MAX (2**63 - 1, the largest signed 64-bit value). Snap numbers are int64 on the wire, so the client rejects out-of-range values.","triggerScenarios":"Constructing Lifespan(max=...) with a value greater than 9223372036854775807, e.g. from arithmetic that overflows int64 or from an unbounded/very large value.","commonSituations":"Adding a large delta to a snap that overflows; passing sys.maxsize or a Python arbitrary-precision int that exceeds int64; using a far-future snap.","solutions":["Clamp max to LIFESPAN_MAX (module constant) before constructing the Lifespan.","If you want an open-ended upper bound, pass LIFESPAN_MAX explicitly instead of a huge computed number.","Re-check the snap arithmetic for overflow."],"exampleFix":"# before\nspan = Lifespan(min=0, max=base_snap + huge_delta)\n\n# after\nfrom ghidratrace.client import LIFESPAN_MAX\nhi = min(base_snap + huge_delta, LIFESPAN_MAX)\nspan = Lifespan(min=0, max=hi)","handlingStrategy":"validation","validationCode":"from ghidratrace.client import LIFESPAN_MAX, Lifespan\nhi = min(value, LIFESPAN_MAX)\nspan = Lifespan(min=LIFESPAN_MIN, max=hi)","typeGuard":"def valid_max(v: int) -> bool:\n    from ghidratrace.client import LIFESPAN_MAX\n    return v <= LIFESPAN_MAX","tryCatchPattern":"try:\n    span = Lifespan(min=lo, max=hi)\nexcept ValueError:\n    hi = min(hi, LIFESPAN_MAX)\n    span = Lifespan(min=lo, max=hi)","preventionTips":["Clamp snap values to int64 bounds before constructing Lifespan.","Pass LIFESPAN_MAX explicitly for open-ended upper bounds.","Re-check snap arithmetic for overflow."],"tags":["python","lifespan","int64","validation","trace-rmi"],"backgroundTag":null,"analyzedSha":"d5f144c24d6bc53c9cbf4448c6d11143e7696206","analyzedAt":"2026-08-14T01:00:57.564Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}