* Convert a value into the proper css writable value. The style name `name` * should be logical (no hyphens), as specified * in `CSSProperty.isUnitlessNumber`. * * @param {string} name CSS property name such as `topMargin`. * @param {*} value CSS property value such as `10px`. * @return {strin
(name, value, isCustomProperty)
| 14943 | * @return {string} Normalized style value with dimensions applied. |
| 14944 | */ |
| 14945 | function dangerousStyleValue(name, value, isCustomProperty) { |
| 14946 | // Note that we've removed escapeTextForBrowser() calls here since the |
| 14947 | // whole string will be escaped when the attribute is injected into |
| 14948 | // the markup. If you provide unsafe user data here they can inject |
| 14949 | // arbitrary CSS which may be problematic (I couldn't repro this): |
| 14950 | // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet |
| 14951 | // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/ |
| 14952 | // This is not an XSS hole but instead a potential CSS injection issue |
| 14953 | // which has lead to a greater discussion about how we're going to |
| 14954 | // trust URLs moving forward. See #2115901 |
| 14955 | |
| 14956 | var isEmpty = value == null || typeof value === 'boolean' || value === ''; |
| 14957 | if (isEmpty) { |
| 14958 | return ''; |
| 14959 | } |
| 14960 | |
| 14961 | if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) { |
| 14962 | return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers |
| 14963 | } |
| 14964 | |
| 14965 | return ('' + value).trim(); |
| 14966 | } |
| 14967 | |
| 14968 | var warnValidStyle = emptyFunction; |
| 14969 |
no outgoing calls
no test coverage detected