64bit環境でバグ発生
先日からx86_64環境に移行したのですが、それ以来Exifデータの解析結果が一部おかしくなっていました。
少し調べてみたところ、unpackを使って4byteのバイナリデータを符号付き整数として読み込む部分が、符号無し整数として扱われているようでした。
なるほど、いかにもintのサイズが32bitから64bitになったら起きそうなバグです。
そんなわけで、PhotoXPを64bit環境で動かしていて、露出補正値がマイナスの値の場合に表示がおかしくなるといった症状が発生している方は、 最新のrubyをビルドして使用するかlib/exifcodec/util.rb内のread_longに手を入れるなりしてみてください。
少し調べてみたところ、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に手を入れるなりしてみてください。
トラックバック(0)
このブログ記事を参照しているブログ一覧: 64bit環境でバグ発生
このブログ記事に対するトラックバックURL: http://www.daifukuya.com/photoxp/mt-tb.cgi/235

コメントする