From 1966ba3a532d0e9fba0ffc55882adb77e281b8a4 Mon Sep 17 00:00:00 2001 From: lolodomo Date: Sat, 27 Jan 2024 20:58:23 +0100 Subject: [PATCH] [BasicUI] Replace non printable characters (#2284) Fix #2250 Non printable characters are replaced by the unicode replacement character. Signed-off-by: Laurent Garnier --- .../ui/basic/internal/render/AbstractWidgetRenderer.java | 4 +++- bundles/org.openhab.ui.basic/web-src/smarthome.js | 9 ++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/bundles/org.openhab.ui.basic/src/main/java/org/openhab/ui/basic/internal/render/AbstractWidgetRenderer.java b/bundles/org.openhab.ui.basic/src/main/java/org/openhab/ui/basic/internal/render/AbstractWidgetRenderer.java index 9ca1d19c0..7b8b3377f 100644 --- a/bundles/org.openhab.ui.basic/src/main/java/org/openhab/ui/basic/internal/render/AbstractWidgetRenderer.java +++ b/bundles/org.openhab.ui.basic/src/main/java/org/openhab/ui/basic/internal/render/AbstractWidgetRenderer.java @@ -438,7 +438,9 @@ public abstract class AbstractWidgetRenderer implements WidgetRenderer { } protected String escapeHtml(@Nullable String s) { - return StringEscapeUtils.escapeHtml4(s); + String result = StringEscapeUtils.escapeHtml4(s); + // Also replace non printable characters by the unicode replacement character + return result != null ? result.replaceAll("[\\p{C}]", "\uFFFD") : ""; } @Override diff --git a/bundles/org.openhab.ui.basic/web-src/smarthome.js b/bundles/org.openhab.ui.basic/web-src/smarthome.js index ad4bb8e5d..dedd8daf5 100644 --- a/bundles/org.openhab.ui.basic/web-src/smarthome.js +++ b/bundles/org.openhab.ui.basic/web-src/smarthome.js @@ -2314,10 +2314,13 @@ _t.escapeHtml = function(text) { var escapedText = text, + nonPrintable = new RegExp(/\p{C}/, "gu"), escapeTable = [ - [ /&/g, "&" ], - [ //g, ">" ] + [ /&/g, "&" ], + [ //g, ">" ], + [ /"/g, """ ], + [ nonPrintable, "\uFFFD" ] ]; for (var i = 0; i < escapeTable.length; i++) {