Skip to content

Commit 76d4082

Browse files
committed
fix: escape text content
1 parent b6e4baf commit 76d4082

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

packages/userscript/src/main.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import html2canvas from 'html2canvas'
22
import { chatGPTAvatarSVG, fileCode, iconCamera, iconCopy } from './icons'
33
import './style.scss'
4-
import { copyToClipboard, downloadFile, downloadUrl, getBase64FromImg, onloadSafe, sleep, timestamp } from './utils'
4+
import { copyToClipboard, downloadFile, downloadUrl, escapeHtml, getBase64FromImg, onloadSafe, sleep, timestamp } from './utils'
55
import templateHtml from './template.html?raw'
66

77
type ConversationLine = |
@@ -84,15 +84,15 @@ function exportToHtml() {
8484
const lineHtml = line.map((item) => {
8585
switch (item.type) {
8686
case 'text':
87-
return item.text
87+
return escapeHtml(item.text)
8888
case 'image':
8989
return `<img src="${item.src}" referrerpolicy="no-referrer" />`
9090
case 'code':
91-
return `<code>${item.code}</code>`
91+
return `<code>${escapeHtml(item.code)}</code>`
9292
case 'code-block':
93-
return `<pre><code class="language-${item.lang}">${item.code}</code></pre>`
93+
return `<pre><code class="language-${item.lang}">${escapeHtml(item.code)}</code></pre>`
9494
case 'link':
95-
return `<a href="${item.href}" target="_blank" rel="noopener noreferrer">${item.text}</a>`
95+
return `<a href="${item.href}" target="_blank" rel="noopener noreferrer">${escapeHtml(item.text)}</a>`
9696
default:
9797
return ''
9898
}

packages/userscript/src/utils.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,12 @@ export function sleep(ms: number) {
5959
export function timestamp() {
6060
return new Date().toISOString().replace(/:/g, '-').replace(/\..+/, '')
6161
}
62+
63+
export function escapeHtml(html: string) {
64+
return html
65+
.replace(/&/g, '&amp;')
66+
.replace(/</g, '&lt;')
67+
.replace(/>/g, '&gt;')
68+
.replace(/"/g, '&quot;')
69+
.replace(/'/g, '&#039;')
70+
}

0 commit comments

Comments
 (0)