util: Fix two corner-cases in boolean term quoting function

Previously, make_boolean_term did not quote empty boolean terms or
boolean terms that started with '('.  These cases are incompatible
with Xapian: empty terms cannot be omitted, and boolean terms that
start with '(' trigger an alternate term quoting syntax.

Fix this by quoting empty terms and terms that contain '('.
This commit is contained in:
Austin Clements 2014-03-11 16:42:00 -04:00 committed by David Bremner
parent 8fcc3260a9
commit 3fed6736a7

View file

@ -75,10 +75,12 @@ make_boolean_term (void *ctx, const char *prefix, const char *term,
int need_quoting = 0; int need_quoting = 0;
/* Do we need quoting? To be paranoid, we quote anything /* Do we need quoting? To be paranoid, we quote anything
* containing a quote, even though it only matters at the * containing a quote or '(', even though these only matter at the
* beginning, and anything containing non-ASCII text. */ * beginning, and anything containing non-ASCII text. */
if (! term[0])
need_quoting = 1;
for (in = term; *in && !need_quoting; in++) for (in = term; *in && !need_quoting; in++)
if (is_unquoted_terminator (*in) || *in == '"' if (is_unquoted_terminator (*in) || *in == '"' || *in == '('
|| (unsigned char)*in > 127) || (unsigned char)*in > 127)
need_quoting = 1; need_quoting = 1;