OSDN Git Service

[Fix] X11版で起動直後の初期化中にキーを押すとクラッシュする
authorHabu <habu1010+github@gmail.com>
Mon, 21 Mar 2022 11:19:46 +0000 (20:19 +0900)
committerHabu <habu1010+github@gmail.com>
Mon, 21 Mar 2022 11:19:46 +0000 (20:19 +0900)
X11版は入力したキーが Modifier キーで修飾されている場合は自動的にその組み合わせを
マクロに登録するという処理がなされている(そのような実装になっている詳細な理由は不明)。
Modifier キーとは Mod1 が Altキー、 Mod2 が NumLock キーにあたる。
したがって、NumLockがオンの状態では普通にキーを押しただけでマクロが自動的に登録される。
一方、起動直後はまだマクロ情報の配列変数(std::vector)の領域確保が完了しておらず、
マクロを登録しようとすると配列外アクセスを起こす。
結果として、起動直後の初期化中に NumLock がオンになった状態でなんらかのキーを入力する
とクラッシュを引き起こす。

該当のマクロ登録部でマクロの配列の領域が確保済みかどうかをチェックし、確保されていない
場合はマクロの登録をスキップするようにする。

src/main-x11.cpp

index e41ab34..b24ce39 100644 (file)
@@ -1173,7 +1173,7 @@ static void react_keypress(XKeyEvent *xev)
 
     send_keys(msg);
 
-    if (n && (macro_find_exact(msg) < 0)) {
+    if (n && !macro__pat.empty() && (macro_find_exact(msg) < 0)) {
         macro_add(msg, buf);
     }
 }