WordPress.org

Make WordPress Core

Ticket #22543: 22543-5.diff

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

Initial draft after audit -- check all the functions.

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

     
    3838         * @return boolean
    3939         */
    4040        public static function test( $args = array() ) {
    41                 if ( ! extension_loaded( 'imagick' ) || ! is_callable( 'Imagick', 'queryFormats' ) )
     41
     42                $required_methods = array(
     43                        'clear',
     44                        'destroy',
     45                        'valid',
     46                        'getimage',
     47                        'writeimage',
     48                        'getimageblob',
     49                        'getimagegeometry',
     50                        'getimageformat',
     51                        'setimageformat',
     52                        'setimagecompression',
     53                        'setimagecompressionquality',
     54                        'setimagepage',
     55                        'scaleimage',
     56                        'cropimage',
     57                        'rotateimage',
     58                        'flipimage',
     59                        'flopimage',
     60                );
     61
     62                // Check for requirements
     63                if ( ! extension_loaded( 'imagick' ) ||
     64                         ! class_exists( 'Imagick' ) ||
     65                         ! is_callable( 'Imagick', 'queryFormats' ) ||
     66                         ! class_exists( 'ImagickPixel' ) ||
     67                         ! defined( 'imagick::COMPRESSION_JPEG' ) ||
     68                         array_diff( $required_methods, get_class_methods( 'Imagick' ) ) ) {
     69
    4270                        return false;
     71                }
    4372
     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
    4484                return true;
    4585        }
    4686
     
    88128                        if( ! $this->image->valid() )
    89129                                return new WP_Error( 'invalid_image', __('File is not an image.'), $this->file);
    90130
    91                         // Select the first frame to handle animated GIFs properly
    92                         $this->image->setIteratorIndex(0);
     131                        // Select the first frame to handle animated images properly
     132                        if ( is_callable( array( $this->image, 'setIteratorIndex' ) ) )
     133                                $this->image->setIteratorIndex(0);
     134
    93135                        $this->mime_type = $this->get_mime_type( $this->image->getImageFormat() );
    94136                }
    95137                catch ( Exception $e ) {