diff --git a/contrib/txid/txid.c b/contrib/txid/txid.c index 606fb40040..015e1fb936 100644 --- a/contrib/txid/txid.c +++ b/contrib/txid/txid.c @@ -234,24 +234,27 @@ static txid str2txid(const char *s, const char **endp) { txid val = 0; + txid cutoff = MAX_TXID / 10; + txid cutlim = MAX_TXID % 10; for (; *s; s++) { - txid last = val; + unsigned d; if (*s < '0' || *s > '9') break; - - val = val * 10 + (*s - '0'); + d = *s - '0'; /* * check for overflow */ - if (val > MAX_TXID || (val / 10) != last) + if (val > cutoff || (val == cutoff && d > cutlim)) { val = 0; break; } + + val = val * 10 + d; } if (endp) *endp = s;