From 2a1ef30b5779edb9acd1bb69e9d4f4e1c7889f9e Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri, 14 Mar 2003 00:15:32 +0000
Subject: [PATCH] Prevent infinite loop in ln_var() due to roundoff error. Per
 report from Dave Marin.

---
 src/backend/utils/adt/numeric.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index 1a21500a8b0..2214f570d6d 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.57 2003/03/11 21:01:33 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.58 2003/03/14 00:15:32 tgl Exp $
  *
  * ----------
  */
@@ -3872,6 +3872,9 @@ ln_var(NumericVar *arg, NumericVar *result)
 			break;
 
 		add_var(result, &elem, result);
+
+		if (elem.weight < (result->weight - 2 * global_rscale))
+			break;
 	}
 
 	/* Compensate for argument range reduction, round to caller's rscale */
-- 
GitLab