[virt-tools-list] [PATCH virt-viewer v5 2/3] session-spice: Set fullscreen displays according to monitor-mapping

Pavel Grunt pgrunt at redhat.com
Tue May 5 11:48:42 UTC 2015


It is necessary to follow the monitor mapping, otherwise a display
can get dimensions which belongs to other than desired monitor.

Related: rhbz#1212802
---
v5: - prevented the potential illegal array access (displays[GPOINTER_TO_INT(l->data)])
---
 src/virt-viewer-session-spice.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c
index b69faa6..cdba054 100644
--- a/src/virt-viewer-session-spice.c
+++ b/src/virt-viewer-session-spice.c
@@ -866,12 +866,13 @@ virt_viewer_session_spice_fullscreen_auto_conf(VirtViewerSessionSpice *self)
     displays = g_new0(GdkRectangle, ndisplays);
 
     for (i = 0, l = initial_displays; l != NULL; l = l->next, i++) {
-        GdkRectangle* rect = &displays[i];
-        gint j = virt_viewer_app_get_initial_monitor_for_display(app, GPOINTER_TO_INT(l->data));
-        if (j == -1)
+        gint display_id = GPOINTER_TO_INT(l->data);
+        gint j = virt_viewer_app_get_initial_monitor_for_display(app, display_id);
+        g_warn_if_fail(display_id < ndisplays);
+        if (j == -1 || display_id >= ndisplays)
             continue;
 
-        gdk_screen_get_monitor_geometry(screen, j, rect);
+        gdk_screen_get_monitor_geometry(screen, j, &displays[display_id]);
     }
     g_list_free(initial_displays);
 
-- 
2.4.0




More information about the virt-tools-list mailing list