From 887bddc932371b33dcf41094b6a344486d3128b4 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Mon, 16 Jan 2017 23:55:17 +0200 Subject: [PATCH] fts-solr: Escape {} chars when sending queries Fixes: java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 Based on patch by Michael Welsh Duggan --- src/plugins/fts-solr/fts-backend-solr-old.c | 4 ++-- src/plugins/fts-solr/fts-backend-solr.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plugins/fts-solr/fts-backend-solr-old.c b/src/plugins/fts-solr/fts-backend-solr-old.c index 2d36762d8c..2020ff471e 100644 --- a/src/plugins/fts-solr/fts-backend-solr-old.c +++ b/src/plugins/fts-solr/fts-backend-solr-old.c @@ -701,7 +701,7 @@ fts_backend_solr_lookup(struct fts_backend *_backend, struct mailbox *box, &status); str = t_str_new(256); - str_printfa(str, "fl=uid,score&rows=%u&sort=uid+asc&q={!lucene+q.op%%3dAND}", + str_printfa(str, "fl=uid,score&rows=%u&sort=uid+asc&q=%%7b!lucene+q.op%%3dAND%%7d", status.uidnext); if (!solr_add_definite_query_args(str, args, and_args)) { @@ -835,7 +835,7 @@ fts_backend_solr_lookup_multi(struct fts_backend *_backend, fts_solr_set_default_ns(backend); str = t_str_new(256); - str_printfa(str, "fl=ns,box,uidv,uid,score&rows=%u&sort=box+asc,uid+asc&q={!lucene+q.op%%3dAND}", + str_printfa(str, "fl=ns,box,uidv,uid,score&rows=%u&sort=box+asc,uid+asc&q=%%7b!lucene+q.op%%3dAND%%7d", SOLR_MAX_MULTI_ROWS); if (solr_add_definite_query_args(str, args, and_args)) { diff --git a/src/plugins/fts-solr/fts-backend-solr.c b/src/plugins/fts-solr/fts-backend-solr.c index 28a8579cec..0ffc717585 100644 --- a/src/plugins/fts-solr/fts-backend-solr.c +++ b/src/plugins/fts-solr/fts-backend-solr.c @@ -828,7 +828,7 @@ fts_backend_solr_lookup(struct fts_backend *_backend, struct mailbox *box, mailbox_get_open_status(box, STATUS_UIDNEXT, &status); str = t_str_new(256); - str_printfa(str, "fl=uid,score&rows=%u&sort=uid+asc&q={!lucene+q.op%%3dAND}", + str_printfa(str, "fl=uid,score&rows=%u&sort=uid+asc&q=%%7b!lucene+q.op%%3dAND%%7d", status.uidnext); prefix_len = str_len(str); @@ -938,7 +938,7 @@ fts_backend_solr_lookup_multi(struct fts_backend *backend, string_t *str; str = t_str_new(256); - str_printfa(str, "fl=box,uid,score&rows=%u&sort=box+asc,uid+asc&q={!lucene+q.op%%3dAND}", + str_printfa(str, "fl=box,uid,score&rows=%u&sort=box+asc,uid+asc&q=%%7b!lucene+q.op%%3dAND%%7d", SOLR_MAX_MULTI_ROWS); if (solr_add_definite_query_args(str, args, and_args)) { -- 2.47.3