|
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