From 9f3bd2994c30df430c1aef5a8d6893ce61ee3f43 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 8 Oct 2007 22:07:16 +0000 Subject: [PATCH] Faster test for overflow in str2txid, from Marko. --- contrib/txid/txid.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) 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;