実行しなくても危険なコピペ
この記事はとあるサークルのOB/OGが行っているN代アドベントカレンダー2024の24日目です。
はじめに
インターネットで拾った野良コードをよく考えずに実行してはいけないという話は皆さん耳タコだと思います。今日びそんな野蛮なことをする人はいないでしょうが、世の中には実行しなくてもエディタに貼り付けただけで悪さをしだすコードもあります。
本題
以下のコードをVSCodeなりRustRoverなり、お好きなエディタに貼り付けてみてください。
......いや、やっぱり貼り付けないでください。
#![allow(dead_code)]
fn main() {
println!("Hello, world!");
}
type T1<T> = (T, T, T, T);
type T2<T> = T1<T1<T1<T1<T>>>>;
type T3<T> = T2<T2<T2<T2<T>>>>;
type S = T3<bool>;
言い忘れましたがもちろんRustのLSPは立ち上がっている前提です。
しばらく待った後のアクティビティモニタの様子が以下になります。
rust-analyzerは普通に使っていてもしばしば重くなるので、だから何だと思うかもしれませんが、問題はCPU使用率が高い状態が延々続くということです。15分くらい前に自分のPCで試したのですが、まだ40%をキープしています。焦ってコピペした分を消しても収まりません。LSPがお陀仏になるので、なんてことはないprintln!
にホバーしてもLoading...
と表示されるだけでいつものようにdocstringがチップで表示されることはありません。
こうなってしまうと、VSCodeの設定からrust-analyzerをOFFにしても、ウィンドウを閉じても、あるいはVSCode自体を終了してもCPU使用率は高いままです。アクティビティモニタやターミナルからrust-analyzerのプロセスをkillするしかありません。
CPU使用率が高いとはいえ固まるほどではないためrust-analyzerの暴走に気づかない可能性もあります。このまま退勤前にVSCodeを閉じて、翌朝出勤後に再度開く、なんてことを何度か繰り返すとその度にrust-analyzerのプロセスが新たに立ちあがり、以下のようになります。バッテリー泥棒の完成です。
教訓
よく考えずにコピペ、ダメ、ゼッタイ。
Discussion