(svn r20089) -Fix [FS#3932]: Access of already freed memory, esp. due to hidden destructor call from Swap().

This commit is contained in:
frosch
2010-07-08 18:38:38 +00:00
parent 02e4371ecb
commit 4ce5c6d93d
3 changed files with 21 additions and 6 deletions

View File

@@ -135,15 +135,13 @@ DEF_CONTENT_RECEIVE_COMMAND(Client, PACKET_CONTENT_SERVER_INFO)
/*
* As ici might be selected by the content window we cannot delete that.
* However, we want to keep most of the values of ci, except the values
* we (just) already preserved. As there are already allocated blobs of
* memory and more may be added, we cannot simply copy ci to ici as that
* might cause a leak of memory. As such we need to swap the data and
* then delete the memory we allocated here.
* we (just) already preserved.
* So transfer data and ownership of allocated memory from ci to ici.
*/
Swap(*ici, *ci);
ici->TransferFrom(ci);
delete ci;
this->OnReceiveContentInfo(ci);
this->OnReceiveContentInfo(ici);
return true;
}
}