[NTUSER] Fix 'Trying to link windows to itself' (#4478) CORE-18132

Fix 'Trying to link windows to itself' on DestroyWindow. Patch by I_Kill_Bugs.
This fixes a potential BSOD 0x50 observable in the app Localizer Editor"
This commit is contained in:
Doug Lyons 2022-10-03 17:26:02 -05:00 committed by GitHub
parent efd11b7f56
commit bd027c9de4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1393,8 +1393,34 @@ WinPosDoOwnedPopups(PWND Window, HWND hWndInsertAfter)
if (List[i] == Owner)
{
if (i > 0) hWndInsertAfter = List[i-1];
else hWndInsertAfter = topmost ? HWND_TOPMOST : HWND_TOP;
/* We found its Owner, so we must handle it here. */
if (i > 0)
{
if (List[i - 1] != UserHMGetHandle(Window))
{
/*
* If the popup to be inserted is not already just
* before the Owner, insert it there. The modified
* hWndInsertAfter will be handled below.
*
* (NOTE: Do not allow hWndInsertAfter to become equal
* to the popup's window handle, as this would cause
* the popup to link to itself).
*/
hWndInsertAfter = List[i - 1];
}
else
{
/* If the popup to be inserted is already
* before the Owner, we are done. */
ExFreePoolWithTag(List, USERTAG_WINDOWLIST);
return hWndInsertAfter;
}
}
else
{
hWndInsertAfter = topmost ? HWND_TOPMOST : HWND_TOP;
}
break;
}