[spice-common PATCH] canvas_base: fix not caching palettes that belong to images that are not rendered

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Fixes: fedora 875348, 826036

When an image is not rendered, we still need to check if it contains
a palette that needs to be cached.
This bug caused the client to crash due to not finding palettes
in the cache.
---
 common/canvas_base.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/common/canvas_base.c b/common/canvas_base.c
index 0ec8526..38a8497 100644
--- a/common/canvas_base.c
+++ b/common/canvas_base.c
@@ -1037,8 +1037,24 @@ static SpiceCanvas *canvas_get_surface_mask_internal(CanvasBase *canvas, SpiceIm
     return NULL;
 }
 
-#if defined(SW_CANVAS_CACHE) || defined(SW_CANVAS_IMAGE_CACHE)
 
+#if defined(SW_CANVAS_CACHE)
+static int image_has_palette_to_cache(SpiceImage *image)
+{
+    SpiceImageDescriptor *descriptor = &image->descriptor;
+
+    if (descriptor->type == SPICE_IMAGE_TYPE_BITMAP) {
+        return image->u.bitmap.palette &&
+               (image->u.bitmap.flags & SPICE_BITMAP_FLAGS_PAL_CACHE_ME);
+    } else if (descriptor->type == SPICE_IMAGE_TYPE_LZ_PLT) {
+        return image->u.lz_plt.palette &&
+               (image->u.lz_plt.flags & SPICE_BITMAP_FLAGS_PAL_CACHE_ME);
+    }
+    return FALSE;
+}
+#endif
+
+#if defined(SW_CANVAS_CACHE) || defined(SW_CANVAS_IMAGE_CACHE)
 //#define DEBUG_LZ
 
 /* If real get is FALSE, then only do whatever is needed but don't return an image. For instance,
@@ -1064,6 +1080,7 @@ static pixman_image_t *canvas_get_image_internal(CanvasBase *canvas, SpiceImage
         !(descriptor->flags & SPICE_IMAGE_FLAGS_CACHE_ME) &&
 #ifdef SW_CANVAS_CACHE
         !(descriptor->flags & SPICE_IMAGE_FLAGS_CACHE_REPLACE_ME) &&
+        !image_has_palette_to_cache(image) &&
 #endif
         (descriptor->type != SPICE_IMAGE_TYPE_GLZ_RGB) &&
         (descriptor->type != SPICE_IMAGE_TYPE_ZLIB_GLZ_RGB)) {
-- 
1.8.1

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]