sqlmapproject/sqlmap · error · OracleUndecided

host oracle undecided: %s

Error message

host oracle undecided: %s

What it means

Error "host oracle undecided: %s" thrown in sqlmapproject/sqlmap.

Source

Thrown at extra/esperanto/engine.py:98

    It covers the char-comparison modes (code / collation / ordinal / equality) with an
    ordered comparator. Pattern-only (LIKE floor) and pure membership (no ordered
    comparator) are NOT driven by this reference - it raises rather than silently
    emitting an operator the dialect declared unusable or returning wrong data.

    Returns an ExtractResult (value / exact / truncated / integrity), NOT a bare string:
    an undecided host observation degrades to a FAILED result (never a manufactured bit),
    a value longer than maxlen is flagged TRUNCATED, and a code-mode value read through an
    UNPROVEN char-code fn is whole-value verified so a lossy code fn is caught (integrity
    FAILED), exactly as the native engine does - so this stays a faithful sufficiency proof."""
    HUGE = 1 << 62

    def ask(cond):
        # STRICT tri-state, like _OracleCore._ask: only a real bool is an observation; anything
        # else (None from a transport/undecided oracle) is NOT coerced to False.
        r = oracle(cond)
        if r is True or r is False:
            return r
        raise OracleUndecided("host oracle undecided: %s" % cond)

    if strategy.compare_mode == "like" or (strategy.substring is None and strategy.length is None):
        raise NotImplementedError("hostExtract: pattern-only extraction is not driven by this reference")
    if strategy.comparator == "membership":
        raise NotImplementedError("hostExtract: an ordered comparator is required (membership-only unsupported)")

    def _run():
        if strategy.length is not None:
            L = strategy.renderLength(expr)
            if not ask(strategy.renderGt(L, -1, HUGE)):     # L >= 0: defined and non-negative
                is_null = ask(strategy.renderIsNull(expr))  # ask ONCE (a noisy oracle could disagree twice)
                return ExtractResult(None, is_null=is_null, complete=is_null)
            if maxlen <= 0:                                 # non-empty but capped to nothing
                return ExtractResult("", complete=False, truncated=True)
            if not ask(strategy.renderGt(L, 0, HUGE)):      # not L > 0 -> empty string
                return ExtractResult("", complete=True)
            lo, hi = 1, min(8, maxlen)
            while hi < maxlen and ask(strategy.renderGt(L, hi, HUGE)):

View on GitHub (pinned to 0a35b20e39)

When it happens

Trigger: Thrown at extra/esperanto/engine.py:98 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/21c46c411e839b43. Report an issue: GitHub.