diff --git a/inc/admin/options.php b/inc/admin/options.php index b822cd876b..75d07f89f7 100644 --- a/inc/admin/options.php +++ b/inc/admin/options.php @@ -954,7 +954,7 @@ function rocket_settings_callback( $inputs ) { $checked = rocket_check_key(); } - if ( is_array( $checked ) ) { + if ( isset( $checked ) && is_array( $checked ) ) { $inputs['consumer_key'] = $checked['consumer_key']; $inputs['consumer_email'] = $checked['consumer_email']; $inputs['secret_key'] = $checked['secret_key']; diff --git a/inc/compat.php b/inc/compat.php index d07a963bb0..1fe299fafa 100644 --- a/inc/compat.php +++ b/inc/compat.php @@ -87,4 +87,131 @@ function apply_filters_deprecated( $tag, $args, $version, $replacement = false, return apply_filters_ref_array( $tag, $args ); } -} \ No newline at end of file +} + + +/** + * Copied from core for compatibility with WP < 4.4 + * A wrapper for PHP's parse_url() function that handles consistency in the return + * values across PHP versions. + * + * PHP 5.4.7 expanded parse_url()'s ability to handle non-absolute url's, including + * schemeless and relative url's with :// in the path. This function works around + * those limitations providing a standard output on PHP 5.2~5.4+. + * + * Secondly, across various PHP versions, schemeless URLs starting containing a ":" + * in the query are being handled inconsistently. This function works around those + * differences as well. + * + * Error suppression is used as prior to PHP 5.3.3, an E_WARNING would be generated + * when URL parsing failed. + * + * @since 4.4.0 + * @since 4.7.0 The $component parameter was added for parity with PHP's parse_url(). + * + * @param string $url The URL to parse. + * @param int $component The specific component to retrieve. Use one of the PHP + * predefined constants to specify which one. + * Defaults to -1 (= return all parts as an array). + * @see http://php.net/manual/en/function.parse-url.php + * @return mixed False on parse failure; Array of URL components on success; + * When a specific component has been requested: null if the component + * doesn't exist in the given URL; a sting or - in the case of + * PHP_URL_PORT - integer when it does. See parse_url()'s return values. + */ +if ( ! function_exists( 'wp_parse_url' ) ) { + function wp_parse_url( $url, $component = -1 ) { + $to_unset = array(); + $url = strval( $url ); + + if ( '//' === substr( $url, 0, 2 ) ) { + $to_unset[] = 'scheme'; + $url = 'placeholder:' . $url; + } elseif ( '/' === substr( $url, 0, 1 ) ) { + $to_unset[] = 'scheme'; + $to_unset[] = 'host'; + $url = 'placeholder://placeholder' . $url; + } + + $parts = @parse_url( $url ); + + if ( false === $parts ) { + // Parsing failure. + return $parts; + } + + // Remove the placeholder values. + foreach ( $to_unset as $key ) { + unset( $parts[ $key ] ); + } + + return _get_component_from_parsed_url_array( $parts, $component ); + } +} + +/** + * Copied from core for compatibility with WP < 4.7 + * Retrieve a specific component from a parsed URL array. + * + * @internal + * + * @since 4.7.0 + * + * @param array|false $url_parts The parsed URL. Can be false if the URL failed to parse. + * @param int $component The specific component to retrieve. Use one of the PHP + * predefined constants to specify which one. + * Defaults to -1 (= return all parts as an array). + * @see http://php.net/manual/en/function.parse-url.php + * @return mixed False on parse failure; Array of URL components on success; + * When a specific component has been requested: null if the component + * doesn't exist in the given URL; a sting or - in the case of + * PHP_URL_PORT - integer when it does. See parse_url()'s return values. + */ +if ( ! function_exists( '_get_component_from_parsed_url_array') ) { + function _get_component_from_parsed_url_array( $url_parts, $component = -1 ) { + if ( -1 === $component ) { + return $url_parts; + } + + $key = _wp_translate_php_url_constant_to_key( $component ); + if ( false !== $key && is_array( $url_parts ) && isset( $url_parts[ $key ] ) ) { + return $url_parts[ $key ]; + } else { + return null; + } + } +} + +/** + * Copied from core for compatibility with WP < 4.7 + * Translate a PHP_URL_* constant to the named array keys PHP uses. + * + * @internal + * + * @since 4.7.0 + * + * @see http://php.net/manual/en/url.constants.php + * + * @param int $constant PHP_URL_* constant. + * @return string|bool The named key or false. + */ +if ( ! function_exists( '_wp_translate_php_url_constant_to_key') ) { + function _wp_translate_php_url_constant_to_key( $constant ) { + $translation = array( + PHP_URL_SCHEME => 'scheme', + PHP_URL_HOST => 'host', + PHP_URL_PORT => 'port', + PHP_URL_USER => 'user', + PHP_URL_PASS => 'pass', + PHP_URL_PATH => 'path', + PHP_URL_QUERY => 'query', + PHP_URL_FRAGMENT => 'fragment', + ); + + if ( isset( $translation[ $constant ] ) ) { + return $translation[ $constant ]; + } else { + return false; + } + } +} diff --git a/inc/front/cdn.php b/inc/front/cdn.php index 4944664c92..fabb3bdeae 100644 --- a/inc/front/cdn.php +++ b/inc/front/cdn.php @@ -135,6 +135,10 @@ function rocket_cdn_images( $html ) { list( $host, $path, $scheme, $query ) = get_rocket_parse_url( $image_url ); + if ( empty( trim( $path ) ) || '{href}' === $path ) { + continue; + } + if ( isset( $cnames[ $host ] ) ) { continue; } diff --git a/inc/front/process.php b/inc/front/process.php index fa4b1ad673..cbe11c2234 100755 --- a/inc/front/process.php +++ b/inc/front/process.php @@ -130,7 +130,7 @@ } // Don't cache page with these user agents -if ( isset( $rocket_cache_reject_ua, $_SERVER['HTTP_USER_AGENT'] ) && preg_match( '#(' . $rocket_cache_reject_ua . ')#', $_SERVER['HTTP_USER_AGENT'] ) ) { +if ( isset( $rocket_cache_reject_ua, $_SERVER['HTTP_USER_AGENT'] ) && ! empty( trim( $rocket_cache_reject_ua ) ) && preg_match( '#(' . $rocket_cache_reject_ua . ')#', $_SERVER['HTTP_USER_AGENT'] ) ) { rocket_define_donotminify_constants( true ); return; } @@ -410,4 +410,4 @@ function rocket_get_ip() { } return '0.0.0.0'; -} \ No newline at end of file +} diff --git a/inc/functions/formatting.php b/inc/functions/formatting.php index ec5efd027f..68f10f8a18 100755 --- a/inc/functions/formatting.php +++ b/inc/functions/formatting.php @@ -157,7 +157,7 @@ function get_rocket_parse_url( $url ) { return; } - $url = parse_url( $url ); + $url = wp_parse_url( $url ); $host = isset( $url['host'] ) ? strtolower( $url['host'] ) : ''; $path = isset( $url['path'] ) ? $url['path'] : ''; $scheme = isset( $url['scheme'] ) ? $url['scheme'] : ''; @@ -206,4 +206,4 @@ function rocket_get_cache_busting_paths( $filename, $extension ) { 'filepath' => $cache_busting_filepath, 'url' => $cache_busting_url ); -} \ No newline at end of file +} diff --git a/min/.htaccess b/min/.htaccess index 6604d2ecc7..d5658ef238 100755 --- a/min/.htaccess +++ b/min/.htaccess @@ -1,11 +1,6 @@ - - - Allow from all - - - Require all granted - - + +Allow from all + RewriteEngine on diff --git a/wp-rocket.php b/wp-rocket.php index e802a291e7..5191e61bbb 100755 --- a/wp-rocket.php +++ b/wp-rocket.php @@ -3,7 +3,7 @@ Plugin Name: WP Rocket Plugin URI: https://wp-rocket.me Description: The best WordPress performance plugin. -Version: 2.9.7 +Version: 2.9.8 Code Name: Iridonia Author: WP Media Contributors: Jonathan Buttigieg, Julio Potier, Remy Perona @@ -19,7 +19,7 @@ defined( 'ABSPATH' ) or die( 'Cheatin’ uh?' ); // Rocket defines -define( 'WP_ROCKET_VERSION' , '2.9.7' ); +define( 'WP_ROCKET_VERSION' , '2.9.8' ); define( 'WP_ROCKET_PRIVATE_KEY' , false ); define( 'WP_ROCKET_SLUG' , 'wp_rocket_settings' ); define( 'WP_ROCKET_WEB_MAIN' , false );