説明
gets は入力長を制限できないため、入力が出力先バッファーを容易に超えてしまいます。
想定される影響
- スタックのバッファーオーバーフロー、クラッシュ、コード実行
対処方法
fgets のように、出力先バッファーのサイズを指定できるAPIを使ってください。
例
変更前
c
char buf[32];
gets(buf);
変更後
c
char buf[32];
fgets(buf, sizeof(buf), stdin);
説明:
- 変更前: 入力長を制限せずにバッファーへ書き込みます。
- 変更後: 出力先配列のサイズを上限として渡します。