view: fix NULL string_prop crash

...when app_id is NULL.

Make sure view_get_string_prop() never returns NULL because it is so easy
to misuse. Same for the respective xwayland/xdg impl methods in case
anyone decides to (incorrectly) call them directly in future.

Fixes: #2453
This commit is contained in:
Johan Malm 2024-12-27 22:37:35 +00:00 committed by Johan Malm
parent bad788ccdd
commit 023427b4f4
3 changed files with 8 additions and 6 deletions

View file

@ -2335,13 +2335,15 @@ view_has_strut_partial(struct view *view)
view->impl->has_strut_partial(view); view->impl->has_strut_partial(view);
} }
/* Note: It is safe to assume that this function never returns NULL */
const char * const char *
view_get_string_prop(struct view *view, const char *prop) view_get_string_prop(struct view *view, const char *prop)
{ {
assert(view); assert(view);
assert(prop); assert(prop);
if (view->impl->get_string_prop) { if (view->impl->get_string_prop) {
return view->impl->get_string_prop(view, prop); const char *ret = view->impl->get_string_prop(view, prop);
return ret ? ret : "";
} }
return ""; return "";
} }

View file

@ -660,10 +660,10 @@ xdg_toplevel_view_get_string_prop(struct view *view, const char *prop)
} }
if (!strcmp(prop, "title")) { if (!strcmp(prop, "title")) {
return xdg_toplevel->title; return xdg_toplevel->title ? xdg_toplevel->title : "";
} }
if (!strcmp(prop, "app_id")) { if (!strcmp(prop, "app_id")) {
return xdg_toplevel->app_id; return xdg_toplevel->app_id ? xdg_toplevel->app_id : "";
} }
return ""; return "";
} }

View file

@ -485,10 +485,10 @@ xwayland_view_get_string_prop(struct view *view, const char *prop)
} }
if (!strcmp(prop, "title")) { if (!strcmp(prop, "title")) {
return xwayland_surface->title; return xwayland_surface->title ? xwayland_surface->title : "";
} }
if (!strcmp(prop, "class")) { if (!strcmp(prop, "class")) {
return xwayland_surface->class; return xwayland_surface->class ? xwayland_surface->class : "";
} }
/* /*
* Use the WM_CLASS 'instance' (1st string) for the app_id. Per * Use the WM_CLASS 'instance' (1st string) for the app_id. Per
@ -500,7 +500,7 @@ xwayland_view_get_string_prop(struct view *view, const char *prop)
* here since we use the app_id for icon lookups. * here since we use the app_id for icon lookups.
*/ */
if (!strcmp(prop, "app_id")) { if (!strcmp(prop, "app_id")) {
return xwayland_surface->instance; return xwayland_surface->instance ? xwayland_surface->instance : "";
} }
return ""; return "";
} }