]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts-solr: Don't break if mailbox name contains '&' characters.
authorTimo Sirainen <tss@iki.fi>
Sat, 29 Nov 2008 20:39:04 +0000 (22:39 +0200)
committerTimo Sirainen <tss@iki.fi>
Sat, 29 Nov 2008 20:39:04 +0000 (22:39 +0200)
--HG--
branch : HEAD

src/plugins/fts-solr/solr-connection.c

index ae0624099c949e8bfcf163e4974a6538e052746d..3a35e7d83a8adb8c6fcd3a8463536d37c808b0cc 100644 (file)
@@ -325,6 +325,7 @@ static int uint32_parse(const char *str, int len, uint32_t *value_r)
 static void solr_lookup_xml_data(void *context, const char *str, int len)
 {
        struct solr_lookup_xml_context *ctx = context;
+       char *new_name;
 
        switch (ctx->content_state) {
        case SOLR_XML_CONTENT_STATE_NONE:
@@ -339,8 +340,12 @@ static void solr_lookup_xml_data(void *context, const char *str, int len)
                } T_END;
                break;
        case SOLR_XML_CONTENT_STATE_MAILBOX:
+               /* this may be called multiple times, for example if input
+                  contains '&' characters */
+               new_name = ctx->mailbox == NULL ? i_strndup(str, len) :
+                       i_strconcat(ctx->mailbox, t_strndup(str, len), NULL);
                i_free(ctx->mailbox);
-               ctx->mailbox = i_strndup(str, len);
+               ctx->mailbox = new_name;
                break;
        case SOLR_XML_CONTENT_STATE_UIDVALIDITY:
                if (uint32_parse(str, len, &ctx->uidvalidity) < 0)