Make WordPress Core

Ticket #30377: 30377.5.diff

File 30377.5.diff, 3.5 KB (added by johnbillion, 3 years ago)
  • src/wp-includes/functions.php

     
    29272927 * You can optionally define the mime array, if needed.
    29282928 *
    29292929 * @since 2.0.4
     2930 * @since x.x.x URLs are now supported.
    29302931 *
    2931  * @param string   $filename File name or path.
     2932 * @param string   $filename File name, path, or URL.
    29322933 * @param string[] $mimes    Optional. Array of allowed mime types keyed by their file extension regex.
    29332934 * @return array {
    29342935 *     Values for the extension and mime type.
     
    29442945        $type = false;
    29452946        $ext  = false;
    29462947
     2948        // Strip query args and fragment from filename to reveal extension.
     2949        $query_pos = strpos( $filename, '?' );
     2950
     2951        if ( false !== $query_pos ) {
     2952                $filename = substr_replace( $filename, '', $query_pos );
     2953        }
     2954
     2955        $filename = strip_fragment_from_url( $filename );
     2956
    29472957        foreach ( $mimes as $ext_preg => $mime_match ) {
    29482958                $ext_preg = '!\.(' . $ext_preg . ')$!i';
    29492959                if ( preg_match( $ext_preg, $filename, $ext_matches ) ) {
  • tests/phpunit/tests/functions/wpCheckFiletype.php

     
     1<?php
     2
     3/**
     4 * Tests for wp_check_filetype()
     5 *
     6 * @group functions.php
     7 * @covers ::wp_check_filetype
     8 */
     9class Tests_Functions_wpCheckFiletype extends WP_UnitTestCase {
     10
     11        public function data_url_filetypes() {
     12                return array(
     13                        // Invalid or empty data:
     14                        array( null, false ),
     15                        array( '', false ),
     16                        array( ' ', false ),
     17
     18                        // Paths:
     19                        array( 'file.jpg', 'jpg' ),
     20                        array( 'C:\path\to\file.mp3', 'mp3' ),
     21                        array( 'C:\path\to\file.mp3?file.jpg', 'mp3' ),
     22                        array( 'C:\path\to\file.exe?file.jpg', false ),
     23                        array( '/file.jpg', 'jpg' ),
     24                        array( '/path/to/file.jpg', 'jpg' ),
     25                        array( '/path/to/file.jpg', 'jpg' ),
     26                        array( '/file.exe?file.jpg', false ),
     27
     28                        // Absolute URLs:
     29                        array( 'http://example.com', false ),
     30                        array( 'http://example.com/', false ),
     31                        array( 'http://example.com/wibble', false ),
     32                        array( 'http://example.com/wibble/', false ),
     33                        array( 'http://example.com/wibble.wobble', false ),
     34                        array( 'http://example.com/wibble.mp3', 'mp3' ),
     35                        array( 'http://example.com/wibble.mp3#wobble', 'mp3' ),
     36                        array( 'http://example.com/wibble.mp3?wobble=true', 'mp3' ),
     37                        array( 'http://example.com/wibble.mp3?wobble=true#wobble', 'mp3' ),
     38                        array( 'http://example.mp3', false ),
     39                        array( 'http://example.mp3/', false ),
     40                        array( 'http://example.com/file.mp3#file.jpg', 'mp3' ),
     41                        array( 'http://example.com/file.mp3?file.jpg', 'mp3' ),
     42                        array( 'http://example.com/file.exe#file.jpg', false ),
     43                        array( 'http://example.com/file.exe?file.jpg', false ),
     44                        array( 'http://example.com/file.mp3?foo=bar#?file=file.jpg', 'mp3' ),
     45                        array( 'http://example.com?file.jpg', false ),
     46                );
     47        }
     48
     49        /**
     50         * @dataProvider data_url_filetypes
     51         *
     52         * @param string       $url
     53         * @param string|false $expected
     54         */
     55        public function test_url_ext( $url, $expected ) {
     56                $filetype = wp_check_filetype( $url );
     57                $this->assertSame( $expected, $filetype['ext'] );
     58        }
     59}