{"record":{"id":"a6df71365ab5bbae","repo":"sqlmapproject/sqlmap","slug":"oracle-must-be-callable","errorCode":null,"errorMessage":"oracle must be callable","messagePattern":"oracle must be callable","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"extra/esperanto/engine.py","lineNumber":36,"sourceCode":"from .extraction import _Extraction\nfrom .enumeration import _Enumeration\n\n\nclass Esperanto(_OracleCore, _Discovery, _Extraction, _Enumeration):\n    \"\"\"DBMS-agnostic blind extractor. Behaviour lives in four mixins by concern\n    (oracle / discovery / extraction / enumeration); this class only holds\n    construction + the query counter.\"\"\"\n\n    def __init__(self, oracle, verbose=False, maxlen=4096, retries=1, quorum=1,\n                 maxbytes=None, max_queries=None):\n        \"\"\"oracle: callable(condition_str) -> bool.\n        quorum>1 turns on majority voting (2*quorum-1 samples) so a noisy or\n        intermittently-erroring oracle can't flip a single probe and corrupt a\n        result; retries re-attempts a raised call before it counts as an error.\n        maxlen caps text characters; maxbytes separately caps byte/hex recovery\n        (default 4*maxlen); max_queries is an optional hard oracle-call ceiling.\"\"\"\n        if not callable(oracle):\n            raise TypeError(\"oracle must be callable\")\n        self.oracle = oracle\n        self.verbose = verbose\n        self.maxlen = maxlen\n        self.maxbytes = maxlen * 4 if maxbytes is None else maxbytes\n        self.retries = retries\n        self.quorum = max(1, quorum)\n        self.max_queries = max_queries\n        self.dialect = Dialect()\n        self._queries = 0\n        self._errors = 0\n        self._hexProbed = False\n        self._hexOrdered = None\n        self._backslashEscape = None\n        self._codeTmpl = None\n        self._comparator = \"gt\"         # ordered-compare op: \"gt\" / \"between\" / operator-free rung / \"membership\"\n        self._cmpTemplate = None        # operator-free ordered rung: an \"expr > n\" template with {expr}/{n}\n        self._inOk = True               # IN(...) usable (order-free subset bisection)\n        self._lastTruncated = False","sourceCodeStart":18,"sourceCodeEnd":54,"githubUrl":"https://github.com/sqlmapproject/sqlmap/blob/0a35b20e3953d341be6c7ac75ccb0b3362540c8d/extra/esperanto/engine.py#L18-L54","documentation":"Error \"oracle must be callable\" thrown in sqlmapproject/sqlmap.","triggerScenarios":"Thrown at extra/esperanto/engine.py:36 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"}