Skip to content

mef3io 2.1.1

Released 2026-10-31

A patch release that closes a privacy gap in writing annotations and adds a validator check for it. It also ships the MATLAB package that 2.1.0's release was missing. Nothing that worked correctly changes.

Fixed

  • Annotations in a password-protected session were stored unencrypted when the Writer had no level-1 password (#167). A Writer opened on an encrypted session with password1 empty and password2 given created a new record file (.rdat) at a level that had none yet, with the note text in plaintext. The session now decides: every annotation write to a password-protected session needs BOTH correct passwords, otherwise it raises PasswordError before any file or folder is created. A channel is judged by its own metadata, the session level by "any channel protected"; an unprotected session refuses passwords for annotations; a brand-new session takes both passwords or none. The check is made once per Writer. Output for the correct pair is unchanged.
  • New validator check records.encryption (error, detect only). Flags a record file whose protection differs from its session's (error; for example the plaintext file above) and a protected header over unencrypted bodies, as the legacy mef_tools writes (warning). Channel and session level files have segment == -1. It is not repairable because fixing it means re-encrypting record bodies; copy the annotations out and write them again with both passwords.
  • MATLAB package for 2.1.x. The 2.1.0 release's MATLAB step stopped on an out-of-date expectation in its own round-trip test (the session now also holds the channels written with writeInt32Many), so 2.1.0 shipped without the MATLAB bundle; this release includes it.

Upgrading from 2.1.0

Nothing to change for code that passes both passwords to a Writer on a password-protected session, or none on an unprotected one. Code that wrote annotations with only the level-2 password, or with passwords on an unprotected session, now gets PasswordError instead of a file other tools cannot read correctly. Run python -m mef3io validate <session> to find annotation files written that way before this release.