Make WordPress Core


Ignore:
Timestamp:
05/22/2014 09:35:36 PM (12 years ago)
Author:
wonderboymusic
Message:

Fix parsing in wp_match_mime_types() to allow some mime-types with + in them to appear in the list of filter links shown above the list table on upload.php.

Props _duck.
Fixes #20672.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/post.php

    r28471 r28553  
    23302330 * @return array array(wildcard=>array(real types))
    23312331 */
    2332 function wp_match_mime_types($wildcard_mime_types, $real_mime_types) {
     2332function wp_match_mime_types( $wildcard_mime_types, $real_mime_types ) {
    23332333        $matches = array();
    2334         if ( is_string($wildcard_mime_types) )
    2335                 $wildcard_mime_types = array_map('trim', explode(',', $wildcard_mime_types));
    2336         if ( is_string($real_mime_types) )
    2337                 $real_mime_types = array_map('trim', explode(',', $real_mime_types));
     2334        if ( is_string( $wildcard_mime_types ) ) {
     2335                $wildcard_mime_types = array_map( 'trim', explode( ',', $wildcard_mime_types ) );
     2336        }
     2337        if ( is_string( $real_mime_types ) ) {
     2338                $real_mime_types = array_map( 'trim', explode( ',', $real_mime_types ) );
     2339        }
     2340
     2341        $patternses = array();
    23382342        $wild = '[-._a-z0-9]*';
     2343
    23392344        foreach ( (array) $wildcard_mime_types as $type ) {
    2340                 $type = str_replace('*', $wild, $type);
    2341                 $patternses[1][$type] = "^$type$";
     2345                $regex = str_replace( '__wildcard__', $wild, preg_quote( str_replace( '*', '__wildcard__', $type ) ) );
     2346                $patternses[1][$type] = "^$regex$";
    23422347                if ( false === strpos($type, '/') ) {
    2343                         $patternses[2][$type] = "^$type/";
    2344                         $patternses[3][$type] = $type;
    2345                 }
    2346         }
    2347         asort($patternses);
    2348         foreach ( $patternses as $patterns )
    2349                 foreach ( $patterns as $type => $pattern )
    2350                         foreach ( (array) $real_mime_types as $real )
    2351                                 if ( preg_match("#$pattern#", $real) && ( empty($matches[$type]) || false === array_search($real, $matches[$type]) ) )
     2348                        $patternses[2][$type] = "^$regex/";
     2349                        $patternses[3][$type] = $regex;
     2350                }
     2351        }
     2352        asort( $patternses );
     2353
     2354        foreach ( $patternses as $patterns ) {
     2355                foreach ( $patterns as $type => $pattern ) {
     2356                        foreach ( (array) $real_mime_types as $real ) {
     2357                                if ( preg_match( "#$pattern#", $real ) && ( empty( $matches[$type] ) || false === array_search( $real, $matches[$type] ) ) ) {
    23522358                                        $matches[$type][] = $real;
     2359                                }
     2360                        }
     2361                }
     2362        }
    23532363        return $matches;
    23542364}
Note: See TracChangeset for help on using the changeset viewer.