{"record":{"id":"e4300579a71d5049","repo":"sqlmapproject/sqlmap","slug":"hostextract-an-ordered-comparator-is-required-me","errorCode":null,"errorMessage":"hostExtract: an ordered comparator is required (membership-only unsupported)","messagePattern":"hostExtract: an ordered comparator is required \\(membership-only unsupported\\)","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"extra/esperanto/engine.py","lineNumber":103,"sourceCode":"    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)):\n                lo, hi = hi + 1, min(hi * 2, maxlen)\n            while lo < hi:\n                mid = (lo + hi) // 2\n                lo, hi = (mid + 1, hi) if ask(strategy.renderGt(L, mid, HUGE)) else (lo, mid)\n            length = lo","sourceCodeStart":85,"sourceCodeEnd":121,"githubUrl":"https://github.com/sqlmapproject/sqlmap/blob/0a35b20e3953d341be6c7ac75ccb0b3362540c8d/extra/esperanto/engine.py#L85-L121","documentation":"Error \"hostExtract: an ordered comparator is required (membership-only unsupported)\" thrown in sqlmapproject/sqlmap.","triggerScenarios":"Thrown at extra/esperanto/engine.py:103 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"}