sqlmapproject/sqlmap · error · OverflowError

integer below minimum -%d

Error message

integer below minimum -%d

What it means

Error "integer below minimum -%d" thrown in sqlmapproject/sqlmap.

Source

Thrown at extra/esperanto/extraction.py:659

        # transition. The `high` arg to _gtNum MUST exceed any possible value (BETWEEN renders
        # `expr BETWEEN n+1 AND high`; using `cap` there made every over-cap positive read as
        # an empty range -> misclassified NEGATIVE, reporting "below minimum" for an above-max
        # value). Use HUGE as the range ceiling everywhere; `cap` is only the overflow threshold.
        HUGE = 1 << 62
        if self._gtNum(expr, -1, HUGE):                 # expr > -1  <=>  expr >= 0 (any magnitude)
            if self._gtNum(expr, cap, HUGE):            # expr > cap  -> ABOVE maximum
                raise OverflowError("integer exceeds maximum %d" % cap)
            lo, hi = -1, 1
            while hi < cap and self._gtNum(expr, hi, HUGE):
                lo, hi = hi, min(hi * 2 + 1, cap)
        else:                                           # not in [0, HUGE]
            # BETWEEN's sign test caps at HUGE, so a positive value ABOVE HUGE also lands here.
            # distinguish it from a genuine negative before reporting a direction (a gt/operator-
            # free sign test is unbounded, so its else-branch is truly negative and skips this).
            if self._comparator == "between" and not self._ask("(%s) BETWEEN %d AND %d" % (expr, -HUGE, -1)):
                raise OverflowError("integer magnitude exceeds representable range (+/-%d), direction unknown" % HUGE)
            if not self._gtNum(expr, -cap - 1, HUGE):   # expr <= -cap-1 -> BELOW minimum
                raise OverflowError("integer below minimum -%d" % cap)
            hi, lo = -1, -2
            while lo > -cap and not self._gtNum(expr, lo, HUGE):
                hi, lo = lo, lo * 2
            lo = max(lo, -cap - 1)
        # invariant: expr > lo is True, expr > hi is False -> value is the transition in (lo, hi]
        while hi - lo > 1:
            mid = (lo + hi) // 2
            if self._gtNum(expr, mid, HUGE):
                lo = mid
            else:
                hi = mid
        # FINAL INDEPENDENT CHECK: bisection trusts the comparator, which is only PROVEN on
        # integer literals - a backend/WAF that honours '>' on literals but rewrites it (e.g. to
        # '>=') for scalar-subquery / fn / arithmetic operands would converge off-by-one. Confirm
        # the result with a direct equality against the ACTUAL expression; if it isn't decisively
        # true the read is invalid -> fail closed (never return a silently-wrong count/length/id).
        if not self._ask("(%s)=%d" % (expr, hi)):
            raise OracleUndecided("integer read failed final equality check: (%s) != %d" % (expr, hi))

View on GitHub (pinned to 0a35b20e39)

When it happens

Trigger: Thrown at extra/esperanto/extraction.py:659 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of sqlmapproject/sqlmap@0a35b20e39 (2026-08-26). Data as JSON: /api/errors/7e642f82d6afee66. Report an issue: GitHub.