X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fclient.c;h=e5d3e4c101e9020eaeebfbb7f48b6251132f5082;hb=37482a306afb1c7952bdf304530498b6d068db92;hp=e40c8e1dc18b03b073e74f7ad255ec08531bd0ae;hpb=f7bf5626d6ae623cbcf86b8c4c9f9ed023a92499;p=pazpar2-moved-to-github.git diff --git a/src/client.c b/src/client.c index e40c8e1..e5d3e4c 100644 --- a/src/client.c +++ b/src/client.c @@ -1308,6 +1308,31 @@ const char *client_get_facet_limit_local(struct client *cl, return 0; } +static void ccl_quote_map_term(CCL_bibset ccl_map, WRBUF w, + const char *term) +{ + int quote_it = 0; + const char *cp; + for (cp = term; *cp; cp++) + if ((*cp >= '0' && *cp <= '9') || strchr(" +-", *cp)) + ; + else + quote_it = 1; + if (!quote_it) + wrbuf_puts(w, term); + else + { + wrbuf_putc(w, '\"'); + for (cp = term; *cp; cp++) + { + if (strchr( "\\\"", *cp)) + wrbuf_putc(w, '\\'); + wrbuf_putc(w, *cp); + } + wrbuf_putc(w, '\"'); + } +} + static int apply_limit(struct session_database *sdb, facet_limits_t facet_limits, WRBUF w_pqf, CCL_bibset ccl_map, @@ -1369,11 +1394,7 @@ static int apply_limit(struct session_database *sdb, wrbuf_rewind(ccl_w); wrbuf_puts(ccl_w, ccl); wrbuf_putc(ccl_w, '='); - if (strchr(values[i], ' ')) - wrbuf_putc(ccl_w, '\"'); - wrbuf_puts(ccl_w, values[i]); - if (strchr(values[i], ' ')) - wrbuf_putc(ccl_w, '\"'); + ccl_quote_map_term(ccl_map, ccl_w, values[i]); cn = ccl_find_str(ccl_map, wrbuf_cstr(ccl_w), &cerror, &cpos); if (cn)