changeset 4219:53e1edf215e0 HEAD

Fixed crash while updating keywords (broken by recent changes).
author Timo Sirainen <timo.sirainen@movial.fi>
date Mon, 24 Apr 2006 12:17:14 +0300
parents a3f9089faadb
children 2af75b0379bb
files src/lib-index/mail-index-transaction.c
diffstat 1 files changed, 17 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-index-transaction.c	Sat Apr 22 12:34:57 2006 +0300
+++ b/src/lib-index/mail-index-transaction.c	Mon Apr 24 12:17:14 2006 +0300
@@ -910,23 +910,18 @@
 
 		ARRAY_CREATE(&t->keyword_updates, default_pool,
 			     struct mail_index_transaction_keyword_update,
-			     max_idx);
+			     max_idx + 1);
 	}
 
 	/* Update add_seq and remove_seq arrays which describe the keyword
 	   changes. Don't bother updating remove_seq or keyword resets for
 	   newly added messages since they default to not having any
 	   keywords anyway. */
-	if (array_is_created(&t->keyword_updates))
-		ku = array_get_modifyable(&t->keyword_updates, &ku_count);
-	else {
-		ku = NULL;
-		ku_count = 0;
-	}
 	switch (modify_type) {
 	case MODIFY_ADD:
 		for (i = 0; i < keywords->count; i++) {
-			u = ku[keywords->idx[i]];
+			u = array_idx_modifyable(&t->keyword_updates,
+						 keywords->idx[i]);
 			seq_range_array_add(&u->add_seq, 16, seq);
 			if (seq < t->first_new_seq)
 				seq_range_array_remove(&u->remove_seq, seq);
@@ -934,7 +929,8 @@
 		break;
 	case MODIFY_REMOVE:
 		for (i = 0; i < keywords->count; i++) {
-			u = ku[keywords->idx[i]];
+			u = array_idx_modifyable(&t->keyword_updates,
+						 keywords->idx[i]);
 			seq_range_array_remove(&u->add_seq, seq);
 			if (seq < t->first_new_seq)
 				seq_range_array_add(&u->remove_seq, 16, seq);
@@ -942,14 +938,21 @@
 		break;
 	case MODIFY_REPLACE:
 		/* Remove sequence from all add/remove arrays */
-		for (i = 0; i < ku_count; i++) {
-			seq_range_array_remove(&ku[i]->add_seq, seq);
-			if (seq < t->first_new_seq)
-				seq_range_array_remove(&ku[i]->remove_seq, seq);
+		if (array_is_created(&t->keyword_updates)) {
+			ku = array_get_modifyable(&t->keyword_updates,
+						  &ku_count);
+			for (i = 0; i < ku_count; i++) {
+				seq_range_array_remove(&ku[i]->add_seq, seq);
+				if (seq < t->first_new_seq) {
+					seq_range_array_remove(
+						&ku[i]->remove_seq, seq);
+				}
+			}
 		}
 		/* Add the wanted keyword back */
 		for (i = 0; i < keywords->count; i++) {
-			u = ku[keywords->idx[i]];
+			u = array_idx_modifyable(&t->keyword_updates,
+						 keywords->idx[i]);
 			seq_range_array_add(&u->add_seq, 16, seq);
 		}