X-Git-Url: http://git.cyclocoop.org/%22%20.%20%20%20%24self2%20.%20%20%20%22&var_mode_affiche=boucle?a=blobdiff_plain;f=includes%2Flibs%2FCSSMin.php;h=73825e82e32a603a0814fce6f8c84d1dcac2eb20;hb=9ff15fe2ced6b220d06601b74069fc9a7bbe5943;hp=f2c7ed29f0530303ebba931a41d2466839d544a1;hpb=79d298e37f8aeb42ccf43155a5be3c16b7688901;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/libs/CSSMin.php b/includes/libs/CSSMin.php index f2c7ed29f0..73825e82e3 100644 --- a/includes/libs/CSSMin.php +++ b/includes/libs/CSSMin.php @@ -173,18 +173,14 @@ class CSSMin { /** * Serialize a string (escape and quote) for use as a CSS string value. - * http://www.w3.org/TR/2013/WD-cssom-20131205/#serialize-a-string + * https://www.w3.org/TR/2016/WD-cssom-1-20160317/#serialize-a-string * * @param string $value * @return string - * @throws Exception */ public static function serializeStringValue( $value ) { - if ( strstr( $value, "\0" ) ) { - throw new Exception( "Invalid character in CSS string" ); - } - $value = strtr( $value, [ '\\' => '\\\\', '"' => '\\"' ] ); - $value = preg_replace_callback( '/[\x01-\x1f\x7f-\x9f]/', function ( $match ) { + $value = strtr( $value, [ "\0" => "\\fffd ", '\\' => '\\\\', '"' => '\\"' ] ); + $value = preg_replace_callback( '/[\x01-\x1f\x7f]/', function ( $match ) { return '\\' . base_convert( ord( $match[0] ), 10, 16 ) . ' '; }, $value ); return '"' . $value . '"'; @@ -424,11 +420,11 @@ class CSSMin { // is only supported in PHP 5.6. Use a getter method for now. $urlRegex = '(' . // Unquoted url - 'url\(\s*(?P[^\'"][^\?\)]*?)(?P\?[^\)]*?|)\s*\)' . + 'url\(\s*(?P[^\'"][^\?\)]+?)(?P\?[^\)]*?|)\s*\)' . // Single quoted url - '|url\(\s*\'(?P[^\?\']*?)(?P\?[^\']*?|)\'\s*\)' . + '|url\(\s*\'(?P[^\?\']+?)(?P\?[^\']*?|)\'\s*\)' . // Double quoted url - '|url\(\s*"(?P[^\?"]*?)(?P\?[^"]*?|)"\s*\)' . + '|url\(\s*"(?P[^\?"]+?)(?P\?[^"]*?|)"\s*\)' . ')'; } return $urlRegex; @@ -446,6 +442,9 @@ class CSSMin { $match['file'] = $match['file1']; $match['query'] = $match['query1']; } else { + if ( !isset( $match['file2'] ) || $match['file2'][1] === -1 ) { + throw new Exception( 'URL must be non-empty' ); + } $match['file'] = $match['file2']; $match['query'] = $match['query2']; } @@ -457,6 +456,9 @@ class CSSMin { $match['file'] = $match['file1']; $match['query'] = $match['query1']; } else { + if ( !isset( $match['file2'] ) || $match['file2'] === '' ) { + throw new Exception( 'URL must be non-empty' ); + } $match['file'] = $match['file2']; $match['query'] = $match['query2']; } @@ -535,8 +537,8 @@ class CSSMin { public static function minify( $css ) { return trim( str_replace( - [ '; ', ': ', ' {', '{ ', ', ', '} ', ';}' ], - [ ';', ':', '{', '{', ',', '}', '}' ], + [ '; ', ': ', ' {', '{ ', ', ', '} ', ';}', '( ', ' )', '[ ', ' ]' ], + [ ';', ':', '{', '{', ',', '}', '}', '(', ')', '[', ']' ], preg_replace( [ '/\s+/', '/\/\*.*?\*\//s' ], [ ' ', '' ], $css ) ) );