bool documents_added;
};
+static const char *solr_escape_chars = "+-&|!(){}[]^\"~*?:\\/ ";
+
static bool is_valid_xml_char(unichar_t chr)
{
/* Valid characters in XML:
return str_c(tmp);
}
+static const char *solr_escape(const char *str)
+{
+ string_t *ret;
+ unsigned int i;
+
+ ret = t_str_new(strlen(str) + 16);
+ for (i = 0; str[i] != '\0'; i++) {
+ if (strchr(solr_escape_chars, str[i]) != NULL)
+ str_append_c(ret, '\\');
+ str_append_c(ret, str[i]);
+ }
+ return str_c(ret);
+}
+
static void solr_quote(string_t *dest, const char *str)
{
- str_append_c(dest, '"');
- str_append(dest, str_escape(str));
- str_append_c(dest, '"');
+ str_append(dest, solr_escape(str));
}
static void solr_quote_http(string_t *dest, const char *str)
{
- str_append(dest, "%22");
- http_url_escape_param(dest, str);
- str_append(dest, "%22");
+ http_url_escape_param(dest, solr_escape(str));
}
static void fts_solr_set_default_ns(struct solr_fts_backend *backend)
unsigned int truncate_header:1;
};
+static const char *solr_escape_chars = "+-&|!(){}[]^\"~*?:\\/ ";
+
static bool is_valid_xml_char(unichar_t chr)
{
/* Valid characters in XML:
xml_encode_data(dest, (const unsigned char *)str, strlen(str));
}
+static const char *solr_escape(const char *str)
+{
+ string_t *ret;
+ unsigned int i;
+
+ ret = t_str_new(strlen(str) + 16);
+ for (i = 0; str[i] != '\0'; i++) {
+ if (strchr(solr_escape_chars, str[i]) != NULL)
+ str_append_c(ret, '\\');
+ str_append_c(ret, str[i]);
+ }
+ return str_c(ret);
+}
+
static void solr_quote_http(string_t *dest, const char *str)
{
- str_append(dest, "%22");
- http_url_escape_param(dest, str);
- str_append(dest, "%22");
+ http_url_escape_param(dest, solr_escape(str));
}
static struct fts_backend *fts_backend_solr_alloc(void)
static bool solr_need_escaping(const char *str)
{
- const char *solr_escape_chars = "+-&|!(){}[]^\"~*?:\\ ";
-
for (; *str != '\0'; str++) {
if (strchr(solr_escape_chars, *str) != NULL)
return TRUE;
if (!arg->fuzzy || solr_need_escaping(arg->value.str))
solr_quote_http(str, arg->value.str);
else {
- str_append(str, arg->value.str);
+ http_url_escape_param(str, arg->value.str);
str_append_c(str, '~');
}
}