Mp3Info icon indicating copy to clipboard operation
Mp3Info copied to clipboard

fix: generate exception if codec/layer versions or channel headers are unrecognized

Open joshtrichards opened this issue 10 months ago • 3 comments

Thanks (once again) for the useful library we use over at the Nextcloud project!

While looking into nextcloud/server#44573, I noted we might as well throw an informative exception if the codecVersion, layerVersion, or channel headers are unrecognized.

We're going to error out anyway when we try to use empty values for the array key. Instead of generating generic PHP errors when we go to set the bitRate and sampleRate or vbr_offset we can leave the user a bit less confused about the underlying cause.

I don't even know what MP3s might cause this, but seems reasonable to handle this situation cleanly if possible. :)

joshtrichards avatar Mar 29 '24 21:03 joshtrichards

This is not sufficient, we need to consider CODEC_UNDEFINED, which is not covered by the tables:

        if ($this->codecVersion == self::CODEC_UNDEFINED) {
            throw new \Exception('Codec undefined');
        }

jeremitu avatar Apr 25 '24 12:04 jeremitu

@joshtrichards mind to update your pr with jeremitu's suggestion?

I will patch the copy in nextcloud/3rdparty then.

kesselb avatar Jun 13 '24 08:06 kesselb

Done.

Rather than add a check for it, I dropped CODEC_UNDEFINED outright in the parser. It's "documented" only as reserved from all the mp3 header docs I can find online, including the one referenced from this repo @ http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm

It got added as part of the fix for #14, but that was for MPEG_25 and I think CODEC_UNDEFINED just got tossed in there for completeness at the time. We're not bothering to parse the the "reserved" ones elsewhere (e.g. for the layerVersion) so I don't see why it makes sense to do it for the codecVersion (particularly given all we can do is fail on it later anyhow).

joshtrichards avatar Jun 29 '24 22:06 joshtrichards