fixed search term parser for empty terms

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/utils/FtsUtils.java | 22 +++++++++
1 file changed, 20 insertions(+), 2 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/utils/FtsUtils.java 🔗

@@ -34,6 +34,7 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
 
+
 public class FtsUtils {
 
 	private static List<String> KEYWORDS = Arrays.asList("OR", "AND");
@@ -44,10 +45,10 @@ public class FtsUtils {
 			if (part.isEmpty()) {
 				continue;
 			}
-			final String cleaned = part.substring(getStartIndex(part), getEndIndex(part) +1);
+			final String cleaned = clean(part);
 			if (isKeyword(cleaned)) {
 				term.add(part);
-			} else {
+			} else if (!cleaned.isEmpty()) {
 				term.add(cleaned);
 			}
 		}
@@ -76,9 +77,13 @@ public class FtsUtils {
 	}
 
 	private static int getStartIndex(String term) {
+		int length = term.length();
 		int index = 0;
 		while (term.charAt(index) == '*') {
 			++index;
+			if (index >= length) {
+				break;
+			}
 		}
 		return index;
 	}
@@ -87,8 +92,21 @@ public class FtsUtils {
 		int index = term.length() - 1;
 		while (term.charAt(index) == '*') {
 			--index;
+			if (index < 0) {
+				break;
+			}
 		}
 		return index;
 	}
 
+	private static String clean(String input) {
+		int begin = getStartIndex(input);
+		int end = getEndIndex(input);
+		if (begin > end) {
+			return "";
+		} else {
+			return input.substring(begin, end + 1);
+		}
+	}
+
 }