WordPress.org

Make WordPress Core

Ticket #40921: 40921.3.diff

File 40921.3.diff, 4.0 KB (added by blobfolio, 3 years ago)

Refresh against current src

  • src/wp-admin/includes/media.php

    diff --git src/wp-admin/includes/media.php src/wp-admin/includes/media.php
    index 03e949f16f..ef88177920 100644
    function wp_get_media_creation_timestamp( $metadata ) { 
    34263426        return $creation_date;
    34273427}
    34283428
     3429/**
     3430 * Detect MP4 Content Type
     3431 *
     3432 * The MP4 file extension is intended for video content, but might be
     3433 * mistakenly applied to audio files as well. This will attempt to
     3434 * determine an MP4 file's content and rename if needed.
     3435 *
     3436 * @since 4.9
     3437 *
     3438 * @see https://core.trac.wordpress.org/ticket/40921
     3439 *
     3440 * @param array $wp_check_filetype_and_ext File data array.
     3441 * @param string $file Full path to file.
     3442 * @param string $filename The name of the file.
     3443 * @param array $mimes Allowed MIME types.
     3444 * @return array File data.
     3445 */
     3446function wp_check_mp4_filetype_and_ext( $checked, $file, $filename, $mimes = null ) {
     3447        if ( 'mp4' === $checked['ext'] ) {
     3448                // Load ID3 parser.
     3449                if ( ! defined( 'GETID3_TEMP_DIR' ) ) {
     3450                        define( 'GETID3_TEMP_DIR', get_temp_dir() );
     3451                }
     3452
     3453                if ( ! class_exists( 'getID3', false ) ) {
     3454                        require( ABSPATH . WPINC . '/ID3/getid3.php' );
     3455                }
     3456
     3457                $id3 = new getID3();
     3458                $data = $id3->analyze( $file );
     3459
     3460                // This is audio if the MIME says so.
     3461                if (
     3462                        isset( $data['mime_type'] ) &&
     3463                        ( 0 === strpos( $data['mime_type'], 'audio/' ) )
     3464                ) {
     3465                        $checked['ext'] = 'm4a';
     3466                        $checked['type'] = 'audio/mpeg';
     3467                }
     3468
     3469                // The ftype might suggest its audioness.
     3470                elseif (
     3471                        isset( $data['quicktime']['ftype']['signature'] ) &&
     3472                        ( 'M4A' === $data['quicktime']['ftype']['signature'] )
     3473                ) {
     3474                        $checked['ext'] = 'm4a';
     3475                        $checked['type'] = 'audio/mpeg';
     3476                }
     3477
     3478                // This might also be audio if there is no video resolution.
     3479                elseif (
     3480                        isset( $data['video']['resolution_x'] ) &&
     3481                        ! $data['video']['resolution_x'] &&
     3482                        isset( $data['video']['resolution_y'] ) &&
     3483                        ! $data['video']['resolution_y']
     3484                ) {
     3485                        $checked['ext'] = 'm4a';
     3486                        $checked['type'] = 'audio/mpeg';
     3487                }
     3488
     3489                // Update the filename.
     3490                if ( 'm4a' === $checked['ext'] ) {
     3491                        $checked['proper_filename'] = substr( $filename, 0, -3 ) . 'm4a';
     3492                }
     3493        }
     3494
     3495        return $checked;
     3496}
     3497add_filter( 'wp_check_filetype_and_ext', 'wp_check_mp4_filetype_and_ext', 100, 4 );
     3498
     3499/**
     3500 * Detect OGG Content Type
     3501 *
     3502 * The OGG file extension is intended for audio content, but might be
     3503 * mistakenly applied to video files as well. This will attempt to
     3504 * determine an OGG file's content and rename if needed.
     3505 *
     3506 * @since 4.9
     3507 *
     3508 * @see https://core.trac.wordpress.org/ticket/40921
     3509 *
     3510 * @param array $wp_check_filetype_and_ext File data array.
     3511 * @param string $file Full path to file.
     3512 * @param string $filename The name of the file.
     3513 * @param array $mimes Allowed MIME types.
     3514 * @return array File data.
     3515 */
     3516function wp_check_ogg_filetype_and_ext( $checked, $file, $filename, $mimes = null ) {
     3517        if ( 'ogg' === $checked['ext'] ) {
     3518                // Load ID3 parser.
     3519                if ( ! defined( 'GETID3_TEMP_DIR' ) ) {
     3520                        define( 'GETID3_TEMP_DIR', get_temp_dir() );
     3521                }
     3522
     3523                if ( ! class_exists( 'getID3', false ) ) {
     3524                        require( ABSPATH . WPINC . '/ID3/getid3.php' );
     3525                }
     3526
     3527                $id3 = new getID3();
     3528                $data = $id3->analyze( $file );
     3529
     3530                // This is video if the MIME says so.
     3531                if (
     3532                        isset( $data['mime_type'] ) &&
     3533                        ( 0 === strpos( $data['mime_type'], 'video/' ) )
     3534                ) {
     3535                        $checked['ext'] = 'ogv';
     3536                        $checked['type'] = 'video/ogg';
     3537                }
     3538
     3539                // This is video if there is a resolution.
     3540                elseif (
     3541                        ( isset( $data['video']['resolution_x'] ) && $data['video']['resolution_x'] > 0 ) ||
     3542                        ( isset( $data['video']['resolution_y'] ) && $data['video']['resolution_y'] > 0 )
     3543                ) {
     3544                        $checked['ext'] = 'ogv';
     3545                        $checked['type'] = 'video/ogg';
     3546                }
     3547
     3548                // Update the filename.
     3549                if ( 'ogv' === $checked['ext'] ) {
     3550                        $checked['proper_filename'] = substr( $filename, 0, -3 ) . 'ogv';
     3551                }
     3552        }
     3553
     3554        return $checked;
     3555}
     3556add_filter( 'wp_check_filetype_and_ext', 'wp_check_ogg_filetype_and_ext', 100, 4 );
     3557
    34293558/**
    34303559 * Encapsulate logic for Attach/Detach actions
    34313560 *