From f9709eb93197d52b4cd6bffad431a013dd49f104 Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Thu, 8 Aug 2019 01:06:04 +0200 Subject: [PATCH] try to fix swap_remove usage --- src/dc_mimeparser.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/dc_mimeparser.rs b/src/dc_mimeparser.rs index db267a584..3ae5e67ce 100644 --- a/src/dc_mimeparser.rs +++ b/src/dc_mimeparser.rs @@ -247,11 +247,19 @@ pub unsafe fn dc_mimeparser_parse( } if need_drop { - free(mimeparser.parts[1].msg as *mut libc::c_void); - let mut textpart = mimeparser.parts.swap_remove(0); - mimeparser.parts[1].msg = textpart.msg; - textpart.msg = 0 as *mut libc::c_char; - dc_mimepart_unref(textpart); + let mut filepart = mimeparser.parts.swap_remove(1); + + // clear old one + free(filepart.msg as *mut libc::c_void); + + // insert new one + filepart.msg = mimeparser.parts[0].msg; + + // clear old one out + let old = std::mem::replace(&mut mimeparser.parts[0], filepart); + + // unref old one + dc_mimepart_unref(old); } } if !mimeparser.subject.is_null() {