From 3f37abaed3ca7819dba0434a0d536fee4a885ceb Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Mon, 7 Dec 2009 00:22:42 +0200 Subject: [PATCH] * mu-query-xapian: escape AND/OR/NOT in query element lists --- src/mu-query-xapian.cc | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/mu-query-xapian.cc b/src/mu-query-xapian.cc index b227e541..81abbc2a 100644 --- a/src/mu-query-xapian.cc +++ b/src/mu-query-xapian.cc @@ -195,11 +195,26 @@ mu_query_xapian_combine (GSList *lst, gboolean connect_or) str = g_string_sized_new (64); /* just a guess */ while (lst) { + const char* elm; const char* cnx = ""; + gboolean do_quote; + + elm = (const gchar*)lst->data; + if (!elm) /* shouldn't happen */ + break; + if (lst->next) cnx = connect_or ? " OR " : " AND "; + + do_quote = (strcasecmp (elm, "OR") == 0 || + strcasecmp (elm, "AND") == 0 || + strcasecmp (elm, "NOT") == 0); - g_string_append_printf (str, "%s%s", (gchar*)lst->data, cnx); + g_string_append_printf (str, "%s%s%s%s", + do_quote ? "\"" : "", + (gchar*)lst->data, + do_quote ? "\"" : "", + cnx); lst = lst->next; }