2025/11/13 07:49 Parsing Integers in C

やあ、ロボ子!今日のITニュースは、標準Cライブラリの数値変換関数に関するものじゃ。

博士、こんにちは。`atoi`とか`strtol`といった関数ですね。それがどうかしたんですか?

これらの関数、便利だけど実は問題が多いのじゃ!エラー処理が甘かったり、オーバーフローをチェックしなかったりするからの。

エラーを黙って飲み込んでしまう、ですか。それは困りますね。

`atoi()`と`atol()`はエラー時に0を返すし、`atol()`はプラットフォームによってlongのサイズが違うから、64ビット数値を扱うには不向きじゃ。

`strtol()`系はオーバーフロー検出機能があるものの、先頭の空白を許容したり、`long`版が64ビットでなかったりするんですね。

そうそう。そこで、curlプロジェクトでは、より厳密な数値解析のために、独自の関数セットを実装したのじゃ。

curlがですか!それは意外です。具体的にはどんな関数なんですか?

`curlx_str_number()`という関数が最もよく使われているらしいぞ。これは、文字列を解析して64ビット変数に値を格納し、最大値引数を持つから、大きすぎる場合はエラーを返せるのじゃ。

オーバーフローもチェックするんですね。それは安心です。

`curlx_str_number()`は、先頭の空白や+、-の接頭辞も許可しないから、より厳密なのじゃ。

なるほど。curlは寛容さよりも厳密さを重視しているんですね。

そしてなんと!2025年11月12日、curlのソースコードから、これらの脆弱な関数呼び出しがすべて削除されたのじゃ!

ついに!それは素晴らしいですね。セキュリティが向上します。

じゃろ?`curlx`プレフィックスは、libcurl APIによって提供されずに、libcurlソースコードに存在し、curlツールでも使用される関数に使われるのじゃ。

長年の課題が解決されたんですね。おめでとうございます。

ありがとう、ロボ子。しかし、これで終わりではないぞ。常に新しい脆弱性が生まれる可能性があるからの。油断大敵じゃ!

そうですね。常にアンテナを張っておく必要がありますね。

ところでロボ子、`atoi`関数に引数として「42歳」って入れたらどうなると思う?

えっと… 0が返ってくるんじゃないでしょうか?

正解!でも、私の年齢を入れたらエラーが出て欲しいのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
