mirror of
https://github.com/reactos/reactos.git
synced 2024-08-11 21:58:10 +00:00
[SHELL32]
Avoid double-free and use-after-free in case the FSD fails to register the change directory notification CORE-13549 svn path=/trunk/; revision=75348
This commit is contained in:
parent
47ade62a62
commit
c4689f7e1d
|
@ -723,6 +723,20 @@ _NotificationCompletion(DWORD dwErrorCode, // completion code
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef __REACTOS__
|
||||
/* This is to avoid double-free and potential use after free
|
||||
* In case it failed, _BeginRead() already deferenced item
|
||||
* But if failure comes the FSD, the APC routine (us) will
|
||||
* be called as well, which will cause a double-free on quit.
|
||||
* Avoid this by deferencing only once in case of failure and thus,
|
||||
* incrementing reference count here
|
||||
*/
|
||||
if (dwErrorCode != ERROR_SUCCESS)
|
||||
{
|
||||
InterlockedIncrement(&item->pParent->wQueuedCount);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* This likely means overflow, so force whole directory refresh. */
|
||||
if (!dwNumberOfBytesTransfered)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue