> > I don't think qemu has to worry much here, and trying to automatically
> > adapt to hot-plugged monitors might even have bad interactions with
> > whatever the display server is going to do.
> 
> I'm concerned there is a TOCTTOU issue:
> 
>     if (opts->u.gtk.has_monitor) {
>         int n_monitor;
> 1.      n_monitor = gdk_display_get_n_monitors(window_display);
> 
> 2.      if ((opts->u.gtk.monitor <= n_monitor) &&
>             (opts->u.gtk.monitor > 0)) {
>             GdkScreen *gdk_screen;
>             gdk_screen = gdk_display_get_default_screen(window_display);
> 3.          gtk_window_fullscreen_on_monitor(GTK_WINDOW(s->window), 
> gdk_screen,
>                                              (opts->u.gtk.monitor - 1));
>         } else {
>             fprintf(stderr, "Invalid GTK monitor argument\n");
>         }
>     }
> 
> If monitors can go at any time, then the check 2. cannot ensure we pass
> a valid monitor number at 3.
> 
> I asked what happens when we pass an invalid monitor number.  I'm not
> sure I understand sweeaun's answer.
> 
> If what happens is sane, then why have check 2.?

gtk_window_fullscreen_on_monitor() seems to be a "best effort" offer and
it doesn't return error codes.  So catching possible user errors looks
useful to me.  The code should use error_report instead though (or maybe
warn_report given this is not fatal).  Reporting the valid range is
probably a good idea too.

take care,
  Gerd


Reply via email to