問題の概要
General Skills,Easy
Have you heard of Rust? Fix the syntax errors in this Rust file to print the flag!
(Rustを知っていますか? このRustファイルの構文エラーを修正して、フラグを出力してください!)
提供されたRustのソースコードを修正し、正常に実行させてフラグを獲得する問題です。
解法
ソースコードをダウンロードし、まずは cargo run で実行しながら、コンパイラに指摘されたエラーを順番に修正していきました。
1. セミコロン(;)の付け忘れ
最初の実行で以下のエラーが発生。
error: expected `;`, found keyword `let`
- 原因: 変数定義の末尾にセミコロンがありません
-
対処:
let key = String::from("CSUCKS")の末尾に;を追加
2. フォーマット指定子の不一致
再実行すると、次のエラーが発生。
error: argument never used
-
原因:
println!内で、引数に対して正しくないフォーマット指定子が使われていた(":?")ため、正しいフォーマット指定子{}に修正
3. 未定義の変数名(タイポ)
再実行すると、スコープに関するエラーが発生。
error[E0425]: cannot find value `ret` in this scope
-
原因: 関数内の処理で、定義されていない
retという変数を参照(または呼び出そうと)していました。コメントアウトのHow do we return in rust?より、タイポだと推測 -
対処:
ret;となっていた部分をreturn;に書き換え
結果
すべてのエラーを修正して再度 cargo run を実行したところ、コンパイルが正常に通リ、無事にフラグ文字列が出力されました!
まとめ
Rustの親切なコンパイルエラー(エラードリブン)に従って、
- セミコロンの補完
- マクロのフォーマット修正
- 変数名のタイポ修正
- 制御構文(
return)の修正
を順に行うことでクリアできました。