WordPress.org

Make WordPress Core

Ticket #22543: 22543-6.diff

File 22543-6.diff, 2.0 KB (added by mikeschroder, 5 years ago)

Reject if setIteratorIndex and mime type isn't jpeg, and check in supports_mime_type. Split Imagick checks for clarity.

  • wp-includes/class-wp-image-editor-imagick.php

    diff --git wp-includes/class-wp-image-editor-imagick.php wp-includes/class-wp-image-editor-imagick.php
    index d29fefd..d59c27f 100644
    class WP_Image_Editor_Imagick extends WP_Image_Editor { 
    3939         */
    4040        public static function test( $args = array() ) {
    4141
     42                // First, test Imagick's extension and classes.
     43                if ( ! extension_loaded( 'imagick' ) || ! class_exists( 'Imagick' ) || ! class_exists( 'ImagickPixel' ) )
     44                        return false;
     45
    4246                $required_methods = array(
    4347                        'clear',
    4448                        'destroy',
    class WP_Image_Editor_Imagick extends WP_Image_Editor { 
    5963                        'flopimage',
    6064                );
    6165
    62                 // Check for requirements
    63                 if ( ! extension_loaded( 'imagick' ) ||
    64                          ! class_exists( 'Imagick' ) ||
    65                          ! is_callable( 'Imagick', 'queryFormats' ) ||
    66                          ! class_exists( 'ImagickPixel' ) ||
     66                // Now, test for deep requirements within Imagick.
     67                if ( ! class_exists( 'ImagickPixel' ) ||
    6768                         ! defined( 'imagick::COMPRESSION_JPEG' ) ||
    6869                         array_diff( $required_methods, get_class_methods( 'Imagick' ) ) ) {
    6970
    7071                        return false;
    7172                }
    7273
    73                 /**
    74                  * setIteratorIndex is optional unless mime is an animated format.
    75                  * Here, we just say no if a user is attempting to
    76                  * edit a GIF and setIteratorIndex isn't available.
    77                  */
    78                 if ( ( ! isset( $args['mime_type'] ) || $args['mime_type'] == 'image/gif' ) &&
    79                          ! method_exists( 'Imagick', 'setIteratorIndex' ) ) {
    80 
    81                         return false;
    82                 }
    83 
    8474                return true;
    8575        }
    8676
    class WP_Image_Editor_Imagick extends WP_Image_Editor { 
    9989                if ( ! $imagick_extension )
    10090                        return false;
    10191
     92                /**
     93                 * setIteratorIndex is optional unless mime is an animated format.
     94                 * Here, we just say no if you are missing it and aren't loading a jpeg.
     95                 */
     96                if ( ! method_exists( 'Imagick', 'setIteratorIndex' ) && $mime_type != 'image/jpeg' )
     97                                return false;
     98
    10299                try {
    103100                        return ( (bool) Imagick::queryFormats( $imagick_extension ) );
    104101                }