dhamaniasad / mutagen

Automatically exported from code.google.com/p/mutagen
GNU General Public License v2.0
2 stars 1 forks source link

mid3v2 terminates TXXX strings with NULL byte #179

Closed randoragon closed 7 months ago

randoragon commented 7 months ago

I don't know if this is the right place for this issue, but the links to issue trackers from the google code page seem to be dead, so here I am :)

I noticed that when writing TXXX frames (e.g. mid3v2 --TXXX Key:Value file.mp3), mid3v2 places a null terminator byte after the Value portion. This byte is not present if using eyeD3 or the Rust id3 crate. Actually, the latter Rust crate reads the null byte as part of the content, which is the reason I noticed this "bug" (eyeD3 ignores the byte when reading, but does not write it). I tried to determine whether this behavior is wanted, but I cannot be 100% certain based on the ID3 Informal standard.

randoragon commented 7 months ago

This old PR on the Rust crate suggests that NULL byte termination for TXXX is not desired: https://github.com/polyfloyd/rust-id3/pull/4 I know this is not a very credible indicator of truth, but just putting it out here.

From my reading of the informal standard, this one sentence makes it clear to me that TXXX is not a "text frame" or a "text information frame" (both terms seem to be used interchangeably):

Only text frame identifiers begin with "T", with the exception of the "TXXX" frame. -- 4.2 Text information frames

If TXXX is not a text frame, then the remark about optional NULL terminators (also section 4.2, a few sentences earlier in the same paragraph as the above quote) should not apply to it. Hence, there doesn't seem to be a reason to put a NULL terminator after a TXXX value, or at the very least, the reason does not come from the definition of text information frames.

randoragon commented 7 months ago

I think I found the correct place for this issue, which already has a similar closed issue: https://github.com/quodlibet/mutagen/issues/379. This is pointless then.