[Spice-devel] [PATCH 2/2] SpiceDisplay: validate 'self' argument for public API

Marc-André Lureau mlureau at redhat.com
Mon Nov 4 19:18:06 CET 2013



----- Original Message -----
> Add defensive g_return[_val]_if_fail(SPICE_IS_DISPLAY()) to all public API
> ---
>  gtk/spice-widget.c | 34 ++++++++++++++++++++++++++++------
>  1 file changed, 28 insertions(+), 6 deletions(-)
> 
> diff --git a/gtk/spice-widget.c b/gtk/spice-widget.c
> index 8b5fa59..014d2fb 100644
> --- a/gtk/spice-widget.c
> +++ b/gtk/spice-widget.c
> @@ -662,7 +662,11 @@ spice_display_constructor(GType                  gtype,
>   **/
>  void spice_display_set_grab_keys(SpiceDisplay *display, SpiceGrabSequence
>  *seq)
>  {
> -    SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display);
> +    SpiceDisplayPrivate *d;
> +
> +    g_return_if_fail(SPICE_IS_DISPLAY(display));
> +
> +    d = SPICE_DISPLAY_GET_PRIVATE(display);

Thanks for that patch, but now that you change the check above, you can actually just do "d = display->priv" to avoid a double type check.

>      g_return_if_fail(d != NULL);
>  
>      if (d->grabseq) {
> @@ -721,7 +725,11 @@ static LRESULT CALLBACK keyboard_hook_cb(int code,
> WPARAM wparam, LPARAM lparam)
>   **/
>  SpiceGrabSequence *spice_display_get_grab_keys(SpiceDisplay *display)
>  {
> -    SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display);
> +    SpiceDisplayPrivate *d;
> +
> +    g_return_val_if_fail(SPICE_IS_DISPLAY(display), NULL);
> +
> +    d = SPICE_DISPLAY_GET_PRIVATE(display);
>      g_return_val_if_fail(d != NULL, NULL);
>  
>      return d->grabseq;
> @@ -1406,7 +1414,7 @@ void spice_display_send_keys(SpiceDisplay *display,
> const guint *keyvals,
>  {
>      int i;
>  
> -    g_return_if_fail(SPICE_DISPLAY(display) != NULL);
> +    g_return_if_fail(SPICE_IS_DISPLAY(display));
>      g_return_if_fail(keyvals != NULL);
>  
>      SPICE_DEBUG("%s", __FUNCTION__);
> @@ -2519,6 +2527,8 @@ SpiceDisplay*
> spice_display_new_with_monitor(SpiceSession *session, gint channel
>   **/
>  void spice_display_mouse_ungrab(SpiceDisplay *display)
>  {
> +    g_return_if_fail(SPICE_IS_DISPLAY(display));
> +
>      try_mouse_ungrab(display);
>  }
>  
> @@ -2532,7 +2542,11 @@ void spice_display_mouse_ungrab(SpiceDisplay *display)
>   **/
>  void spice_display_copy_to_guest(SpiceDisplay *display)
>  {
> -    SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display);
> +    SpiceDisplayPrivate *d;
> +
> +    g_return_if_fail(SPICE_IS_DISPLAY(display));
> +
> +    d = SPICE_DISPLAY_GET_PRIVATE(display);
>  
>      g_return_if_fail(d->gtk_session != NULL);
>  
> @@ -2549,7 +2563,11 @@ void spice_display_copy_to_guest(SpiceDisplay
> *display)
>   **/
>  void spice_display_paste_from_guest(SpiceDisplay *display)
>  {
> -    SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display);
> +    SpiceDisplayPrivate *d;
> +
> +    g_return_if_fail(SPICE_IS_DISPLAY(display));
> +
> +    d = SPICE_DISPLAY_GET_PRIVATE(display);
>  
>      g_return_if_fail(d->gtk_session != NULL);
>  
> @@ -2566,11 +2584,15 @@ void spice_display_paste_from_guest(SpiceDisplay
> *display)
>   **/
>  GdkPixbuf *spice_display_get_pixbuf(SpiceDisplay *display)
>  {
> -    SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display);
> +    SpiceDisplayPrivate *d;
>      GdkPixbuf *pixbuf;
>      int x, y;
>      guchar *src, *data, *dest;
>  
> +    g_return_val_if_fail(SPICE_IS_DISPLAY(display), NULL);
> +
> +    d = SPICE_DISPLAY_GET_PRIVATE(display);
> +
>      g_return_val_if_fail(d != NULL, NULL);
>      /* TODO: ensure d->data has been exposed? */

ack otherwsie

>      g_return_val_if_fail(d->data != NULL, NULL);
> --
> 1.8.3.1
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
> 


More information about the Spice-devel mailing list