diff -Naur openchange-0.10-NOMAD/libmapi//IMessage.c openchange-0.10-NOMAD-kirurgs/libmapi//IMessage.c --- openchange-0.10-NOMAD/libmapi//IMessage.c 2010-08-27 13:22:25.000000000 +0300 +++ openchange-0.10-NOMAD-kirurgs/libmapi//IMessage.c 2011-03-31 12:52:09.000000000 +0300 @@ -728,9 +728,8 @@ * append here property tags that can be fetched with * ResolveNames but shouldn't be included in ModifyRecipients rows */ - request.properties = get_MAPITAGS_SRow(mem_ctx, &SRowSet->aRow[0]); - count = SRowSet->aRow[0].cValues - 1; - request.prop_count = MAPITAGS_delete_entries(request.properties, count, 17, + request.properties = get_MAPITAGS_SRow(mem_ctx, &SRowSet->aRow[0], &count); + request.prop_count = MAPITAGS_delete_entries(request.properties, count, 19, PR_ENTRYID, PR_DISPLAY_NAME, PR_DISPLAY_NAME_UNICODE, @@ -747,7 +746,9 @@ PR_ADDRTYPE_UNICODE, PR_ADDRTYPE_ERROR, PR_SEND_INTERNET_ENCODING, - PR_SEND_INTERNET_ENCODING_ERROR); + PR_SEND_INTERNET_ENCODING_ERROR, + PR_SEND_RICH_INFO, + PR_SEND_RICH_INFO_ERROR); size += request.prop_count * sizeof(uint32_t); request.cValues = SRowSet->cRows; size += sizeof(uint16_t); @@ -804,7 +805,7 @@ break; case (0x208): RecipientRow->EmailAddress.lpszW = (const char *) find_SPropValue_data(aRow, PR_SMTP_ADDRESS_UNICODE); - size += strlen(RecipientRow->EmailAddress.lpszW) * 2 + 2; + size += get_utf8_utf16_conv_length(RecipientRow->EmailAddress.lpszW); break; default: break; @@ -818,7 +819,7 @@ break; case (0x210): RecipientRow->DisplayName.lpszW = (const char *) find_SPropValue_data(aRow, PR_DISPLAY_NAME_UNICODE); - size += strlen(RecipientRow->DisplayName.lpszW) * 2 + 2; + size += get_utf8_utf16_conv_length(RecipientRow->DisplayName.lpszW); break; default: break; @@ -832,7 +833,7 @@ break; case (0x220): RecipientRow->TransmittableDisplayName.lpszW = (const char *) find_SPropValue_data(aRow, PR_TRANSMITTABLE_DISPLAY_NAME_UNICODE); - size += strlen(RecipientRow->TransmittableDisplayName.lpszW) * 2 + 2; + size += get_utf8_utf16_conv_length(RecipientRow->TransmittableDisplayName.lpszW); break; default: break; @@ -847,7 +848,7 @@ break; case (0x600): RecipientRow->SimpleDisplayName.lpszW = (const char *) find_SPropValue_data(aRow, PR_7BIT_DISPLAY_NAME_UNICODE); - size += strlen(RecipientRow->SimpleDisplayName.lpszW) * 2 + 2; + size += get_utf8_utf16_conv_length(RecipientRow->SimpleDisplayName.lpszW); break; default: break; diff -Naur openchange-0.10-NOMAD/libmapi//libmapi_private.h openchange-0.10-NOMAD-kirurgs/libmapi//libmapi_private.h --- openchange-0.10-NOMAD/libmapi//libmapi_private.h 2010-08-27 13:22:25.000000000 +0300 +++ openchange-0.10-NOMAD-kirurgs/libmapi//libmapi_private.h 2011-03-31 12:52:09.000000000 +0300 @@ -106,7 +106,8 @@ enum MAPISTATUS mapi_object_bookmark_find(mapi_object_t *, uint32_t,struct SBinary_short *); /* The following private definitions come from libmapi/property.c */ -enum MAPITAGS *get_MAPITAGS_SRow(TALLOC_CTX *, struct SRow *); +/*enum MAPITAGS *get_MAPITAGS_SRow(TALLOC_CTX *, struct SRow *);*/ +enum MAPITAGS *get_MAPITAGS_SRow(TALLOC_CTX *, struct SRow *, uint32_t *); uint32_t MAPITAGS_delete_entries(enum MAPITAGS *, uint32_t, uint32_t, ...); size_t get_utf8_utf16_conv_length(const char *); diff -Naur openchange-0.10-NOMAD/libmapi//property.c openchange-0.10-NOMAD-kirurgs/libmapi//property.c --- openchange-0.10-NOMAD/libmapi//property.c 2010-09-16 11:15:34.000000000 +0300 +++ openchange-0.10-NOMAD-kirurgs/libmapi//property.c 2011-03-31 12:52:09.000000000 +0300 @@ -183,7 +183,9 @@ Create a MAPITAGS array from a SRow entry */ -enum MAPITAGS *get_MAPITAGS_SRow(TALLOC_CTX *mem_ctx, struct SRow *aRow) +enum MAPITAGS *get_MAPITAGS_SRow(TALLOC_CTX *mem_ctx, + struct SRow *aRow, + uint32_t *actual_count) { enum MAPITAGS *mapitags; uint32_t count, idx; @@ -197,6 +199,8 @@ } } mapitags[idx] = 0; + *actual_count = idx; + return mapitags; }