PHP 7.3 へのバージョンアップに伴う、WordPressのプラグイン "Crayon Syntax Highlighter" の不具合修正方法。ちなみに "Crayon Syntax Highlighter"の更新は3年前の2016年以降停止しているため、他のプラグインに乗り換えた方が賢明かもしれません。
1. [深刻な不具合] 正規表現におけるエスケープ漏れ
1.1. エラーログ
1 |
[23-Mar-2019 09:53:22 UTC] PHP Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /var/www/html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340 |
1.2. 不具合の原因
ハイフン (-
) は '[A-Z]'
のように文字の範囲を示すためのメタ文字。文字として扱うときは '\'
でエスケープすべき。
1.3. 修正方法 (diff)
1 2 3 4 5 6 7 8 9 |
--- a/html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php +++ b/html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php @@ -337,7 +337,7 @@ class CrayonLang extends CrayonVersionResource { // Override function clean_id($id) { $id = CrayonUtil::space_to_hyphen( strtolower(trim($id)) ); - return preg_replace('/[^\w-+#]/msi', '', $id); + return preg_replace('/[^\w\-+#]/msi', '', $id); } |
2. [軽微な不具合] 文字列に対する不適切な数値演算
2.1. エラーログ
1 |
[23-Mar-2019 10:00:21 UTC] PHP Notice: A non well formed numeric value encountered in /var/www/html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118 |
2.2. 不具合の原因
$font_size
には数値への変換ができない文字(アルファベットなど)が含まれている。
2.3. 修正方法 (diff)
1 2 3 4 5 6 7 8 9 10 |
--- a/html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php +++ b/html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php @@ -115,8 +115,8 @@ class CrayonFormatter { $_line_height = $hl->setting_val(CrayonSettings::LINE_HEIGHT); // Don't allow line height to be less than font size $line_height = ($_line_height > $_font_size ? $_line_height : $_font_size) . 'px !important;'; - $toolbar_height = $font_size * 1.5 . 'px !important;'; - $info_height = $font_size * 1.4 . 'px !important;'; + $toolbar_height = $_font_size * 1.5 . 'px !important;'; + $info_height = $_font_size * 1.4 . 'px !important;'; |