From b3930804c6e89f31cad41376beecd30940932e5f Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 15 Mar 2023 22:57:27 -0700 Subject: [PATCH] Switched to using codePoints in toHtmlEntities --- .../main/java/rife/render/EncodeHtmlEntities.java | 15 ++++++++++----- lib/src/main/java/rife/render/RenderUtils.java | 2 +- lib/src/main/java/rife/render/Rot13.java | 4 ++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/src/main/java/rife/render/EncodeHtmlEntities.java b/lib/src/main/java/rife/render/EncodeHtmlEntities.java index 5e33b49..4d3b35e 100644 --- a/lib/src/main/java/rife/render/EncodeHtmlEntities.java +++ b/lib/src/main/java/rife/render/EncodeHtmlEntities.java @@ -44,14 +44,19 @@ public class EncodeHtmlEntities implements ValueRenderer { * @param text the String to convert. * @return the converted string. */ + @SuppressWarnings("PMD.AvoidReassigningLoopVariables") public static String toHtmlEntities(String text) { - var buff = new StringBuilder(text.length() * 6); - + // https://stackoverflow.com/a/6766497/8356718 + var sb = new StringBuilder(text.length() * 6); for (var i = 0; i < text.length(); i++) { - buff.append("&#").append((int) text.charAt(i)).append(';'); + var codePoint = text.codePointAt(i); + // Skip over the second char in a surrogate pair + if (codePoint > 0xffff) { + i++; + } + sb.append(String.format("&#%s;", codePoint)); } - - return buff.toString(); + return sb.toString(); } /** diff --git a/lib/src/main/java/rife/render/RenderUtils.java b/lib/src/main/java/rife/render/RenderUtils.java index 609f65b..85ea7f1 100644 --- a/lib/src/main/java/rife/render/RenderUtils.java +++ b/lib/src/main/java/rife/render/RenderUtils.java @@ -33,7 +33,7 @@ public final class RenderUtils { * * @param template the template * @param valueId the ID of the value to fetch - * @return The fetched value. + * @return the fetched value. */ public static String fetchValue(Template template, String valueId) { Object value = null; diff --git a/lib/src/main/java/rife/render/Rot13.java b/lib/src/main/java/rife/render/Rot13.java index a18ae41..ea51982 100644 --- a/lib/src/main/java/rife/render/Rot13.java +++ b/lib/src/main/java/rife/render/Rot13.java @@ -37,8 +37,8 @@ public class Rot13 implements ValueRenderer { /** * Translates a String to/from ROT13. * - * @param src The source String. - * @return The translated String. + * @param src the source String. + * @return the translated String. */ public static String rot13(String src) { if (src == null || src.isEmpty()) {