mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-22 02:48:08 +01:00
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:
parent
8fcc3260a9
commit
3fed6736a7
1 changed files with 4 additions and 2 deletions
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue