> > > > From: Marc-André Lureau <marcandre.lureau@xxxxxxxxx> > > > > --- > > server/dcc.c | 12 +++++++----- > > 1 file changed, 7 insertions(+), 5 deletions(-) > > > > diff --git a/server/dcc.c b/server/dcc.c > > index bb6001e..8e25c67 100644 > > --- a/server/dcc.c > > +++ b/server/dcc.c > > @@ -343,7 +343,8 @@ static RedGlzDrawable > > *get_glz_drawable(DisplayChannelClient *dcc, Drawable *dra > > NOTE - the caller should set the glz_instance returned by the encoder > > by > > itself.*/ > > static GlzDrawableInstanceItem *add_glz_drawable_instance(RedGlzDrawable > > *glz_drawable) > > { > > - spice_assert(glz_drawable->instances_count < > > MAX_GLZ_DRAWABLE_INSTANCES); > > + spice_return_val_if_fail(glz_drawable->instances_count < > > MAX_GLZ_DRAWABLE_INSTANCES, NULL); > > + > > // NOTE: We assume the additions are performed consecutively, without > > removals in the middle > > GlzDrawableInstanceItem *ret = glz_drawable->instances_pool + > > glz_drawable->instances_count; > > glz_drawable->instances_count++; > > This will lead to a core on caller. Better the assert which stop with a > proper error. > > > @@ -363,11 +364,12 @@ int dcc_compress_image_glz(DisplayChannelClient *dcc, > > SpiceImage *dest, SpiceBitmap *src, Drawable > > *drawable, > > compress_send_data_t* o_comp_data) > > { > > + spice_return_val_if_fail(bitmap_fmt_is_rgb(src->format), FALSE); > > + > > DisplayChannel *display_channel = DCC_TO_DC(dcc); > > #ifdef COMPRESS_STAT > > stat_time_t start_time = stat_now(display_channel->glz_stat.clock); > > #endif > > - spice_assert(bitmap_fmt_is_rgb(src->format)); > > GlzData *glz_data = &dcc->glz_data; > > ZlibData *zlib_data; > > LzImageType type = MAP_BITMAP_FMT_TO_LZ_IMAGE_TYPE[src->format]; > > @@ -498,7 +500,7 @@ int dcc_compress_image_lz(DisplayChannelClient *dcc, > > } else { > > /* masks are 1BIT bitmaps without palettes, but they are not > > compressed > > * (see fill_mask) */ > > - spice_assert(src->palette); > > + spice_return_val_if_fail(src->palette, FALSE); > > dest->descriptor.type = SPICE_IMAGE_TYPE_LZ_PLT; > > dest->u.lz_plt.data_size = size; > > dest->u.lz_plt.flags = src->flags & SPICE_BITMAP_FLAGS_TOP_DOWN; > > These would make sense if upper layer could deal with it. > Actually is not! > When dcc_compress_image is called is expected to have the compressed image > set > but in these cases image is not initialized properly causing potentially > crashes or leaking of information. > > > @@ -976,7 +978,7 @@ int dcc_pixmap_cache_unlocked_add(DisplayChannelClient > > *dcc, uint64_t id, > > uint64_t serial; > > int key; > > > > - spice_assert(size > 0); > > + spice_return_val_if_fail(size > 0, FALSE); > > > > item = spice_new(NewCacheItem, 1); > > serial = > > red_channel_client_get_message_serial(RED_CHANNEL_CLIENT(dcc)); > > This could make sense but if spice-server accept an image where width * > height == 0 > (size is unsigned so this condition is the same as size == 0) there should be > no > warning/error/abortion, if it does not accept such images (which I think is > the case) > it means a corruption happen and assert is perfectly fine. > > > @@ -1005,7 +1007,7 @@ int > > dcc_pixmap_cache_unlocked_add(DisplayChannelClient > > *dcc, uint64_t id, > > > > now = &cache->hash_table[BITS_CACHE_HASH_KEY(tail->id)]; > > for (;;) { > > - spice_assert(*now); > > + spice_return_val_if_fail(*now, FALSE); > > if (*now == tail) { > > *now = tail->next; > > break; > > This is a ring, if you get a NULL there is a memory/structure corruption so > assert is fine. > Rejected Frediano _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel