waycrate / swhkd

Sxhkd clone for Wayland (works on TTY and X11 too)
https://git.sr.ht/~shinyzenith/swhkd
BSD 2-Clause "Simplified" License
690 stars 47 forks source link

index out of bounds #222

Open tsankuanglee opened 1 year ago

tsankuanglee commented 1 year ago

Version Information

Describe the bug

In the process of trying to do #219 , I accidentally found that a wrong config could cause index out of bounds.

Expected behavior

Even though the config is wrong, we expect swhkd to catch it and quit gracefully.

Actual behavior

See log:

[2023-08-24T07:24:51Z TRACE swhks] Setting process umask.
[2023-08-24T07:24:51Z INFO  swhks] XDG_RUNTIME_DIR Variable is present, using it's value as default file path.
[2023-08-24T07:24:51Z TRACE swhks] Reading /run/user/1000/swhks.pid file and checking for running instances.
[2023-08-24T07:24:51Z DEBUG swhks] Previous PID: 191474
[2023-08-24T07:24:51Z TRACE swhkd] Logger initialized.
[2023-08-24T07:24:51Z TRACE swhkd] Invoking UID: 1000
[2023-08-24T07:24:51Z TRACE swhkd] Setting process umask.
[2023-08-24T07:24:51Z ERROR swhkd] XDG_RUNTIME_DIR has not been set.
[2023-08-24T07:24:51Z TRACE swhkd] Reading /run/swhkd/swhkd_1000.pid file and checking for running instances.
[2023-08-24T07:24:51Z DEBUG swhkd] Previous PID: 191496
[2023-08-24T07:24:52Z TRACE swhks] Sockfile exists, attempting to remove it.
[2023-08-24T07:24:52Z DEBUG swhks] Removed old socket file
[2023-08-24T07:24:52Z WARN  swhkd] Running swhkd as root!
[2023-08-24T07:24:52Z DEBUG swhkd::perms] Setting initgroups...
[2023-08-24T07:24:52Z DEBUG swhkd::perms] Setting EGID...
[2023-08-24T07:24:52Z DEBUG swhkd::perms] Setting EUID...
[2023-08-24T07:24:52Z DEBUG swhkd] Using config file path: "/home/user/.config/swhkd/swhkdrc.test.conf"
[2023-08-24T07:24:52Z DEBUG swhkd::perms] Setting EGID...
[2023-08-24T07:24:52Z DEBUG swhkd::perms] Setting EUID...
[2023-08-24T07:24:52Z DEBUG swhkd::perms] Setting initgroups...
[2023-08-24T07:24:52Z TRACE swhkd] Attempting to find all keyboard file descriptors.
[2023-08-24T07:24:52Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:52Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z DEBUG swhkd] Keyboard: <REDACTED>
[2023-08-24T07:24:53Z DEBUG swhkd] Keyboard: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z DEBUG swhkd] Keyboard: <REDACTED>
[2023-08-24T07:24:53Z DEBUG swhkd] Keyboard: <REDACTED>
[2023-08-24T07:24:53Z DEBUG swhkd] Keyboard: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z DEBUG swhkd] Keyboard: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z TRACE swhkd] Other: <REDACTED>
[2023-08-24T07:24:53Z DEBUG swhkd] 6 Keyboard device(s) detected.
[2023-08-24T07:24:53Z ERROR swhkd] XDG_RUNTIME_DIR has not been set.
[2023-08-24T07:25:02Z DEBUG swhkd] state_modifiers: {
        Super,
        Control,
        Shift,
        Alt,
    }
[2023-08-24T07:25:02Z DEBUG swhkd] state_keysyms: {}
[2023-08-24T07:25:02Z DEBUG swhkd] hotkey: [
        Hotkey {
            keybinding: KeyBinding {
                keysym: KEY_E,
                modifiers: [
                    Alt,
                    Control,
                    Shift,
                    Super,
                ],
                send: false,
                on_release: false,
            },
            command: "@escape && touch /tmp/test && @enter hello && @enter hello2",
        },
    ]
[2023-08-24T07:25:02Z DEBUG swhkd] state_modifiers: {
        Super,
        Control,
        Shift,
        Alt,
    }
[2023-08-24T07:25:02Z DEBUG swhkd] state_keysyms: {
        KEY_E,
    }
[2023-08-24T07:25:02Z DEBUG swhkd] hotkey: [
        Hotkey {
            keybinding: KeyBinding {
                keysym: KEY_E,
                modifiers: [
                    Alt,
                    Control,
                    Shift,
                    Super,
                ],
                send: false,
                on_release: false,
            },
            command: "@escape && touch /tmp/test && @enter hello && @enter hello2",
        },
    ]
[2023-08-24T07:25:02Z INFO  swhkd] Hotkey pressed: Hotkey {
        keybinding: KeyBinding {
            keysym: KEY_E,
            modifiers: [
                Alt,
                Control,
                Shift,
                Super,
            ],
            send: false,
            on_release: false,
        },
        command: "@escape && touch /tmp/test && @enter hello && @enter hello2",
    }
thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 18446744073709551615', swhkd/src/daemon.rs:356:25
stack backtrace:
   0:     0x560f08029be7 - <unknown>
   1:     0x560f07f98f7c - <unknown>
   2:     0x560f080088f4 - <unknown>
   3:     0x560f0802aa76 - <unknown>
   4:     0x560f0802bae3 - <unknown>
   5:     0x560f0802b5a2 - <unknown>
   6:     0x560f0802b516 - <unknown>
   7:     0x560f0802b4d2 - <unknown>
   8:     0x560f07f0a512 - <unknown>
   9:     0x560f07f0a591 - <unknown>
  10:     0x560f07f43291 - <unknown>
  11:     0x560f07f2ea60 - <unknown>
  12:     0x560f07f18993 - <unknown>
  13:     0x560f07f43db0 - <unknown>
  14:     0x7f6745a27cd0 - <unknown>
  15:     0x7f6745a27d8a - __libc_start_main
  16:     0x560f07f17485 - <unknown>
  17:                0x0 - <unknown>
/home/user/.config/systemd/user/swhkd_wrapper.sh: line 3: 191722 Aborted                 (core dumped) RUST_BACKTRACE=full swhkd --config /home/user/.config/swhkd/swhkdrc.test.conf --debug

To Reproduce

/home/user/.config/swhkd/swhkdrc.test.conf

alt + ctrl + shift + super + e
    @escape && touch /tmp/test && @enter hello && @enter hello2
mode hello1 swallow
1
    @escape && touch /tmp/hello1
endmode
mode hello2 swallow
2
    @escape && touch /tmp/hello2
endmode

startup script

#!/usr/bin/env bash

killall swhks
sudo pkill -9 swhkd
swhks & pkexec env RUST_BACKTRACE=full swhkd --config /home/user/.config/swhkd/swhkdrc.test.conf --debug

keys pressed

alt+ctrl+shift+super+e The error occurred as soon as these keys are down.

tsankuanglee commented 1 year ago

This one is less strange, but it creates a similar error as well:

alt + ctrl + shift + super + e
    @escape && touch /tmp/test && @enter screenshot

mode screenshot swallow
5
    @escape && touch /tmp/test.5
endmode

error:

thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 18446744073709551615', swhkd/src/daemon.rs:318:68