Repository navigation
Conversation
This update includes the following fixes: - Decompressing a compressed ID3v2 frame is now capped at a quarter of the memory limit, or 32 MB when the limit is unknown (GHSA-c2xw-vp6w-gpph). - The QuickTime `stsd`, `dref`, `elst` and `keys` atom parsers no longer trust entry counts larger than the atom's data can hold, which prevents memory exhaustion from crafted files (GHSA-4pp3-6hmx-mfmg). - On PHP < 8.0, `getid3_lib::XML2array()` refuses to parse XML if external entity loading cannot be disabled (GHSA-j649-xr34-mmmh). - Embedded pictures are no longer passed through character set conversion, which corrupted them. - The ID3v2 involved people (IPL, IPLS and TIPL) and musician credits (TMCL) frames are now parsed consistently into role and person pairs. - `replaygain_album_peak` is copied from TXXX frames to the main replay gain data. None of the changes are needed for PHP 8.6 compatibility. As in previous updates, only the audio and video subset of the library that WordPress bundles is updated. All 18 bundled files remain identical to the upstream release. References: * [https://github.com/JamesHeinrich/getID3/releases/tag/v1.9.27 getID3 1.9.27 release notes] * [https://github.com/JamesHeinrich/getID3/releases/tag/v1.9.28 getID3 1.9.28 release notes] * [JamesHeinrich/getID3@v1.9.26...v1.9.28 Full list of changes in getID3 1.9.27 and 1.9.28] Follow-up to r47601, r48278, r52254, r54376, r56975, r61253, r61889, r62087, r63520. Props desrosj. See #00000. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011Y86gx1T9qpKZuJWesSGiZ
Test using WordPress PlaygroundThe changes in this pull request can previewed and tested using a WordPress Playground instance. WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser. Some things to be aware of
For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation. |
|
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. Core Committers: Use this line as a base for the props when committing in SVN: To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. Props Bot commandsYou can trigger Props Bot actions by commenting on this PR:
|
This update includes `1.9.27` and brings bug fixes and hardening improvements: - Entry counts in the QuickTime `stsd`, `dref`, `elst`, and `keys` atoms are now capped to the data available, which prevents memory exhaustion from crafted files. - Decompressing compressed ID3v2 frames is limited to a quarter of the PHP memory limit (or 32MB when unknown). - `getid3_lib::XML2array()` refuses to parse when external entity loading cannot be disabled (PHP < 8.0 only). - Embedded picture data is no longer run through character set conversion. - `replaygain_album_peak` is now read from ID3v2 `TXXX` frames. The involved people list frames (ID3v2.2 `IPL`, ID3v2.3 `IPLS`) and the ID3v2.4 `TIPL` and `TMCL` frames are now parsed into `position`/`person` pairs. Because `wp_add_id3_tag_data()` stores the first value for each key, the `involved_people_list` and `musician_credits_list` attachment metadata values for newly uploaded audio files will now contain only the first pair. These values are not displayed anywhere in Core, and this only applies to newly uploaded files (preexisting metadata values are unchanged). Only the bundled audio/video subset was updated. No modules were added, and all bundled files are identical to upstream v1.9.28. References: * [https://github.com/JamesHeinrich/getID3/releases/tag/v1.9.27 getID3 1.9.27 release notes] * [https://github.com/JamesHeinrich/getID3/releases/tag/v1.9.28 getID3 1.9.28 release notes] * [JamesHeinrich/getID3@v1.9.26...v1.9.28 Full list of changes in getID3 1.9.28] Developed in #15878. Follow-up to r47601, r48278, r52254, r54376, r56975, r61253, r61889, r62087, r63520. Props desrosj, johnbillion. Fixes #66646. git-svn-id: https://develop.svn.wordpress.org/trunk@65437 602fd350-edb4-49c9-b593-d223f7449a82
This update includes `1.9.27` and brings bug fixes and hardening improvements: - Entry counts in the QuickTime `stsd`, `dref`, `elst`, and `keys` atoms are now capped to the data available, which prevents memory exhaustion from crafted files. - Decompressing compressed ID3v2 frames is limited to a quarter of the PHP memory limit (or 32MB when unknown). - `getid3_lib::XML2array()` refuses to parse when external entity loading cannot be disabled (PHP < 8.0 only). - Embedded picture data is no longer run through character set conversion. - `replaygain_album_peak` is now read from ID3v2 `TXXX` frames. The involved people list frames (ID3v2.2 `IPL`, ID3v2.3 `IPLS`) and the ID3v2.4 `TIPL` and `TMCL` frames are now parsed into `position`/`person` pairs. Because `wp_add_id3_tag_data()` stores the first value for each key, the `involved_people_list` and `musician_credits_list` attachment metadata values for newly uploaded audio files will now contain only the first pair. These values are not displayed anywhere in Core, and this only applies to newly uploaded files (preexisting metadata values are unchanged). Only the bundled audio/video subset was updated. No modules were added, and all bundled files are identical to upstream v1.9.28. References: * [https://github.com/JamesHeinrich/getID3/releases/tag/v1.9.27 getID3 1.9.27 release notes] * [https://github.com/JamesHeinrich/getID3/releases/tag/v1.9.28 getID3 1.9.28 release notes] * [JamesHeinrich/getID3@v1.9.26...v1.9.28 Full list of changes in getID3 1.9.28] Developed in WordPress/wordpress-develop#15878. Follow-up to r47601, r48278, r52254, r54376, r56975, r61253, r61889, r62087, r63520. Props desrosj, johnbillion. Fixes #66646. Built from https://develop.svn.wordpress.org/trunk@65437 git-svn-id: http://core.svn.wordpress.org/trunk@64576 1a063a9b-81f0-0310-95a4-ce76da25c4cd
Updates the bundled getID3 library from 1.9.26 to 1.9.28, which includes 1.9.27.
Trac ticket: https://core.trac.wordpress.org/ticket/66646
Changes
This applies bug fixes and hardening improvements.
How this follows previous updates
license.txtandreadme.txt) were identical to upstream v1.9.26, so there are no local patches to carry forward. After it, all 18 are identical to upstream v1.9.28. Only 4 files changed:getid3.php,getid3.lib.php,module.audio-video.quicktime.phpandmodule.tag.id3v2.php.phpcompat.xml.distmatch on file path, so they still apply.phpcs.xml.distexcludessrc/wp-includes/ID3/entirely.Behavior change for reviewers
wp_add_id3_tag_data()storesreset( $list )for each key in$data['id3v2']['comments']. #510 changes the shape of two of those keys:involved_people_list(IPL and IPLS) used to be a list containing one array of pairs, so WordPress stored every pair. It's now the array of pairs itself, soreset()stores only the firstarray( 'position' => …, 'person' => … )pair.involved_people_list(TIPL) andmusician_credits_list(TMCL) in ID3v2.4 tags used to be parsed as plain text frames. They are now parsed into the same pairs.This only affects attachment metadata for audio files that have these frames, and it's displayed nowhere in core. It may be worth keeping the old shape for these keys in
wp_add_id3_tag_data(), or deciding it's acceptable.Testing
php -lon all bundled files: passes. Run on PHP 8.6.0-dev.vendor/bin/phpcs --standard=phpcompat.xml.dist src/wp-includes/ID3/: clean.wp_read_audio_metadata()andwp_read_video_metadata()tests intests/phpunit/tests/media.php.Use of AI Tools
wp_add_id3_tag_data(), running the checks above, and drafting this description. I reviewed the result.🤖 Generated with Claude Code
https://claude.ai/code/session_011Y86gx1T9qpKZuJWesSGiZ
This Pull Request is for code review only. Please keep all other discussion in the Trac ticket. Do not merge this Pull Request. See GitHub Pull Requests for Code Review in the Core Handbook for more details.