@@ -16,283 +16,42 @@ public function tear_down() {
1616 }
1717
1818 /**
19- * Test wp_add_id3_tag_data() with ID3v2 comments.
19+ * Test that wp_add_id3_tag_data handles non-string data without fatal error.
20+ *
21+ * @ticket 63529
2022 */
21- public function test_wp_add_id3_tag_data_id3v2_comments () {
23+ public function test_wp_add_id3_tag_data_handles_non_string_data () {
2224 $ metadata = array ();
23- $ data = array (
24- 'id3v2 ' => array (
25- 'comments ' => array (
26- 'title ' => array ( 'Test Title ' ),
27- 'artist ' => array ( 'Test Artist ' ),
28- 'album ' => array ( 'Test Album ' ),
29- 'year ' => array ( '2024 ' ),
30- 'length ' => array ( '3:45 ' ), // Should be ignored
31- ),
32- ),
33- );
34-
35- wp_add_id3_tag_data ( $ metadata , $ data );
36-
37- $ this ->assertEquals ( 'Test Title ' , $ metadata ['title ' ] );
38- $ this ->assertEquals ( 'Test Artist ' , $ metadata ['artist ' ] );
39- $ this ->assertEquals ( 'Test Album ' , $ metadata ['album ' ] );
40- $ this ->assertEquals ( '2024 ' , $ metadata ['year ' ] );
41- $ this ->assertArrayNotHasKey ( 'length ' , $ metadata );
42- }
43-
44- /**
45- * Test wp_add_id3_tag_data() with ID3v1 comments.
46- */
47- public function test_wp_add_id3_tag_data_id3v1_comments () {
48- $ metadata = array ();
49- $ data = array (
50- 'id3v1 ' => array (
51- 'comments ' => array (
52- 'title ' => array ( 'Test Title ' ),
53- 'artist ' => array ( 'Test Artist ' ),
54- 'album ' => array ( 'Test Album ' ),
55- ),
56- ),
57- );
58-
59- wp_add_id3_tag_data ( $ metadata , $ data );
60-
61- $ this ->assertEquals ( 'Test Title ' , $ metadata ['title ' ] );
62- $ this ->assertEquals ( 'Test Artist ' , $ metadata ['artist ' ] );
63- $ this ->assertEquals ( 'Test Album ' , $ metadata ['album ' ] );
64- }
65-
66- /**
67- * Test wp_add_id3_tag_data() with array values.
68- */
69- public function test_wp_add_id3_tag_data_array_values () {
70- $ metadata = array ();
71- $ data = array (
72- 'id3v2 ' => array (
73- 'comments ' => array (
74- 'title ' => array ( 'Part 1 ' , 'Part 2 ' ),
75- 'artist ' => array ( 'Artist 1 ' , 'Artist 2 ' ),
76- ),
77- ),
78- );
79-
80- wp_add_id3_tag_data ( $ metadata , $ data );
81-
82- $ this ->assertEquals ( 'Part 1 ' , $ metadata ['title ' ] );
83- $ this ->assertEquals ( 'Artist 1 ' , $ metadata ['artist ' ] );
84- }
85-
86- /**
87- * Test wp_add_id3_tag_data() with APIC image data.
88- */
89- public function test_wp_add_id3_tag_data_apic_image () {
90- $ metadata = array ();
91- $ data = array (
92- 'id3v2 ' => array (
93- 'APIC ' => array (
94- array (
95- 'data ' => 'image_data ' ,
96- 'image_mime ' => 'image/jpeg ' ,
97- 'image_width ' => 800 ,
98- 'image_height ' => 600 ,
99- ),
100- ),
101- ),
102- );
103-
104- wp_add_id3_tag_data ( $ metadata , $ data );
105-
106- $ this ->assertArrayHasKey ( 'image ' , $ metadata );
107- $ this ->assertEquals ( 'image_data ' , $ metadata ['image ' ]['data ' ] );
108- $ this ->assertEquals ( 'image/jpeg ' , $ metadata ['image ' ]['mime ' ] );
109- $ this ->assertEquals ( 800 , $ metadata ['image ' ]['width ' ] );
110- $ this ->assertEquals ( 600 , $ metadata ['image ' ]['height ' ] );
111- }
112-
113- /**
114- * Test wp_add_id3_tag_data() with comments picture.
115- */
116- public function test_wp_add_id3_tag_data_comments_picture () {
117- $ metadata = array ();
118- $ data = array (
119- 'comments ' => array (
120- 'picture ' => array (
121- array (
122- 'data ' => 'image_data ' ,
123- 'image_mime ' => 'image/png ' ,
124- ),
125- ),
126- ),
127- );
128-
129- wp_add_id3_tag_data ( $ metadata , $ data );
130-
131- $ this ->assertArrayHasKey ( 'image ' , $ metadata );
132- $ this ->assertEquals ( 'image_data ' , $ metadata ['image ' ]['data ' ] );
133- $ this ->assertEquals ( 'image/png ' , $ metadata ['image ' ]['mime ' ] );
134- }
135-
136- /**
137- * Test wp_add_id3_tag_data() with terms_of_use fix.
138- */
139- public function test_wp_add_id3_tag_data_terms_of_use_fix () {
140- $ metadata = array ();
141- $ data = array (
142- 'id3v2 ' => array (
143- 'comments ' => array (
144- 'terms_of_use ' => array ( 'yright notice. All rights reserved. ' ),
145- ),
146- ),
147- );
148-
149- wp_add_id3_tag_data ( $ metadata , $ data );
150-
151- $ this ->assertEquals ( 'Copyright notice. All rights reserved. ' , $ metadata ['terms_of_use ' ] );
152- }
153-
154- /**
155- * Test wp_add_id3_tag_data() with HTML sanitization.
156- */
157- public function test_wp_add_id3_tag_data_html_sanitization () {
158- $ metadata = array ();
159- $ data = array (
160- 'id3v2 ' => array (
161- 'comments ' => array (
162- 'title ' => array ( '<script>alert("XSS")</script>Test Title ' ),
163- 'artist ' => array ( '<a href="javascript:alert(1)">Test Artist</a> ' ),
164- 'lyric ' => array ( '<div class="test"><p>Test lyric</p><script>alert("test");</script><span>More text</span></div> ' ),
165- ),
166- ),
167- );
168-
169- wp_add_id3_tag_data ( $ metadata , $ data );
170-
171- // <script> tags are removed, but their content is not kept; only allowed tags and their content remain.
172- $ this ->assertEquals ( 'alert("XSS")Test Title ' , $ metadata ['title ' ] );
173- // <a> tags are allowed, but javascript: URLs are stripped from href, so only <a> remains.
174- $ this ->assertEquals ( '<a href="alert(1)">Test Artist</a> ' , $ metadata ['artist ' ] );
175- $ this ->assertEquals ( '<div class="test"><p>Test lyric</p>alert("test");<span>More text</span></div> ' , $ metadata ['lyric ' ] );
176- }
177-
178- /**
179- * Test wp_add_id3_tag_data() with empty arrays.
180- */
181- public function test_wp_add_id3_tag_data_empty_arrays () {
182- $ metadata = array ();
183- $ data = array (
184- 'id3v2 ' => array (
185- 'comments ' => array (
186- 'title ' => array (),
187- 'artist ' => array (),
188- ),
189- ),
190- );
191-
192- wp_add_id3_tag_data ( $ metadata , $ data );
193-
194- $ this ->assertArrayNotHasKey ( 'title ' , $ metadata );
195- $ this ->assertArrayNotHasKey ( 'artist ' , $ metadata );
196- }
19725
198- /**
199- * Test wp_add_id3_tag_data() with special characters.
200- */
201- public function test_wp_add_id3_tag_data_special_characters () {
202- $ metadata = array ();
203- $ data = array (
26+ // Simulate ID3 data with array values that cause wp_kses_post to fail
27+ $ data = array (
20428 'id3v2 ' => array (
20529 'comments ' => array (
206- 'title ' => array ( 'Special chars: é, ñ, 漢字, 😀 ' ),
207- 'artist ' => array ( 'Artist with & special chars ' ),
208- ),
209- ),
210- );
211-
212- wp_add_id3_tag_data ( $ metadata , $ data );
213-
214- $ this ->assertEquals ( 'Special chars: é, ñ, 漢字, 😀 ' , $ metadata ['title ' ] );
215- $ this ->assertEquals ( 'Artist with & special chars ' , $ metadata ['artist ' ] );
216- }
217-
218- /**
219- * Test wp_add_id3_tag_data() with multiple APIC images.
220- */
221- public function test_wp_add_id3_tag_data_multiple_apic () {
222- $ metadata = array ();
223- $ data = array (
224- 'id3v2 ' => array (
225- 'APIC ' => array (
226- array (
227- 'data ' => 'front_cover_data ' ,
228- 'image_mime ' => 'image/jpeg ' ,
229- 'image_width ' => 800 ,
230- 'image_height ' => 600 ,
231- ),
232- array (
233- 'data ' => 'back_cover_data ' ,
234- 'image_mime ' => 'image/png ' ,
235- 'image_width ' => 400 ,
236- 'image_height ' => 300 ,
30+ 'artist ' => array ( 'The Northern Lights Ensemble ' ),
31+ 'album ' => array ( 'Horizons and Beyond ' ),
32+ 'title ' => array ( '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+ ),
23742 ),
23843 ),
23944 ),
24045 );
24146
47+ // This should not cause a fatal error when wp_kses_post receives array values
24248 wp_add_id3_tag_data ( $ metadata , $ data );
24349
244- $ this ->assertArrayHasKey ( 'image ' , $ metadata );
245- $ this ->assertEquals ( 'front_cover_data ' , $ metadata ['image ' ]['data ' ] );
246- $ this ->assertEquals ( 'image/jpeg ' , $ metadata ['image ' ]['mime ' ] );
247- $ this ->assertEquals ( 800 , $ metadata ['image ' ]['width ' ] );
248- $ this ->assertEquals ( 600 , $ metadata ['image ' ]['height ' ] );
249- }
250-
251- /**
252- * Test wp_add_id3_tag_data() with very long values.
253- */
254- public function test_wp_add_id3_tag_data_long_values () {
255- $ metadata = array ();
256- $ long_title = str_repeat ( 'a ' , 1000 );
257- $ data = array (
258- 'id3v2 ' => array (
259- 'comments ' => array (
260- 'title ' => array ( $ long_title ),
261- 'artist ' => array ( str_repeat ( 'b ' , 500 ) ),
262- ),
263- ),
264- );
265-
266- wp_add_id3_tag_data ( $ metadata , $ data );
267-
268- $ this ->assertEquals ( $ long_title , $ metadata ['title ' ] );
269- $ this ->assertEquals ( str_repeat ( 'b ' , 500 ), $ metadata ['artist ' ] );
270- }
271-
272- /**
273- * Test wp_add_id3_tag_data() with different character encodings.
274- */
275- public function test_wp_add_id3_tag_data_different_encodings () {
276- $ metadata = array ();
277- $ data = array (
278- 'id3v2 ' => array (
279- 'comments ' => array (
280- 'title ' => array ( 'Title with UTF-8: é, ñ, 漢字 ' ),
281- 'artist ' => array ( 'Artist with ISO-8859-1: é, ñ ' ),
282- ),
283- 'encoding ' => 'UTF-8 ' ,
284- ),
285- 'id3v1 ' => array (
286- 'comments ' => array (
287- 'title ' => array ( 'Title with ISO-8859-1: é, ñ ' ),
288- ),
289- 'encoding ' => 'ISO-8859-1 ' ,
290- ),
291- );
292-
293- wp_add_id3_tag_data ( $ metadata , $ data );
294-
295- $ this ->assertEquals ( 'Title with UTF-8: é, ñ, 漢字 ' , $ metadata ['title ' ] );
296- $ this ->assertEquals ( 'Artist with ISO-8859-1: é, ñ ' , $ metadata ['artist ' ] );
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 );
29756 }
29857}
0 commit comments