From 1bbe55c79f8c9d7b97f89e5e32482c5280658cbf Mon Sep 17 00:00:00 2001
From: Jan Wieck <JanWieck@Yahoo.com>
Date: Mon, 4 Jan 1999 17:51:58 +0000
Subject: [PATCH] Just one more bugfix - this time in cmp_abs (cannot imagine
 that taking a logarithm with a 400 digit precision worked with that bug in
 place).

Jan
---
 src/backend/utils/adt/numeric.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index 3d7a17e30e..34a7b39431 100644
--- a/src/backend/utils/adt/numeric.c
+++ b/src/backend/utils/adt/numeric.c
@@ -5,7 +5,7 @@
  *
  *	1998 Jan Wieck
  *
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.7 1999/01/04 12:53:23 wieck Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.8 1999/01/04 17:51:58 wieck Exp $
  *
  * ----------
  */
@@ -3438,25 +3438,28 @@ cmp_abs(NumericVar *var1, NumericVar *var2)
 	int		w2 = var2->weight;
 	int		stat;
 
-	while (w1 > w2)
+	while (w1 > w2 && i1 < var1->ndigits)
 	{
 		if (var1->digits[i1++] != 0) return 1;
 		w1--;
 	}
-	while (w2 > w1)
+	while (w2 > w1 && i2 < var2->ndigits)
 	{
 		if (var2->digits[i2++] != 0) return -1;
 		w2--;
 	}
 
-	while (i1 < var1->ndigits && i2 < var2->ndigits)
+	if (w1 == w2)
 	{
-		stat = var1->digits[i1++] - var2->digits[i2++];
-		if (stat)
+		while (i1 < var1->ndigits && i2 < var2->ndigits)
 		{
-			if (stat > 0)
-				return 1;
-			return -1;
+			stat = var1->digits[i1++] - var2->digits[i2++];
+			if (stat)
+			{
+				if (stat > 0)
+					return 1;
+				return -1;
+			}
 		}
 	}