{"record":{"id":"21c46c411e839b43","repo":"sqlmapproject/sqlmap","slug":"host-oracle-undecided-s","errorCode":null,"errorMessage":"host oracle undecided: %s","messagePattern":"host oracle undecided: (.+?)","errorType":"exception","errorClass":"OracleUndecided","httpStatus":null,"severity":"error","filePath":"extra/esperanto/engine.py","lineNumber":98,"sourceCode":"    It covers the char-comparison modes (code / collation / ordinal / equality) with an\n    ordered comparator. Pattern-only (LIKE floor) and pure membership (no ordered\n    comparator) are NOT driven by this reference - it raises rather than silently\n    emitting an operator the dialect declared unusable or returning wrong data.\n\n    Returns an ExtractResult (value / exact / truncated / integrity), NOT a bare string:\n    an undecided host observation degrades to a FAILED result (never a manufactured bit),\n    a value longer than maxlen is flagged TRUNCATED, and a code-mode value read through an\n    UNPROVEN char-code fn is whole-value verified so a lossy code fn is caught (integrity\n    FAILED), exactly as the native engine does - so this stays a faithful sufficiency proof.\"\"\"\n    HUGE = 1 << 62\n\n    def ask(cond):\n        # STRICT tri-state, like _OracleCore._ask: only a real bool is an observation; anything\n        # else (None from a transport/undecided oracle) is NOT coerced to False.\n        r = oracle(cond)\n        if r is True or r is False:\n            return r\n        raise OracleUndecided(\"host oracle undecided: %s\" % cond)\n\n    if strategy.compare_mode == \"like\" or (strategy.substring is None and strategy.length is None):\n        raise NotImplementedError(\"hostExtract: pattern-only extraction is not driven by this reference\")\n    if strategy.comparator == \"membership\":\n        raise NotImplementedError(\"hostExtract: an ordered comparator is required (membership-only unsupported)\")\n\n    def _run():\n        if strategy.length is not None:\n            L = strategy.renderLength(expr)\n            if not ask(strategy.renderGt(L, -1, HUGE)):     # L >= 0: defined and non-negative\n                is_null = ask(strategy.renderIsNull(expr))  # ask ONCE (a noisy oracle could disagree twice)\n                return ExtractResult(None, is_null=is_null, complete=is_null)\n            if maxlen <= 0:                                 # non-empty but capped to nothing\n                return ExtractResult(\"\", complete=False, truncated=True)\n            if not ask(strategy.renderGt(L, 0, HUGE)):      # not L > 0 -> empty string\n                return ExtractResult(\"\", complete=True)\n            lo, hi = 1, min(8, maxlen)\n            while hi < maxlen and ask(strategy.renderGt(L, hi, HUGE)):","sourceCodeStart":80,"sourceCodeEnd":116,"githubUrl":"https://github.com/sqlmapproject/sqlmap/blob/0a35b20e3953d341be6c7ac75ccb0b3362540c8d/extra/esperanto/engine.py#L80-L116","documentation":"Error \"host oracle undecided: %s\" thrown in sqlmapproject/sqlmap.","triggerScenarios":"Thrown at extra/esperanto/engine.py:98 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"0a35b20e3953d341be6c7ac75ccb0b3362540c8d","analyzedAt":"2026-08-26T23:02:52.002Z","schemaVersion":2},"datasetVersion":"2026-08-27T03:17:27.898Z"}