From 4e71240dbb64b08d16e41ebf60898602124b303d Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Tue, 4 Jul 2000 06:29:27 +0000
Subject: [PATCH] Now that I look at it, is_stopword() is broken and always has
 been. Doesn't anyone remember how to program a binary search??

---
 contrib/fulltextindex/fti.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/contrib/fulltextindex/fti.c b/contrib/fulltextindex/fti.c
index be4522321d7..a98fcd47dc7 100644
--- a/contrib/fulltextindex/fti.c
+++ b/contrib/fulltextindex/fti.c
@@ -351,10 +351,9 @@ is_stopword(char *text)
 	StopLow = &StopWords[0];	/* initialize stuff for binary search */
 	StopHigh = endof(StopWords);
 
-	if (lengthof(StopWords) == 0)
-		return false;
+	/* Loop invariant: *StopLow <= text < *StopHigh */
 
-	while (StopLow <= StopHigh)
+	while (StopLow < StopHigh)
 	{
 		StopMiddle = StopLow + (StopHigh - StopLow) / 2;
 		difference = strcmp(*StopMiddle, text);
@@ -363,7 +362,7 @@ is_stopword(char *text)
 		else if (difference < 0)
 			StopLow = StopMiddle + 1;
 		else
-			StopHigh = StopMiddle - 1;
+			StopHigh = StopMiddle;
 	}
 
 	return (false);
-- 
GitLab