{"record":{"id":"9d1ef1eead31b6ad","repo":"sqlmapproject/sqlmap","slug":"s-not-in-d-d","errorCode":null,"errorMessage":"%s not in [%d,%d]","messagePattern":"(.+?) not in \\[(.+?),(.+?)\\]","errorType":"exception","errorClass":"NumericOutOfRange","httpStatus":null,"severity":"error","filePath":"extra/esperanto/extraction.py","lineNumber":172,"sourceCode":"        saturates to `hi`, BETWEEN converges to a wrong SMALL value) - so an\n        out-of-range value raises NumericOutOfRange for the caller to classify\n        (length -> truncated, integer -> overflow) instead of returning wrong data.\"\"\"\n        if self._comparator == \"membership\":\n            if self._inOk:\n                window = 128\n                base = lo\n                while base <= hi:\n                    win = list(range(base, min(base + window, hi + 1)))\n                    if self._ask(\"%s IN (%s)\" % (expr, \",\".join(str(v) for v in win))):\n                        while len(win) > 1:\n                            half = win[:len(win) // 2]\n                            if self._ask(\"%s IN (%s)\" % (expr, \",\".join(str(v) for v in half))):\n                                win = half\n                            else:\n                                win = win[len(win) // 2:]\n                        return win[0]\n                    base += window\n                raise NumericOutOfRange(\"%s not in [%d,%d]\" % (expr, lo, hi))\n            for v in range(lo, hi + 1):             # no ordered op and no IN: '=' scan\n                if self._ask(\"%s=%d\" % (expr, v)):\n                    return v\n            raise NumericOutOfRange(\"%s not in [%d,%d]\" % (expr, lo, hi))\n        # ordered comparators (gt / between / operator-free rung): prove range first\n        if self._comparator == \"between\":\n            if not self._ask(\"%s BETWEEN %d AND %d\" % (expr, lo, hi)):\n                raise NumericOutOfRange(\"%s not in [%d,%d]\" % (expr, lo, hi))\n        else:                                       # gt or operator-free rung ('>' semantics)\n            if self._gtNum(expr, hi, hi):\n                raise NumericOutOfRange(\"%s > %d\" % (expr, hi))\n            if not self._gtNum(expr, lo - 1, hi):   # expr <= lo-1 -> below range (any sign of lo)\n                raise NumericOutOfRange(\"%s < %d\" % (expr, lo))\n        low, high = lo, min(max(lo, 8), hi)         # exponential climb keeps small values cheap\n        while high < hi and self._gtNum(expr, high, hi):\n            low, high = high + 1, min(high * 2, hi)\n        while low < high:\n            mid = (low + high) // 2","sourceCodeStart":154,"sourceCodeEnd":190,"githubUrl":"https://github.com/sqlmapproject/sqlmap/blob/0a35b20e3953d341be6c7ac75ccb0b3362540c8d/extra/esperanto/extraction.py#L154-L190","documentation":"Membership window scan in _readNum exhausted the whole [lo,hi] range without an IN-match, and the fallback '=' scan also found nothing. The value genuinely lies outside the probed bounds (or the oracle lied), so NumericOutOfRange is raised for the caller to classify as truncated length or integer overflow.","triggerScenarios":"Thrown at extra/esperanto/extraction.py:172 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Widen the [lo,hi] bounds and retry the read","Classify per call site: length -> truncated result, integer -> overflow","Verify oracle consistency if values should have been in range"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"0a35b20e3953d341be6c7ac75ccb0b3362540c8d","analyzedAt":"2026-08-26T23:02:52.002Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}