Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 34 additions & 9 deletions classes/helpers/FrmStylesHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -443,13 +443,38 @@ public static function output_vars( $settings, $defaults = array(), $vars = arra
if ( ! isset( $defaults[ $var ] ) ) {
$defaults[ $var ] = '';
}
$show = empty( $defaults ) || ( $settings[ $var ] !== '' && $settings[ $var ] !== $defaults[ $var ] );
if ( $show && self::css_value_is_valid( $settings[ $var ] ) ) {
echo '--' . esc_html( self::clean_var_name( str_replace( '_', '-', $var ) ) ) . ':' . self::css_var_prepare_value( $settings, $var ) . ';'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped

$prepared_value = '';
if ( self::should_add_css_var( $settings, $defaults, $var, $prepared_value ) ) {
echo '--' . esc_html( self::clean_var_name( str_replace( '_', '-', $var ) ) ) . ':' . $prepared_value . ';'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
}
}

/**
* Check if a CSS variable setting is not blank, doesn't match the default, and doesn't include invalid substrings.
*
* @since x.x
*
* @param array $settings Array of setting values.
* @param array $defaults Array of default values.
* @param string $var The setting key name.
* @param string $prepared_value The value from calling css_var_prepare_value. This is set by reference so it can be used after this function is called.
* @return bool True if the CSS value should be printed.
*/
private static function should_add_css_var( $settings, $defaults, $var, &$prepared_value ) {
$prepared_value = self::css_var_prepare_value( $settings, $var );
if ( $prepared_value === '' ) {
return false;
}

if ( $defaults && $defaults[ $var ] === $prepared_value ) {
return false;
}

return self::css_value_is_valid( $prepared_value );
}
Comment thread
Crabcyborg marked this conversation as resolved.

/**
* Prevent invalid CSS keys from getting added to the generated CSS.
*
Expand All @@ -470,18 +495,14 @@ private static function css_key_is_valid( $key ) {
*
* @since 6.20
*
* @param mixed $var
* @param string $var
* @return bool
*/
private static function css_value_is_valid( $var ) {
if ( is_numeric( $var ) ) {
return true;
}

if ( ! is_string( $var ) ) {
return false;
}

// None of these substrings should be present in any CSS value.
$invalid_substrings = array(
'function(',
Expand Down Expand Up @@ -526,6 +547,10 @@ private static function clean_var_name( $var_name ) {
private static function css_var_prepare_value( $settings, $key ) {
$value = $settings[ $key ];

if ( ! is_string( $value ) && ! is_numeric( $value ) ) {
return '';
}

switch ( $key ) {
case 'font':
return safecss_filter_attr( $value );
Expand Down Expand Up @@ -556,7 +581,7 @@ private static function css_var_prepare_value( $settings, $key ) {
break;
}//end switch

return esc_html( $settings[ $key ] );
return esc_html( $value );
}

/**
Expand Down