Make WordPress Core

Ticket #37134: 37134.6.diff

File 37134.6.diff, 4.6 KB (added by adamsilverstein, 5 years ago)
  • src/wp-includes/kses.php

    diff --git a/src/wp-includes/kses.php b/src/wp-includes/kses.php
    index b445a429a3..59eac418d7 100644
    a b function safecss_filter_attr( $css, $deprecated = '' ) { 
    23002300                        }
    23012301                }
    23022302
    2303                 // Remove any CSS containing containing \ ( & } = or comments, except for url() useage checked above.
    2304                 if ( $found && ! preg_match( '%[\\\(&=}]|/\*%', $css_test_string ) ) {
    2305                         if ( '' != $css ) {
    2306                                 $css .= ';';
     2303                if ( $found ) {
     2304
     2305                        /**
     2306                         * Filters the regex limiting the list of characters not allowed in CSS rules.
     2307                         *
     2308                         * Default behaviour is to remove any css containing \ ( & } = or comments, except for url() usage.
     2309                         *
     2310                         * @since 5.5.0
     2311                         *
     2312                         * @param string $regex           Regex pattern of disallowed characters in CSS rules. Default is '%[\\\(&=}]|/\*%'.
     2313                         * @param string $css_test_string CSS value to test.
     2314                         */
     2315                        $disallowed_chars = apply_filters( 'safe_style_disallowed_chars', '%[\\\(&=}]|/\*%', $css_test_string );
     2316                        if ( ! preg_match( $disallowed_chars, $css_test_string ) ) {
     2317                                if ( '' !== $css ) {
     2318                                        $css .= ';';
     2319                                }
     2320                                $css .= $css_item;
    23072321                        }
    2308 
    2309                         $css .= $css_item;
    23102322                }
    23112323        }
    23122324
  • tests/phpunit/tests/kses.php

    diff --git a/tests/phpunit/tests/kses.php b/tests/phpunit/tests/kses.php
    index a74903bd80..1f80a46d8b 100644
    a b EOF; 
    947947                                'css'      => 'background: conic-gradient(at 0% 30%, red 10%, yellow 30%, #1e90ff 50%)',
    948948                                'expected' => 'background: conic-gradient(at 0% 30%, red 10%, yellow 30%, #1e90ff 50%)',
    949949                        ),
    950 
     950                        // Expressions are not allowed.
     951                        array(
     952                                'css'      => 'height: expression( body.scrollTop + 50 + "px" )',
     953                                'expected' => '',
     954                        ),
     955                        // RGB color values are not allowed.
     956                        array(
     957                                'css'      => 'color: rgb( 100, 100, 100 )',
     958                                'expected' => '',
     959                        ),
     960                        // RGBA color values are not allowed.
     961                        array(
     962                                'css'      => 'color: rgb( 100, 100, 100, .4 )',
     963                                'expected' => '',
     964                        ),
    951965                );
    952966        }
    953967
    EOF; 
    11921206                        ),
    11931207                );
    11941208        }
     1209
     1210        /**
     1211         * Filter for disallowed characters never matches thus allowing all characters.
     1212         */
     1213        function _safe_style_disallowed_chars_filter( $regex ) {
     1214                return '%a^%'; // Regex with no matches.
     1215
     1216        }
     1217        /**
     1218         * Testing the safecss_filter_attr() function with the safe_style_disallowed_chars filter.
     1219         *
     1220         * @ticket 37134
     1221         *
     1222         * @dataProvider data_test_safecss_filter_attr_filtered
     1223         *
     1224         * @param string $css      A string of CSS rules.
     1225         * @param string $expected Expected string of CSS rules.
     1226         */
     1227        public function test_safecss_filter_attr_filtered( $css, $expected ) {
     1228                add_filter( 'safe_style_disallowed_chars', array( $this, '_safe_style_disallowed_chars_filter' ) );
     1229                $this->assertSame( $expected, safecss_filter_attr( $css ) );
     1230        }
     1231
     1232        /**
     1233         * Data Provider for test_safecss_filter_attr_filtered().
     1234         *
     1235         * @return array {
     1236         *     @type array {
     1237         *         @string string $css      A string of CSS rules.
     1238         *         @string string $expected Expected string of CSS rules.
     1239         *     }
     1240         * }
     1241         */
     1242        public function data_test_safecss_filter_attr_filtered() {
     1243                return array(
     1244
     1245                        // A single attribute name, with a single value.
     1246                        array(
     1247                                'css'      => 'margin-top: 2px',
     1248                                'expected' => 'margin-top: 2px',
     1249                        ),
     1250                        // Backslash \ can be allowed with the 'safe_style_disallowed_chars' filter.
     1251                        array(
     1252                                'css'      => 'margin-top: \2px',
     1253                                'expected' => 'margin-top: \2px',
     1254                        ),
     1255                        // Curly bracket } can be allowed with the 'safe_style_disallowed_chars' filter.
     1256                        array(
     1257                                'css'      => 'margin-bottom: 2px}',
     1258                                'expected' => 'margin-bottom: 2px}',
     1259                        ),
     1260                        // Parenthesis ) can be allowed with the 'safe_style_disallowed_chars' filter.
     1261                        array(
     1262                                'css'      => 'margin-bottom: 2px)',
     1263                                'expected' => 'margin-bottom: 2px)',
     1264                        ),
     1265                        // Ampersand & can be allowed with the 'safe_style_disallowed_chars' filter.
     1266                        array(
     1267                                'css'      => 'margin-bottom: 2px&',
     1268                                'expected' => 'margin-bottom: 2px&',
     1269                        ),
     1270                        // Expressions can be allowed with the 'safe_style_disallowed_chars' filter.
     1271                        array(
     1272                                'css'      => 'height: expression( body.scrollTop + 50 + "px" )',
     1273                                'expected' => 'height: expression( body.scrollTop + 50 + "px" )',
     1274                        ),
     1275                        // RGB color values can be allowed with the 'safe_style_disallowed_chars' filter.
     1276                        array(
     1277                                'css'      => 'color: rgb( 100, 100, 100 )',
     1278                                'expected' => 'color: rgb( 100, 100, 100 )',
     1279                        ),
     1280                        // RGBA color values can be allowed with the 'safe_style_disallowed_chars' filter.
     1281                        array(
     1282                                'css'      => 'color: rgb( 100, 100, 100, .4 )',
     1283                                'expected' => 'color: rgb( 100, 100, 100, .4 )',
     1284                        ),
     1285                );
     1286        }
    11951287}