Skip to content

Commit d5fed6b

Browse files
committed
Media: Prevent fatal error if metadata is an array.
Check the data type of ID3 data on import before running `wp_kses_post` or `wp_kses_post_deep` to fix a fatal error thrown when attempting to run `wp_kses_post` on non-string content in PHP 8.2+. Adds unit tests to verify. Props sllimrovert, ankitkumarshah, rollybueno, wpfy, hmbashar, SirLouen, johnbillion, huzaifaalmesbah, sandeepdahiya, sourabhjain, poojapadamad, joedolson. Fixes #63529. git-svn-id: https://develop.svn.wordpress.org/trunk@61098 602fd350-edb4-49c9-b593-d223f7449a82
1 parent d8df46a commit d5fed6b

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

src/wp-admin/includes/media.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3534,7 +3534,7 @@ function wp_add_id3_tag_data( &$metadata, $data ) {
35343534
if ( ! empty( $data[ $version ]['comments'] ) ) {
35353535
foreach ( $data[ $version ]['comments'] as $key => $list ) {
35363536
if ( 'length' !== $key && ! empty( $list ) ) {
3537-
$metadata[ $key ] = wp_kses_post( reset( $list ) );
3537+
$metadata[ $key ] = is_array( $list ) ? wp_kses_post_deep( reset( $list ) ) : wp_kses_post( $list );
35383538
// Fix bug in byte stream analysis.
35393539
if ( 'terms_of_use' === $key && str_starts_with( $metadata[ $key ], 'yright notice.' ) ) {
35403540
$metadata[ $key ] = 'Cop' . $metadata[ $key ];
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
/**
3+
* Tests for the `wp_add_id3_tag_data()` function.
4+
*
5+
* @group media
6+
* @covers ::wp_add_id3_tag_data
7+
*/
8+
class Tests_Media_WpAddId3TagData extends WP_UnitTestCase {
9+
10+
/**
11+
* Performs cleanup after each test.
12+
*/
13+
public function tear_down() {
14+
$this->remove_added_uploads();
15+
parent::tear_down();
16+
}
17+
18+
/**
19+
* Test that wp_add_id3_tag_data handles non-string data without fatal error.
20+
*
21+
* @ticket 63529
22+
*/
23+
public function test_wp_add_id3_tag_data_handles_non_string_data() {
24+
$metadata = array();
25+
26+
// Simulate ID3 data with array values that cause wp_kses_post to fail
27+
$data = array(
28+
'id3v2' => array(
29+
'comments' => array(
30+
'artist' => 'The Northern Lights Ensemble',
31+
'album' => 'Horizons and Beyond',
32+
'title' => 'Aurora Rising',
33+
'involved_people' => array(
34+
array(
35+
'role' => 'Mastered by Lead Audio Engineer',
36+
'name' => 'Emma Clarke',
37+
),
38+
array(
39+
'role' => 'Mixed by Senior Sound Designer',
40+
'name' => 'Daniel Perez',
41+
),
42+
),
43+
),
44+
),
45+
);
46+
47+
// This should not cause a fatal error when wp_kses_post receives array values
48+
wp_add_id3_tag_data( $metadata, $data );
49+
50+
// Verify the function handled the array data gracefully
51+
$this->assertIsArray( $metadata );
52+
$this->assertArrayHasKey( 'artist', $metadata );
53+
$this->assertArrayHasKey( 'album', $metadata );
54+
$this->assertArrayHasKey( 'title', $metadata );
55+
$this->assertArrayHasKey( 'involved_people', $metadata );
56+
}
57+
}

0 commit comments

Comments
 (0)