{"record":{"id":"fd0557e69eed9cb7","repo":"sqlmapproject/sqlmap","slug":"host-length-failed-final-equality","errorCode":null,"errorMessage":"host length failed final equality","messagePattern":"host length failed final equality","errorType":"exception","errorClass":"OracleUndecided","httpStatus":null,"severity":"error","filePath":"extra/esperanto/engine.py","lineNumber":127,"sourceCode":"                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\n            truncated = length >= maxlen and ask(strategy.renderGt(L, maxlen, HUGE))   # a char past the cap\n            # FINAL EQUALITY (as the native integer reader does): the comparator is proven only on\n            # literals; a backend that rewrites '>' to '>=' for a computed operand (LENGTH(..)>n)\n            # converges off-by-one. Confirm the length directly, else fail closed.\n            if not truncated and not ask(\"(%s)=%d\" % (L, length)):\n                raise OracleUndecided(\"host length failed final equality\")\n        else:                                               # no length fn: derive from substring end\n            exists = lambda n: ask(strategy.renderCharExists(expr, n))\n            if not exists(1):\n                is_null = ask(strategy.renderIsNull(expr))  # ask ONCE\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            lo, hi = 1, min(8, maxlen)\n            while hi < maxlen and exists(hi):\n                lo, hi = hi, min(hi * 2, maxlen)\n            while lo < hi:\n                mid = (lo + hi + 1) // 2\n                lo, hi = (mid, hi) if exists(mid) else (lo, mid - 1)\n            length = lo\n            truncated = length >= maxlen and exists(maxlen + 1)\n\n        def read(pos):\n            mode = strategy.compare_mode","sourceCodeStart":109,"sourceCodeEnd":145,"githubUrl":"https://github.com/sqlmapproject/sqlmap/blob/0a35b20e3953d341be6c7ac75ccb0b3362540c8d/extra/esperanto/engine.py#L109-L145","documentation":"Error \"host length failed final equality\" thrown in sqlmapproject/sqlmap.","triggerScenarios":"Thrown at extra/esperanto/engine.py:127 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"}