hcmiya / opuscomment

Utility to edit Ogg Opus tags/output gain - Ogg Opusのタグ及びOutput Gain情報をvorbiscomment(1)と互換のあるインターフェイスで編集するユーティリティ
MIT License
18 stars 4 forks source link

編集入力が途切れていても途中までの書式が正しければ編集が適用される #6

Closed hcmiya closed 7 years ago

hcmiya commented 7 years ago

opuscommentが編集を受け入れる前段のフィルタで問題が発生して、テキスト出力をやめてしまったとする。その時、opuscommentは行の途中がNAME=VALUEという形式を満たしてさえいればファイル終端で改行が無くても編集が成立し、タグが書き換わってしまう。

なんでこの話が必要かというと、vorbis commentの仕様としてはレコードが先程の形式を満たしていることと文字列がUTF-8でエンコードされていることが必要だが、Opusのタグの内部形式的には任意のバイナリを保存できるようになっているので、opuscommentが出力モードでそのエラーを検知すると途中まで出力をしたままその場で止まってしまう。一方で入力側は途切れた編集を受け入れられるので、そのまま編集が成立してしまった場合、元のファイルはタグを失うことになってしまい、しかもそれは正常終了で0を返し、おかしな編集があったことに気付かなくなるかも知れない。

例えば、信頼できないOpusファイルがUTF-8として不正なバイト列を持っている場合、それに遭遇するまでは正常に出力されてしまうので、以下のような単純なコマンドでも内容を失う可能性がある。

opuscomment utf8-broken.opus |opuscomment -w some.opus

編集内容を確認しないのはスクリプトが悪いと言われれば、それはその通りなのだが、opuscomment側でも不正な編集や間違った編集に対してそれを検知できれば利用者への負担軽減になるとは思う。

hcmiya commented 7 years ago

さて、出力モード時に内部フォーマットにエラーがあった時にわざと改行でない何文字かを出力して、-Tで受け付けてるopuscommentをエラーにさせる処理を入れて完成かと思ったけど、それってdeferredオプションで事足りるんだよね。だからいらないって事でissue閉じ。