fix: handle non-string values in flink tag escaping

Co-authored-by: jerryc127 <16351105+jerryc127@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]andjerryc127 authored and GitHub committed 2026-09-23 16:12:24 +00:00 Unverified
1 parent c6e888a722
commit 9da4eef21d
1 file changed
+7 -6
+7 -6
View File
@@ -6,23 +6,24 @@
const { url_for, escapeHTML } = require('hexo-util') const { url_for, escapeHTML } = require('hexo-util')
const urlFor = url_for.bind(hexo) const urlFor = url_for.bind(hexo)
const safeEscape = value => escapeHTML(value == null ? '' : String(value))
const flinkFn = (args, content) => { const flinkFn = (args, content) => {
const data = hexo.render.renderSync({ text: content, engine: 'yaml' }) const data = hexo.render.renderSync({ text: content, engine: 'yaml' })
let result = '' let result = ''
data.forEach(item => { data.forEach(item => {
const className = item.class_name ? `<div class="flink-name">${escapeHTML(item.class_name)}</div>` : '' const className = item.class_name ? `<div class="flink-name">${safeEscape(item.class_name)}</div>` : ''
const classDesc = item.class_desc ? `<div class="flink-desc">${escapeHTML(item.class_desc)}</div>` : '' const classDesc = item.class_desc ? `<div class="flink-desc">${safeEscape(item.class_desc)}</div>` : ''
const listResult = item.link_list.map(link => ` const listResult = item.link_list.map(link => `
<div class="flink-list-item"> <div class="flink-list-item">
<a href="${escapeHTML(link.link)}" title="${escapeHTML(link.name)}" target="_blank"> <a href="${safeEscape(link.link)}" title="${safeEscape(link.name)}" target="_blank">
<div class="flink-item-icon"> <div class="flink-item-icon">
<img class="no-lightbox" src="${escapeHTML(link.avatar)}" onerror='this.onerror=null;this.src="${urlFor(hexo.theme.config.error_img.flink)}"' alt="${escapeHTML(link.name)}" /> <img class="no-lightbox" src="${safeEscape(link.avatar)}" onerror='this.onerror=null;this.src="${urlFor(hexo.theme.config.error_img.flink)}"' alt="${safeEscape(link.name)}" />
</div> </div>
<div class="flink-item-name">${escapeHTML(link.name)}</div> <div class="flink-item-name">${safeEscape(link.name)}</div>
<div class="flink-item-desc" title="${escapeHTML(link.descr)}">${escapeHTML(link.descr)}</div> <div class="flink-item-desc" title="${safeEscape(link.descr)}">${safeEscape(link.descr)}</div>
</a> </a>
</div>`).join('') </div>`).join('')