[Spice-devel] [win-vdagent PATCH] vdagent: protect against NULL entry in _displays

agilboa at redhat.com agilboa at redhat.com
Tue Apr 30 04:16:56 PDT 2013


ack

On 04/30/2013 01:10 PM, Uri Lublin wrote:
> rhbz#958051
>
> It may be that a _displays entry will be NULL.
> I encountered it when running with multiple QXL devices, for one of
> which the driver failed to load since it was "out of resources"
>
> Iterations over _displays should handle that case.
> I found three such iterations, and fixed them in this patch
> ---
>   vdagent/desktop_layout.cpp |    3 +++
>   vdagent/vdagent.cpp        |    9 ++++++---
>   2 files changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/vdagent/desktop_layout.cpp b/vdagent/desktop_layout.cpp
> index c474edb..7dadc9a 100644
> --- a/vdagent/desktop_layout.cpp
> +++ b/vdagent/desktop_layout.cpp
> @@ -155,6 +155,9 @@ void DesktopLayout::normalize_displays_pos()
>   
>       for (iter = _displays.begin(); iter != _displays.end(); iter++) {
>           mode = *iter;
> +        if (!mode) {
> +            continue;
> +        }
>           if (mode->_attached) {
>               min_x = min(min_x, mode->_pos_x);
>               min_y = min(min_y, mode->_pos_y);
> diff --git a/vdagent/vdagent.cpp b/vdagent/vdagent.cpp
> index dde967c..3423aa1 100644
> --- a/vdagent/vdagent.cpp
> +++ b/vdagent/vdagent.cpp
> @@ -613,7 +613,9 @@ bool VDAgent::handle_mon_config(VDAgentMonitorsConfig* mon_config, uint32_t port
>       display_count = _desktop_layout->get_display_count();
>       for (uint32_t i = 0; i < display_count; i++) {
>           DisplayMode* mode = _desktop_layout->get_display(i);
> -        ASSERT(mode);
> +        if (!mode) {
> +            continue;
> +        }
>           if (i >= mon_config->num_of_monitors) {
>               vd_printf("%d. detached", i);
>               mode->set_attached(false);
> @@ -738,8 +740,9 @@ void VDAgent::set_display_depth(uint32_t depth)
>       // setting depth for all the monitors, including unattached ones
>       for (uint32_t i = 0; i < display_count; i++) {
>           DisplayMode* mode = _desktop_layout->get_display(i);
> -        ASSERT(mode);
> -        mode->set_depth(depth);
> +        if (mode) {
> +            mode->set_depth(depth);
> +        }
>       }
>   
>       if (display_count) {



More information about the Spice-devel mailing list