Make WordPress Core

Ticket #46800: 46800.diff

File 46800.diff, 2.9 KB (added by SergeyBiryukov, 5 years ago)
  • src/wp-admin/includes/media.php

     
    357357                        $track_number = explode( '/', $meta['track_number'] );
    358358                        if ( isset( $track_number[1] ) ) {
    359359                                /* translators: Audio file track information. 1: Audio track number, 2: Total audio tracks */
    360                                 $content .= ' ' . sprintf( __( 'Track %1$s of %2$s.' ), number_format_i18n( $track_number[0] ), number_format_i18n( $track_number[1] ) );
     360                                $content .= ' ' . sprintf( __( 'Track %1$s of %2$s.' ), number_format_i18n( (int) $track_number[0] ), number_format_i18n( (int) $track_number[1] ) );
    361361                        } else {
    362362                                /* translators: Audio file track information. %s: Audio track number */
    363                                 $content .= ' ' . sprintf( __( 'Track %s.' ), number_format_i18n( $track_number[0] ) );
     363                                $content .= ' ' . sprintf( __( 'Track %s.' ), number_format_i18n( (int) $track_number[0] ) );
    364364                        }
    365365                }
    366366
     
    32823282}
    32833283
    32843284/**
     3285 * Sanitizes metadata extracted from media files.
     3286 *
     3287 * Currently only binary strings are sanitized with focus on preventing propagation of
     3288 * bad character encodings from causing database calls and API endpoints to fail.
     3289 *
     3290 * @param array $metadata An existing array with data
     3291 *
     3292 * @return array Returns array of sanitized metadata.
     3293 */
     3294function wp_sanitize_media_metadata( $metadata ) {
     3295        if ( ! is_array( $metadata ) || ! function_exists( 'mb_convert_encoding' ) ) {
     3296                return $metadata;
     3297        }
     3298        foreach ( $metadata as $name => $value ) {
     3299                if ( ! is_string( $value ) ) {
     3300                        continue;
     3301                }
     3302                if ( is_array( $value ) ) {
     3303                        $value = wp_sanitize_media_metadata( $value );
     3304                } elseif ( is_string( $value ) && preg_match('~[^\x20-\x7E\t\r\n]~', $value ) > 0 ) {
     3305                        $encoding = mb_detect_encoding( $value, 'ISO-8859-1, UCS-2' );
     3306                        $value = $encoding ? mb_convert_encoding( $value, 'UTF-8', $encoding ) : utf8_encode( $value );
     3307                }
     3308                $metadata[$name] = $value;
     3309        }
     3310        return $metadata;
     3311}
     3312
     3313/**
    32853314 * Retrieve metadata from a video file's ID3 tags
    32863315 *
    32873316 * @since 3.6.0
     
    33633392
    33643393        $file_format = isset( $metadata['fileformat'] ) ? $metadata['fileformat'] : null;
    33653394
     3395        $metadata = wp_sanitize_media_metadata( $metadata );
     3396
    33663397        /**
    33673398         * Filters the array of metadata retrieved from a video.
    33683399         *
     
    34343465
    34353466        wp_add_id3_tag_data( $metadata, $data );
    34363467
     3468        $metadata = wp_sanitize_media_metadata( $metadata );
     3469
    34373470        return $metadata;
    34383471}
    34393472
  • src/wp-includes/post.php

     
    56315631        }
    56325632
    56335633        $data = get_post_meta( $post->ID, '_wp_attachment_metadata', true );
     5634        $data = wp_sanitize_media_metadata( $data );
    56345635
    56355636        if ( $unfiltered ) {
    56365637                return $data;