susimail: Fix searches for multiple terms

by decoding and trimming search param,
and stripping empty fields after split()
This commit is contained in:
zzz
2024-08-09 09:40:15 -04:00
parent 5a3a7b24af
commit 46e429cd49

View File

@@ -2572,6 +2572,8 @@ public class WebMail extends HttpServlet
} }
response.setContentType("text/html"); response.setContentType("text/html");
String search = httpRequest.getParameter(SEARCH); String search = httpRequest.getParameter(SEARCH);
if (search != null && search.length() > 0)
search = decodePath(search).trim();
if (_log.shouldDebug()) _log.debug("XHR1 search=" + search); if (_log.shouldDebug()) _log.debug("XHR1 search=" + search);
if (search != null && search.length() > 0) { if (search != null && search.length() > 0) {
Folder.Selector olds = folder.getCurrentSelector(); Folder.Selector olds = folder.getCurrentSelector();
@@ -2588,6 +2590,8 @@ public class WebMail extends HttpServlet
return; return;
} }
String search = httpRequest.getParameter(SEARCH); String search = httpRequest.getParameter(SEARCH);
if (search != null && search.length() > 0)
search = decodePath(search).trim();
if (_log.shouldDebug()) _log.debug("XHR2 search=" + search); if (_log.shouldDebug()) _log.debug("XHR2 search=" + search);
if (search != null && search.length() > 0) { if (search != null && search.length() > 0) {
Folder.Selector olds = folder.getCurrentSelector(); Folder.Selector olds = folder.getCurrentSelector();
@@ -2830,6 +2834,21 @@ public class WebMail extends HttpServlet
} // synch sessionObject } // synch sessionObject
} }
/**
* Simple version of URIUtil.decodePath()
* Adapted from I2PSnark BasicServlet
* @since 0.9.63
*/
private static String decodePath(String path) {
if (path.indexOf('%') >= 0) {
try {
URI uri = new URI(path);
return uri.getPath();
} catch (URISyntaxException use) {}
}
return path;
}
/** /**
* Redirect a POST to a GET (P-R-G), replacing the query string * Redirect a POST to a GET (P-R-G), replacing the query string
* @param q starting with '?' or null * @param q starting with '?' or null
@@ -3839,7 +3858,7 @@ public class WebMail extends HttpServlet
private static class SearchSelector implements Folder.Selector<String> { private static class SearchSelector implements Folder.Selector<String> {
private final String key; private final String key;
private final MailCache mc; private final MailCache mc;
private final String[] terms; private final List<String> terms;
private final boolean isDrafts; private final boolean isDrafts;
/** /**
@@ -3849,10 +3868,11 @@ public class WebMail extends HttpServlet
mc = cache; mc = cache;
isDrafts = mc.getFolderName().equals(DIR_DRAFTS); isDrafts = mc.getFolderName().equals(DIR_DRAFTS);
key = search; key = search;
terms = DataHelper.split(search, " "); String[] tms = DataHelper.split(search, " ");
// decode terms = new ArrayList<String>(4);
for (int i = 0; i < terms.length; i++) { for (int i = 0; i < tms.length; i++) {
terms[i] = Normalizer.normalize(terms[i].toLowerCase(Locale.US), Normalizer.Form.NFKD); if (tms[i].length() > 0)
terms.add(Normalizer.normalize(tms[i].toLowerCase(Locale.US), Normalizer.Form.NFKD));
} }
} }