# HG changeset patch # User Carl Byington # Date 1303091133 25200 # Node ID 5ca87faa020ba63c52d4b9cd47eda75adce77e3a # Parent 8dcfef53a4f3bd0adad480e0699ee69f52e1065e attachment might have a secondary list of mapi elements included a size element which overwrote the real size from the primary list of mapi elements diff -r 8dcfef53a4f3 -r 5ca87faa020b src/libpst.c --- a/src/libpst.c Sun Apr 17 17:22:29 2011 -0700 +++ b/src/libpst.c Sun Apr 17 18:45:33 2011 -0700 @@ -1327,6 +1327,8 @@ if (list->count_objects > 1) { DEBUG_WARN(("ERROR probably fatal, list count array will overrun attach structure.\n")); } + // reprocess the same attachment list against new data + // this might update attach->id2_val if (pst_process(list, item, attach)) { DEBUG_WARN(("ERROR pst_process() failed with an attachment\n")); pst_free_list(list); @@ -1339,25 +1341,6 @@ // i_id has been updated to the datablock containing the attachment data attach->i_id = id2_ptr->id->i_id; attach->id2_head = deep_copy(id2_ptr->child); - if (attach->data.data) { - // fetch the actual data to determine the actual attachment size. - pst_index_ll *ptr; - pst_binary rc; - pst_holder h = {&rc.data, NULL, 0, 0, 0}; - rc.size = 0; - rc.data = NULL; - ptr = pst_getID(pf, attach->i_id); - if (ptr) { - rc.size = pst_ff_getID2data(pf, ptr, &h); - if (rc.data) free(rc.data); - if (rc.size < attach->data.size) { - DEBUG_WARN(("reducing attachment %s size was %#"PRIx64", is now %#"PRIx64" based on size of i_id\n", attach->filename2.str, attach->data.size, rc.size)); - attach->data.size = rc.size; - } - } else { - DEBUG_WARN(("Couldn't find ID pointer. Cannot save attachment to file\n")); - } - } } else { DEBUG_WARN(("have not located the correct value for the attachment [%#"PRIx64"]\n", attach->id2_val)); } @@ -2467,12 +2450,8 @@ case 0x0E20: // PR_ATTACH_SIZE binary Attachment data in record NULL_CHECK(attach); LIST_COPY_INT32("Attachment Size", t); - if (attach->data.data && (attach->data.size != (size_t)t)) { - DEBUG_INFO(("already have data %#"PRIxPTR" size %#"PRIx64"\n", attach->data.data, attach->data.size)); - } - else { - attach->data.size = (size_t)t; - } + // ignore this. we either get data and size from 0x3701 + // or id codes from 0x3701 or 0x67f2 break; case 0x0FF9: // PR_RECORD_KEY Record Header 1 LIST_COPY_BIN(item->record_key);