]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts-solr: Escape {} chars when sending queries
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 16 Jan 2017 21:55:17 +0000 (23:55 +0200)
committerGitLab <gitlab@git.dovecot.net>
Tue, 17 Jan 2017 09:07:55 +0000 (11:07 +0200)
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
src/plugins/fts-solr/fts-backend-solr.c

index 2d36762d8c05c58a4a6923948dd7875e494c9e1a..2020ff471ea52ca3c981d5b3ba8ddc04cee48073 100644 (file)
@@ -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)) {
index 73255fa492c6a7df9fd21b056f2bc8b907e0d2a5..a1cc5adbd3fd1ad581af862134b799b3c5657d18 100644 (file)
@@ -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)) {