texture-cache: Fix invalid reads when storing used resource scales
The used_scales hash table uses g_double_hash and g_double_equal which try to read a double from the passed pointers. The pointers however were pointing to a float, leading to an invalid read. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/974
This commit is contained in:
parent
9d7a319721
commit
7287ee3651
@ -1443,8 +1443,9 @@ st_texture_cache_load_file_sync_to_cogl_texture (StTextureCache *cache,
|
|||||||
|
|
||||||
if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
|
if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
|
||||||
{
|
{
|
||||||
|
double resource_scale_double = resource_scale;
|
||||||
g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), image);
|
g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), image);
|
||||||
g_hash_table_insert (cache->priv->used_scales, &resource_scale, &resource_scale);
|
g_hash_table_insert (cache->priv->used_scales, &resource_scale_double, &resource_scale_double);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1491,10 +1492,11 @@ st_texture_cache_load_file_sync_to_cairo_surface (StTextureCache *cache,
|
|||||||
|
|
||||||
if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
|
if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
|
||||||
{
|
{
|
||||||
|
double resource_scale_double = resource_scale;
|
||||||
cairo_surface_reference (surface);
|
cairo_surface_reference (surface);
|
||||||
g_hash_table_insert (cache->priv->keyed_surface_cache,
|
g_hash_table_insert (cache->priv->keyed_surface_cache,
|
||||||
g_strdup (key), surface);
|
g_strdup (key), surface);
|
||||||
g_hash_table_insert (cache->priv->used_scales, &resource_scale, &resource_scale);
|
g_hash_table_insert (cache->priv->used_scales, &resource_scale_double, &resource_scale_double);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user