2016年02月21日

ファイルサイズを求めるのにfseek()とftell()を使ってはいけなかった件

先日も追記しましたが、C言語でファイルサイズを求めるためにfseek() と ftell() を使う方法はダメなようです。


↓やってはいけないコーディング

fseek(fp, 0, SEEK_END);
long fsize = ftell(fp);
fseek(fp, 0, SEEK_SET);


詳細はJPCERTのページで。

要は、動作の保証されていない状態が生じてしまうので、今は上手く動いていたとしても、将来の環境であるとか、将来のバージョンの開発環境であるとか、別のOSに移植しようとしたときとかに、上手く動かなくなる可能性があるというわけですね。

当サイトで開発しているソフトの中の状況としては、「exeファイルが自分自身のMD5を計算し、改鋳や破損が発生していないかセルフチェックする」処理があります。使用箇所は多数。ちょっとヤバイ感じ。

幸い、現行のOS で使う限り、また、Visual Studio 2010 でビルドしている限りでは、実際問題は発生していません。
ただし、JPCERTのページにも書いているとおり、潜在的な脆弱性を作り込んでしまっている状況です。

というわけで、可能な範囲で改修を入れていきたいと考えています。

また同時に、比較的単純な改修で2GB以上のファイルの取り扱いが対応になる箇所にも、改修を入れていこうと思います。

posted by ayacy at 00:00 | Comment(0) | TrackBack(0) | プログラミング