changeset 8000:61be6a4722c5 HEAD

fts-solr: Encode entities when indexing data.
author Timo Sirainen <tss@iki.fi>
date Sun, 13 Jul 2008 14:44:03 +0300
parents 1ceb49f2eb50
children 3fbfdda3e5d3
files src/plugins/fts-solr/fts-backend-solr.c
diffstat 1 files changed, 15 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/fts-solr/fts-backend-solr.c	Sun Jul 13 14:40:03 2008 +0300
+++ b/src/plugins/fts-solr/fts-backend-solr.c	Sun Jul 13 14:44:03 2008 +0300
@@ -26,10 +26,13 @@
 	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, "&amp;");
 			break;
@@ -40,12 +43,17 @@
 			str_append(dest, "&gt;");
 			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 @@
 		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;
 }