github trailofbits/polyfile v0.5.6
PolyFile v0.5.6

6 hours ago

Performance Improvements

  • Lazy loading throughout: Startup time significantly reduced by deferring heavy imports until first use:
    • PDF parser now lazily loads pdfminer only when parsing PDFs
    • NES parser lazily loads PIL/Pillow only when rendering CHR graphics
    • Kaitai parsers load on-demand per format instead of all at once
  • Caching optimizations: descendants(), mimetypes(), and all_extensions() now return cached tuples instead of regenerating on each call

Bug Fixes

  • PDF parser robustness: Fixed crashes on malformed PDF files:
    • Empty lists now return safe zero-length wrappers instead of raising ValueError
    • Malformed dictionary values are now logged and skipped rather than causing crashes
  • Python 3.14 compatibility: Fixed forward reference handling for PEP 649 compliance

New Features

  • Magic test strength scoring: Implemented libmagic-compatible test strength calculation for better match prioritization
  • UTF-16 string support: Extended lestring16/bestring16 to support byte-length modifiers
  • Endianness flip infrastructure: Added foundation for flipped endianness matching (partial implementation)

Magic Definitions

  • Major update: Synced with upstream libmagic definitions
  • New formats: Added detection for bgcode, creativeassembly, keyman, lauterbach, R language, sf3, syd, tapebackup, uxn, and more
  • Expanded coverage: Significant additions to DOS/Windows (+1300 lines), archive (+500 lines), console (+500 lines), images (+680 lines), and Linux (+500 lines) format detection

Breaking Changes

  • Python 3.9 no longer supported: Minimum Python version is now 3.10
  • pdfminer.six version: Now requires version 20251230 or newer

Dependencies

  • Added filelock>=3.20.3
  • Added packaging>=21.0 (replacing deprecated pkg_resources)
  • Updated pdfminer.six requirement to >=20251230

Don't miss a new polyfile release

NewReleases is sending notifications on new releases.