DiffDaily Deep & Concise - OSS変更の定点観測
トップに戻る

rails/marcel

https://github.com/rails/marcel

AVIS (AVIF Image Sequence) のマジック検出を追加

marcel に AVIS 用マジックが追加され、AVIF アニメーションを正しく MIME タイプとして検出できるようになり、Issue #150 の誤判定が解消されました。

2026年06月02日 gpt-oss-120b

`image/bmp;format=compressed` を `image/bmp` へ統一し後方互換性を回復

Marcel 1.2.0でBMPファイルのMIMEタイプが `image/bmp;format=compressed` に変更されたことで生じていたRailsとの後方互換性の問題を修正。生成スクリプトに `TYPE_RENAMES` テーブルを導入し、MIMEデータベース由来の値を `image/bmp` に置き換えることで根本的な解決を図っています。

2026年05月20日 Claude Sonnet 4.6

HTMLマジックバイト検出を「末尾チェック」で強化し、コメント先行問題を解消

HTMLファイルの先頭に長いコメントが置かれると `application/xml` と誤判定される問題を修正。16個の固定文字列パターンを正規表現2つに集約し、先頭チェックに加えてファイル末尾の `</html>` タグを確認することで、コメント長に依存しない堅牢なHTML検出を実現しました。

2026年05月20日 Claude Sonnet 4.6

`magic_match_io` の正規表現マッチングに `seek` を統合してコードを一本化

`magic_match_io` の正規表現マッチング処理を `match_regex` メソッドから統合し、オフセット指定を含む全パターンで `io_seek` を使う統一実装に変更。IO 読み取りとマッチング判定の分離により、コードの重複と nil チェックの不統一も解消されました。

2026年05月20日 Claude Sonnet 4.6

IOのシーク操作を活用して不要なバッファ読み込みを回避

marcelのマジックバイト判定において、オフセット移動処理を `IO#read` から `IO#seek` に切り替える最適化が行われました。シーク可能なIOでは不要なデータをメモリに読み込まずポインタ移動のみで処理でき、オフセットが `0` の場合は操作自体をスキップします。`Rack::RewindableInput` など `seek` 非対応のIOへは従来どおり `io.read` でフォールバックします。

2026年05月20日 Claude Sonnet 4.6

`application/vnd.java.hprof` の末尾スペースバグを修正し、正規表現マッチングを追加

Tikaのhprof定義に含まれていた末尾スペース付きMIMEタイプ `application/vnd.java.hprof ` が、生成スクリプトを通じてそのまま `tables.rb` に出力されていた問題を修正しました。スクリプト側で `key.strip` を適用する根本対策に加え、Javaヒープダンプの正規表現マジックバイト検出をホワイトリストに追加しています。

2026年05月20日 Claude Sonnet 4.6

PKCS#8秘密鍵ファイルのMIMEタイプ検出を追加

MarcelにPKCS#8秘密鍵ファイル(`.p8`)のMIMEタイプ検出が追加されました。ファイル先頭の `-----BEGIN PRIVATE KEY-----` をマジックバイトとして `application/pkcs8` を識別する1行の定義追加により、Active Storageを利用するアプリケーションで `.p8` ファイルのコンテンツタイプバリデーションが正常に動作するようになります。

2026年05月20日 Claude Sonnet 4.6

`tika.xml` の正規表現ルールをMIMEタイプ判定に組み込む

Apache Tikaの `tika.xml` に定義された正規表現マッチルールをMarcelのMIMEタイプ判定に組み込むPRです。JavaとRubyの正規表現エンジンの差異を吸収する `TikaRegex` モジュールを生成スクリプトに追加し、ランタイムには `match_regex` メソッドを追加。当面は `text/html` と `application/x-bzip2` のみを有効化し、これまで `MAGIC` 定数に誤って混入していた無効な正規表現エントリも同時に除去しています。

2026年05月20日 Claude Sonnet 4.6

GPXファイルのMIMEタイプ検出サポートを追加

MarcelにGPS Exchange Format(GPX)の検出サポートが追加されました。拡張子マッピング・マジックバイト検出・サブクラス関係の3層で登録されることで、GPXファイルが汎用の `application/xml` ではなく `application/gpx+xml` として正しく識別されるようになります。

2026年05月20日 Claude Sonnet 4.6

Sony RAW画像フォーマット(ARW)のマジックバイト検出を追加

marcelにSony ARW(RAW画像)フォーマットのマジックバイト検出が追加されました。ARWはTIFFのバイトオーダーマーカーを共有するため、先頭4KB内の`SONY`文字列を2次条件として組み合わせることでTIFFとの識別を実現しています。マジックテーブルでの`image/tiff`より前への配置により、コンテンツベースで正確にSony RAWファイルを識別できます。

2026年05月20日 Claude Sonnet 4.6

WMV/WMAのMIMEタイプ誤検出をUnicode文字列対応で修正

WMVおよびWMAのマジックバイト検出パターンをASCII文字列からUTF-16LEバイト列に変更し、PDFやMP3が誤ってWMV/WMAと判定されるバグを修正しました。ASFコンテナフォーマットではメタデータ文字列がUTF-16LEで格納されるという仕様に準拠した対応です。テーブル生成スクリプトにunicodeLE/unicodeBE型のサポートも追加されています。

2026年05月20日 Claude Sonnet 4.6

BOM付きCSVファイルのMIMEタイプ誤検出に対するフィクスチャ追加

BOM(Byte Order Mark)付きCSVファイルが `text/plain` として誤検出される問題(#103)に対し、`text/csv` として正しく検出されることを保証するテストフィクスチャが追加されました。コード変更は伴わず、ディレクトリパスが期待MIMEタイプを示すmarcelのフィクスチャ命名規則に従い、実際のBOMバイト列を含むCSVファイルを配置することでリグレッション防止が図られています。

2026年05月20日 Claude Sonnet 4.6

HTML検出ロジックの改善:ファイル先頭の厳密なマッチングで誤検知を解消

JSONファイル内にHTMLタグが含まれる場合に text/html と誤検知される問題を修正しました。マジックバイトの照合範囲をファイル先頭64バイト以内から厳密なオフセット0に限定することで、JSON・CSVなど他フォーマットのコンテンツにHTMLタグが含まれていても誤判定しなくなっています。

2026年05月20日 Claude Sonnet 4.6

SVG検出ロジックの強化:誤検出を防ぐマジックバイト戦略

marcelのSVG検出において、ファイル先頭4096バイト以内に`<svg`が存在するだけでSVGと判定していた旧ルールを、SVGファイルの実際の先頭構造(XML宣言・DOCTYPE・コメント等)に基づく複数ルールへ置き換えました。JSやCSV、MP3が誤って`image/svg+xml`と判定されていた問題(Issue #107、#111、#125)が修正されます。

2026年05月20日 Claude Sonnet 4.6

マジックバイト検出時のIO状態破壊を修正

`Marcel::MimeType.for(io)` がMIME判定後もIOのエンコーディングをASCII-8BITに変更し続けていた問題を修正。`io.binmode` と `io.set_encoding(Encoding::BINARY)` はバイナリバッファ経由の読み取りには不要な冗長コードであり、これを削除することでRuby 3.4の警告対策として追加されていたWorkaroundも同時に不要になりました。

2026年05月20日 Claude Sonnet 4.6

Ruby 3.4の凍結文字列警告をStringIOで解決

Ruby 3.4の凍結文字列警告に対応。StringIOを読み取り専用にすることで、binmodeやset_encoding呼び出し時の警告を解消。Ruby 3.5での上流修正までの一時的なワークアラウンド。

2026年01月24日 Claude Sonnet 4.5

© 2026 DiffDaily - Powered by AI

タケユー・ウェブ