萌えハッカーニュースリーダー

2025/04/07 06:51 Writing C for Curl

出典: https://daniel.haxx.se/blog/2025/04/07/writing-c-for-curl/
hakase
博士

ロボ子、今日のITニュースはcurlプロジェクトのC言語安全性ガイドラインじゃ。

roboko
ロボ子

curlですか。よく使いますね。C言語の安全性ガイドラインとは、具体的にどのような内容なのでしょう?

hakase
博士

ふむ、curlプロジェクトでは、C言語のメモリ関連のバグに対する脆弱性に対処するため、厳格なガイドラインを設けているのじゃ。セキュリティ脆弱性の約40%がC言語の使用に起因するらしいぞ。

roboko
ロボ子

40%ですか!それは高いですね。具体的にはどのような対策を?

hakase
博士

可能な限りのテストを実施し、静的コード解析ツールを頻繁に実行、さらにファザーを継続的に実行しておる。過去5年間で重大な脆弱性の報告はないらしいが、低・中リスクの脆弱性は60件以上あるからの。

roboko
ロボ子

テストと解析を徹底しているんですね。他に気をつける点はありますか?

hakase
博士

コードの可読性も重要じゃ。巧妙な構造、複雑なマクロ、オーバーロードは避けるべきじゃな。関数は短く、理解しやすい方が望ましいぞ。

roboko
ロボ子

確かに、可読性が高いコードは保守しやすいですよね。コーディングスタイルについても何か決まりがあるのでしょうか?

hakase
博士

最大行長は80カラム、インデントは2スペース、識別子や名前は短くする、じゃ。

roboko
ロボ子

細かいですね!警告についてはどうでしょう?

hakase
博士

コンパイラの警告は全てエラーとして扱い、解消するのじゃ!220以上のCIジョブで警告なしにビルドする必要があるからの。

roboko
ロボ子

それは徹底していますね。避けるべき関数もあるのでしょうか?

hakase
博士

境界制御やローカル状態がない関数(gets, sprintf, strcat, strtok, localtimeなど)や、複雑な関数(sscanf, strncpyなど)は避けるべきじゃ。

roboko
ロボ子

バッファやメモリに関する対策はありますか?

hakase
博士

動的バッファの処理を統一し、専用のヘルパー関数を使用するのじゃ。各動的バッファには最大サイズを設定し、sscanfの代わりに独自の文字列解析ヘルパー関数を使用するぞ。メモリ割り当てとコピーを同時に行うヘルパー関数を推奨しておる。

roboko
ロボ子

なるほど。整数オーバーフローや64ビットサポートについても考慮されているんですね。

hakase
博士

全ての算術演算でオーバーフローが発生しないことを確認し、2023年初頭に、64ビット整数型をサポートしないシステムでのcurlのビルドを停止したのじゃ。

roboko
ロボ子

入力文字列の長さに制限を設けたり、エラー処理を徹底したり、API/ABIを破壊しないようにしたりと、細かい点まで気を配っているんですね。

hakase
博士

そうじゃ。masterブランチを常に安定した状態に保ち、エラーをチェックし、発生時にはメモリリークを防ぎながら処理を中断するのじゃ。公開関数のAPI/ABIを破壊しないようにするのも重要じゃな。

roboko
ロボ子

レビューや自動ツール、テストスイートにより、誰でもcurlコードを作成可能とのことですが、これはどういう意味ですか?

hakase
博士

誰でもコードを貢献できるように、プロセスが整備されているということじゃな。素晴らしいことじゃ!

roboko
ロボ子

本当ですね。しかし、これだけ多くのルールがあると、逆にバグが生まれそうな気もしますね。

hakase
博士

たしかに!ルールを守るためのルールが必要になるかもじゃな。まるで、ロボ子の掃除機に名前をつけるための委員会を作るようなものじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search