aboutsummaryrefslogtreecommitdiffstats
path: root/sway/criteria.c
diff options
context:
space:
mode:
authorLibravatar Paul Riou <paul.riou@protonmail.com>2020-11-17 00:26:38 +0000
committerLibravatar Simon Ser <contact@emersion.fr>2020-12-04 10:49:49 +0100
commitb5cc11b2268820fd49151a5a868c5fff285a652c (patch)
treeb2a2dcea5eb3b4261aefd9305182528143b441e6 /sway/criteria.c
parentcommon: make 'lenient_strcmp' arguments const (diff)
downloadsway-b5cc11b2268820fd49151a5a868c5fff285a652c.tar.gz
sway-b5cc11b2268820fd49151a5a868c5fff285a652c.tar.zst
sway-b5cc11b2268820fd49151a5a868c5fff285a652c.zip
criteria: fix crash when comparing NULL properties
For each following combinations of criteria & command below, the command would crash sway without the fix. It's particular about the __focused__ criteria, where the view matches part of the criteria but not the focused app, leading to a failure when calling `strcmp` with NULL. "xterm" is a non-wayland app (X11) and "kitty" is. Both are terminals. # "class" is specific to X11 # The view is X11 (xterm) leading to the criteria checking for the # focused app's class, leading to a crash for_window [class="__focused__"] floating enable exec kitty -e xterm # Similarly, crash as the focused app (xterm) has no app_id when the view has one for_window [app_id="__focused__"] floating enable exec xterm -e kitty # If the view has a title but not the focused app: NULL title will crash criteria checking for_window [title="__focused__"] floating enable exec xterm -title "" -e xterm
Diffstat (limited to 'sway/criteria.c')
-rw-r--r--sway/criteria.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sway/criteria.c b/sway/criteria.c
index 02b04fc8..409160c5 100644
--- a/sway/criteria.c
+++ b/sway/criteria.c
@@ -188,7 +188,7 @@ static bool criteria_matches_view(struct criteria *criteria,
188 188
189 switch (criteria->title->match_type) { 189 switch (criteria->title->match_type) {
190 case PATTERN_FOCUSED: 190 case PATTERN_FOCUSED:
191 if (focused && strcmp(title, view_get_title(focused))) { 191 if (focused && lenient_strcmp(title, view_get_title(focused))) {
192 return false; 192 return false;
193 } 193 }
194 break; 194 break;
@@ -228,7 +228,7 @@ static bool criteria_matches_view(struct criteria *criteria,
228 228
229 switch (criteria->app_id->match_type) { 229 switch (criteria->app_id->match_type) {
230 case PATTERN_FOCUSED: 230 case PATTERN_FOCUSED:
231 if (focused && strcmp(app_id, view_get_app_id(focused))) { 231 if (focused && lenient_strcmp(app_id, view_get_app_id(focused))) {
232 return false; 232 return false;
233 } 233 }
234 break; 234 break;
@@ -260,7 +260,7 @@ static bool criteria_matches_view(struct criteria *criteria,
260 260
261 switch (criteria->class->match_type) { 261 switch (criteria->class->match_type) {
262 case PATTERN_FOCUSED: 262 case PATTERN_FOCUSED:
263 if (focused && strcmp(class, view_get_class(focused))) { 263 if (focused && lenient_strcmp(class, view_get_class(focused))) {
264 return false; 264 return false;
265 } 265 }
266 break; 266 break;