From: Timo Sirainen Date: Sun, 13 Jul 2008 11:44:03 +0000 (+0300) Subject: fts-solr: Encode entities when indexing data. X-Git-Tag: 1.2.alpha1~161 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0fbe824cee2ee2f8fa0f27f4c0d4561a53b29fa8;p=thirdparty%2Fdovecot%2Fcore.git fts-solr: Encode entities when indexing data. --HG-- branch : HEAD --- diff --git a/src/plugins/fts-solr/fts-backend-solr.c b/src/plugins/fts-solr/fts-backend-solr.c index 8f7406f4d1..6af0e178ec 100644 --- a/src/plugins/fts-solr/fts-backend-solr.c +++ b/src/plugins/fts-solr/fts-backend-solr.c @@ -26,10 +26,13 @@ static void solr_quote_str(string_t *dest, const char *str) solr_connection_quote_str(solr_conn, dest, str); } -static void xml_encode(string_t *dest, const char *str) +static void +xml_encode_data(string_t *dest, const unsigned char *data, unsigned int len) { - for (; *str != '\0'; str++) { - switch (*str) { + unsigned int i; + + for (i = 0; i < len; i++) { + switch (data[i]) { case '&': str_append(dest, "&"); break; @@ -40,12 +43,17 @@ static void xml_encode(string_t *dest, const char *str) str_append(dest, ">"); break; default: - str_append_c(dest, *str); + str_append_c(dest, data[i]); break; } } } +static void xml_encode(string_t *dest, const char *str) +{ + xml_encode_data(dest, (const unsigned char *)str, strlen(str)); +} + static struct fts_backend * fts_backend_solr_init(struct mailbox *box ATTR_UNUSED) { @@ -174,7 +182,9 @@ fts_backend_solr_build_more(struct fts_backend_build_context *_ctx, i_assert(!(!headers && ctx->headers)); } - solr_connection_post_more(ctx->post, data, size); + str_truncate(cmd, 0); + xml_encode_data(cmd, data, size); + solr_connection_post_more(ctx->post, str_data(cmd), str_len(cmd)); return 0; }