|
4 | 4 | import com.contentstack.utils.interfaces.NodeCallback; |
5 | 5 | import com.contentstack.utils.interfaces.Option; |
6 | 6 | import com.contentstack.utils.node.MarkType; |
| 7 | +import org.apache.commons.text.StringEscapeUtils; |
7 | 8 | import org.json.JSONObject; |
8 | 9 |
|
9 | 10 |
|
@@ -58,22 +59,27 @@ public String renderMark(MarkType markType, String text) { |
58 | 59 | } |
59 | 60 | } |
60 | 61 |
|
| 62 | + private String escapeInjectHtml(JSONObject nodeObj, String nodeType) { |
| 63 | + String injectedHtml = getNodeStr(nodeObj, nodeType); |
| 64 | + return StringEscapeUtils.escapeHtml4(injectedHtml); |
| 65 | + } |
| 66 | + |
61 | 67 | @Override |
62 | 68 | public String renderNode(String nodeType, JSONObject nodeObject, NodeCallback callback) { |
63 | 69 | String children = callback.renderChildren(nodeObject.optJSONArray("children")); |
64 | 70 | switch (nodeType) { |
65 | 71 | case "p": |
66 | 72 | return "<p>" + children + "</p>"; |
67 | 73 | case "a": |
68 | | - return "<a href=\"" + getNodeStr(nodeObject, "href") + "\">" + children + "</a>"; |
| 74 | + return "<a href=\"" + escapeInjectHtml(nodeObject, "href") + "\">" + children + "</a>"; |
69 | 75 | case "img": |
70 | 76 | String assetLink = getNodeStr(nodeObject, "asset-link"); |
71 | 77 | if (!assetLink.isEmpty()) { |
72 | | - return "<img src=\"" + assetLink + "\" />" + children; |
| 78 | + return "<img src=\"" + escapeInjectHtml(nodeObject, "asset-link") + "\" />" + children; |
73 | 79 | } |
74 | | - return "<img src=\"" + getNodeStr(nodeObject, "src") + "\" />" + children; |
| 80 | + return "<img src=\"" + escapeInjectHtml(nodeObject, "src") + "\" />" + children; |
75 | 81 | case "embed": |
76 | | - return "<iframe src=\"" + getNodeStr(nodeObject, "src") + "\"" + children + "</iframe>"; |
| 82 | + return "<iframe src=\"" + escapeInjectHtml(nodeObject, "src") + "\"" + children + "</iframe>"; |
77 | 83 | case "h1": |
78 | 84 | return "<h1>" + children + "</h1>"; |
79 | 85 | case "h2": |
|
0 commit comments