From 9f3bd2994c30df430c1aef5a8d6893ce61ee3f43 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
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 606fb40040b..015e1fb9368 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;
-- 
GitLab