aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPo Lu2022-05-15 09:30:07 +0800
committerPo Lu2022-05-15 09:30:07 +0800
commit8e592973782e38be75faed39f557642bbae6aec5 (patch)
treecc10539ed6995f6d966cefd7f48006608f1c80a3 /src
parent003dc93f93994c1fc568a7844623fa65f9d33448 (diff)
downloademacs-8e592973782e38be75faed39f557642bbae6aec5.tar.gz
emacs-8e592973782e38be75faed39f557642bbae6aec5.zip
Prevent crashes trying to access nonexistent key
* src/xsettings.c (xg_settings_key_valid_p): New function. (apply_gsettings_font_antialias): Test that `font-aliasing' is actually available. (bug#55416)
Diffstat (limited to 'src')
-rw-r--r--src/xsettings.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/src/xsettings.c b/src/xsettings.c
index e71887e03d9..16625bd229f 100644
--- a/src/xsettings.c
+++ b/src/xsettings.c
@@ -268,17 +268,47 @@ apply_gsettings_font_hinting (GSettings *settings)
268 } 268 }
269} 269}
270 270
271static bool
272xg_settings_key_valid_p (GSettings *settings, const char *key)
273{
274#ifdef GLIB_VERSION_2_32
275 GSettingsSchema *schema;
276 bool rc;
277
278 g_object_get (G_OBJECT (settings),
279 "settings-schema", &schema,
280 NULL);
281
282 if (!schema)
283 return false;
284
285 rc = g_settings_schema_has_key (schema, key);
286 g_settings_schema_unref (schema);
287
288 return rc;
289#else
290 return false;
291#endif
292}
293
271/* Apply changes in the antialiasing system setting. */ 294/* Apply changes in the antialiasing system setting. */
272static void 295static void
273apply_gsettings_font_antialias (GSettings *settings) 296apply_gsettings_font_antialias (GSettings *settings)
274{ 297{
275 GVariant *val = g_settings_get_value (settings, GSETTINGS_FONT_ANTIALIASING); 298 GVariant *val;
299 const char *antialias;
300
301 if (!xg_settings_key_valid_p (settings, GSETTINGS_FONT_ANTIALIASING))
302 return;
303
304 val = g_settings_get_value (settings, GSETTINGS_FONT_ANTIALIASING);
305
276 if (val) 306 if (val)
277 { 307 {
278 g_variant_ref_sink (val); 308 g_variant_ref_sink (val);
279 if (g_variant_is_of_type (val, G_VARIANT_TYPE_STRING)) 309 if (g_variant_is_of_type (val, G_VARIANT_TYPE_STRING))
280 { 310 {
281 const char *antialias = g_variant_get_string (val, NULL); 311 antialias = g_variant_get_string (val, NULL);
282 312
283 if (!strcmp (antialias, "none")) 313 if (!strcmp (antialias, "none"))
284 cairo_font_options_set_antialias (font_options, 314 cairo_font_options_set_antialias (font_options,