diff --git a/keyserver/src/database/search-utils.js b/keyserver/src/database/search-utils.js --- a/keyserver/src/database/search-utils.js +++ b/keyserver/src/database/search-utils.js @@ -142,6 +142,10 @@ } const stemmedQuery = segmentAndStem(query); + if (stemmedQuery === '') { + return ''; + } + return stemmedQuery .split(' ') .filter(word => !fulltextOperands.includes(word)) diff --git a/keyserver/src/database/search-utils.test.js b/keyserver/src/database/search-utils.test.js --- a/keyserver/src/database/search-utils.test.js +++ b/keyserver/src/database/search-utils.test.js @@ -65,4 +65,9 @@ it('should remove + < > ~ from the query', () => { expect(processQueryForSearch('+ < > ~')).toBe(''); }); + it('should return an empty string, if the input consists only of stopwords', () => { + const [stopWord1, stopWord2, stopWord3] = stopwords; + expect(processQueryForSearch(stopWord1)).toBe(''); + expect(segmentAndStem(`${stopWord1} ${stopWord2} ${stopWord3}`)).toBe(''); + }); }); diff --git a/keyserver/src/fetchers/message-fetchers.js b/keyserver/src/fetchers/message-fetchers.js --- a/keyserver/src/fetchers/message-fetchers.js +++ b/keyserver/src/fetchers/message-fetchers.js @@ -919,6 +919,13 @@ } const pattern = processQueryForSearch(inputQuery); + if (pattern === '') { + return { + endReached: true, + messages: [], + }; + } + const query = SQL` SELECT m.id, m.thread AS threadID, m.content, m.time, m.type, m.creation, m.user AS creatorID, m.target_message as targetMessageID,