From 65267f09fba61088ef4d6194ad0a6755d8da1015 Mon Sep 17 00:00:00 2001 From: Dion Hulse Date: Wed, 20 Jan 2016 07:39:47 +0000 Subject: [PATCH] Emoji: Work around a `mod_security` rule which prevents pages with 4 or more instances of `String.fromCharCode(` from being served. Fixes #35412 for trunk. git-svn-id: https://develop.svn.wordpress.org/trunk@36359 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/js/wp-emoji-loader.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/wp-includes/js/wp-emoji-loader.js b/src/wp-includes/js/wp-emoji-loader.js index 327f66a19b..83f431cc92 100755 --- a/src/wp-includes/js/wp-emoji-loader.js +++ b/src/wp-includes/js/wp-emoji-loader.js @@ -13,6 +13,7 @@ function browserSupportsEmoji( type ) { var canvas = document.createElement( 'canvas' ), context = canvas.getContext && canvas.getContext( '2d' ), + stringFromCharCode = String.fromCharCode, tone; if ( ! context || ! context.fillText ) { @@ -37,7 +38,7 @@ * The first two will encode to small images (1-2KB data URLs), the third will encode * to a larger image (4-5KB data URL). */ - context.fillText( String.fromCharCode( 55356, 56806, 55356, 56826 ), 0, 0 ); + context.fillText( stringFromCharCode( 55356, 56806, 55356, 56826 ), 0, 0 ); return canvas.toDataURL().length > 3000; } else if ( 'diversity' === type ) { /* @@ -45,9 +46,9 @@ * emoji with no skin tone specified (in this case, Santa). It then adds a skin tone, and * compares if the emoji rendering has changed. */ - context.fillText( String.fromCharCode( 55356, 57221 ), 0, 0 ); + context.fillText( stringFromCharCode( 55356, 57221 ), 0, 0 ); tone = context.getImageData( 16, 16, 1, 1 ).data.toString(); - context.fillText( String.fromCharCode( 55356, 57221, 55356, 57343 ), 0, 0 ); + context.fillText( stringFromCharCode( 55356, 57221, 55356, 57343 ), 0, 0 ); // Chrome has issues comparing arrays, so we compare it as a string, instead. return tone !== context.getImageData( 16, 16, 1, 1 ).data.toString(); } else { @@ -57,13 +58,13 @@ * center pixel. In browsers that don't support emoji, the character will be rendered * as an empty square, so the center pixel will be blank. */ - context.fillText( String.fromCharCode( 55357, 56835 ), 0, 0 ); + context.fillText( stringFromCharCode( 55357, 56835 ), 0, 0 ); } else { /* * To check for Unicode 8 support, let's try rendering the most important advancement * that the Unicode Consortium have made in years: the burrito. */ - context.fillText( String.fromCharCode( 55356, 57135 ), 0, 0 ); + context.fillText( stringFromCharCode( 55356, 57135 ), 0, 0 ); } return context.getImageData( 16, 16, 1, 1 ).data[0] !== 0; }