sqlmapproject/sqlmap · error · TimelessUnusable
payload carries no negatable comparison
Error message
payload carries no negatable comparison
What it means
Error "payload carries no negatable comparison" thrown in sqlmapproject/sqlmap.
Source
Thrown at lib/request/connect.py:1685
# is in place before any payload is built), a boolean comparison is answered by relative HTTP/2
# response order instead of wall-clock timing - orders of magnitude faster and jitter-immune, and
# it skips the time-based statistical warm-up entirely. The comparison request is assembled exactly
# as it would be sent (buildOnly) and the bit is read from a coalesced pair. Not engaged -> timing.
if timeBasedCompare and kb.get("timeless") is not None:
from lib.request.timeless import CONNECTIVITY_ERRORS
from lib.request.timeless import TimelessUnusable
from lib.request.timeless import disengage
from lib.request.timeless import negatePayload
# Build the condition and negation requests through the SAME path (queryPage buildOnly on the
# raw pre-placement value) so the pair differs ONLY by the negated comparison - building cond
# from the already-placed uri/get/post while neg goes through fresh placement would make them
# non-corresponding and flip the order.
negValue = negatePayload(timelessOrigValue)
try:
if negValue is None:
# No sentinels (a tamper script mangled them, or a non-timeless vector slipped through):
# the symmetric oracle cannot be built, and there is no calibrated alternative reading.
raise TimelessUnusable("payload carries no negatable comparison")
condSpec = Connect.queryPage(timelessOrigValue, place=place, buildOnly=True)
negSpec = Connect.queryPage(negValue, place=place, buildOnly=True)
return kb.timeless.readBitFromSpecs(condSpec, negSpec)
except CONNECTIVITY_ERRORS as ex:
# Either the oracle can no longer be trusted (a fresh connection failed calibration, the
# responses drifted off the calibrated control) or the target stopped negotiating HTTP/2
# altogether. Disengage - which restores the classic time-based vector - and answer this
# comparison the wall-clock way instead of crashing the scan. The payload in flight was
# forged from the heavy (millisecond) vector, so it has to be re-forged onto the restored
# one first: re-sending it as-is would read False whatever the truth.
warnMsg = "HTTP/2 timeless timing is no longer reliable ('%s'). Falling back to classic time-based" % getSafeExString(ex)
singleTimeWarnMessage(warnMsg)
disengage()
# Re-run this comparison the wall-clock way. The payload in flight was forged from the
# heavy (millisecond) vector, so re-sending it as-is would read False whatever the truth -
# the straggler rewrite at the top of queryPage puts it back on the restored vector, the
# same way it will handle the rest of this value.
if kb.get("timelessRestore"):View on GitHub (pinned to 0a35b20e39)
When it happens
Trigger: Thrown at lib/request/connect.py:1685 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of sqlmapproject/sqlmap@0a35b20e39 (2026-08-26).
Data as JSON: /api/errors/6004e5e45a7d909d.
Report an issue: GitHub.