Avoid list corruption when linking window with HWND_BOTTOM (thanks to
Gerard Patel).
diff --git a/server/window.c b/server/window.c
index 8bc9155..ed64145 100644
--- a/server/window.c
+++ b/server/window.c
@@ -174,15 +174,20 @@
if (req->parent && !(parent = get_window( req->parent ))) return;
if (parent && req->previous)
{
- if (req->previous == 1) /* special case: HWND_BOTTOM */
- previous = parent->last_child;
- else
- if (!(previous = get_window( req->previous ))) return;
-
- if (previous && previous->parent != parent) /* previous must be a child of parent */
+ if (req->previous == (user_handle_t)1) /* special case: HWND_BOTTOM */
{
- set_error( STATUS_INVALID_PARAMETER );
- return;
+ previous = parent->last_child;
+ if (previous == win) return; /* nothing to do */
+ }
+ else
+ {
+ if (!(previous = get_window( req->previous ))) return;
+ /* previous must be a child of parent, and not win itself */
+ if (previous->parent != parent || previous == win)
+ {
+ set_error( STATUS_INVALID_PARAMETER );
+ return;
+ }
}
}
link_window( win, parent, previous );