mirror of
https://github.com/swaywm/sway.git
synced 2024-11-21 23:41:27 +00:00
config/output: fix NULL derefs in store_output_config()
../sway/config/output.c:33:21: runtime error: member access within null pointer of type 'struct sway_output'
AddressSanitizer:DEADLYSIGNAL
=================================================================
==7856==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000080 (pc 0x63da8558205c bp 0x7ffdc35881a0 sp 0x7ffdc3588160 T0)
==7856==The signal is caused by a READ memory access.
==7856==Hint: address points to the zero page.
#0 0x63da8558205c in output_get_identifier ../sway/config/output.c:33
#1 0x63da855865c3 in store_output_config ../sway/config/output.c:220
#2 0x63da855d4066 in cmd_output ../sway/commands/output.c:106
#3 0x63da8547f2e3 in config_command ../sway/commands.c:425
#4 0x63da8548f3fc in read_config ../sway/config.c:822
#5 0x63da8548a224 in load_config ../sway/config.c:435
#6 0x63da8548b065 in load_main_config ../sway/config.c:507
#7 0x63da854bee8d in main ../sway/main.c:351
#8 0x77e2ea643ccf (/usr/lib/libc.so.6+0x25ccf) (BuildId: c0caa0b7709d3369ee575fcd7d7d0b0fc48733af)
#9 0x77e2ea643d89 in __libc_start_main (/usr/lib/libc.so.6+0x25d89) (BuildId: c0caa0b7709d3369ee575fcd7d7d0b0fc48733af)
#10 0x63da8547ad64 in _start (/home/simon/src/sway/build/sway/sway+0x372d64) (BuildId: 3fa2e8838c1c32713b40aec6b1e84bbe4db5bde8)
Fixes: 1267e47de9
("config/output: Refactor handling of tiered configs")
This commit is contained in:
parent
1267e47de9
commit
f11c5d562e
|
@ -217,7 +217,10 @@ void store_output_config(struct output_config *oc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
char id[128];
|
char id[128];
|
||||||
output_get_identifier(id, sizeof(id), output);
|
if (output) {
|
||||||
|
output_get_identifier(id, sizeof(id), output);
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < config->output_configs->length; i++) {
|
for (int i = 0; i < config->output_configs->length; i++) {
|
||||||
struct output_config *old = config->output_configs->items[i];
|
struct output_config *old = config->output_configs->items[i];
|
||||||
|
|
||||||
|
@ -240,7 +243,7 @@ void store_output_config(struct output_config *oc) {
|
||||||
|
|
||||||
// If the new config matches an output's name, and the old config
|
// If the new config matches an output's name, and the old config
|
||||||
// matches on that output's identifier, supersede it.
|
// matches on that output's identifier, supersede it.
|
||||||
if (strcmp(old->name, id) == 0 &&
|
if (output && strcmp(old->name, id) == 0 &&
|
||||||
strcmp(oc->name, output->wlr_output->name) == 0) {
|
strcmp(oc->name, output->wlr_output->name) == 0) {
|
||||||
supersede_output_config(old, oc);
|
supersede_output_config(old, oc);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue