64bit環境でバグ発生

先日からx86_64環境に移行したのですが、それ以来Exifデータの解析結果が一部おかしくなっていました。
少し調べてみたところ、unpackを使って4byteのバイナリデータを符号付き整数として読み込む部分が、符号無し整数として扱われているようでした。


# Fedora Core 5(x86_64) rpmパッケージ版 ruby-1.8.4-3.2
$ /usr/bin/ruby -e 'p "\xff\xff\xff\xff".unpack("l")'
[4294967295]

試しにruby-1.8.4リリース版をソースからビルドしてみると、これもダメ。1.8.4の安定版スナップショットと1.9 CVS最新版スナップショットに関しては直っている事を確認しました。


# Fedora Core 5(x86_64) ruby-1.8.4 stable-snapshot
$ /usr/local/bin/ruby -e 'p "\xff\xff\xff\xff".unpack("l")'
[-1]

といった具合。
なるほど、いかにもintのサイズが32bitから64bitになったら起きそうなバグです。

そんなわけで、PhotoXPを64bit環境で動かしていて、露出補正値がマイナスの値の場合に表示がおかしくなるといった症状が発生している方は、
最新のrubyをビルドして使用するかlib/exifcodec/util.rb内のread_longに手を入れるなりしてみてください。

広告

七人のデジタル侍

samurai.png
PhotoXP掲示板でもお世話になってるプロカメラマン集団、七人のデジ侍の先生方に動きが。今日は土屋さんの誕生日、何か重大発表でもあるのでしょうか。。。?!

関連リンク: