/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2010 Index Data
+ * Copyright (C) 1995-2011 Index Data
* See the file LICENSE for details.
*/
/**
if (truncation <= 3)
return ((int) truncation & flag);
}
- /* Complex: Shouldn't happen */
+ else if (ae->which == Z_AttributeValue_complex) {
+ //yaz_log(YLOG_DEBUG, "Z_Attribute_complex");
+ /* Complex: Shouldn't happen */
+ }
}
}
/* No truncation or unsupported */
};
static int checkForLeftTruncation(Z_AttributeList *attributes) {
- return checkForTruncation(1, attributes);
+ return checkForTruncation(2, attributes);
}
static int checkForRightTruncation(Z_AttributeList *attributes) {
- return checkForTruncation(2, attributes);
+ return checkForTruncation(1, attributes);
};
static int rpn2solr_simple(solr_transform_t ct,
{
size_t i;
int must_quote = 0;
+
for (i = 0 ; i < lterm; i++)
if (sterm[i] == ' ')
must_quote = 1;
/* Bug 2878: Check and add Truncation */
if (checkForLeftTruncation(apt->attributes))
wrbuf_puts(w, "*");
- wrbuf_write(w, sterm, lterm);
+ for (i = 0 ; i < lterm; i++) {
+ /* BUG 4415: Escape special characters in string terms */
+ if (strchr("+-&|!(){}[]^\"~*?:\\", sterm[i])) {
+ wrbuf_putc(w, '\\');
+ }
+ wrbuf_putc(w, sterm[i]);
+ }
/* Bug 2878: Check and add Truncation */
if (checkForRightTruncation(apt->attributes))
wrbuf_puts(w, "*");