@@ -881,7 +881,7 @@
|
||||
const images = getResultImages();
|
||||
if (images.length === 0) return '';
|
||||
return '<div class="tool-images">' +
|
||||
images.map(img => `<img src="data:${escapeHtml(img.mimeType || 'image/png')};base64,${img.data}" class="tool-image" />`).join('') +
|
||||
images.map(img => `<img src="data:${escapeHtml(img.mimeType || 'image/png')};base64,${escapeHtml(img.data || '')}" class="tool-image" />`).join('') +
|
||||
'</div>';
|
||||
};
|
||||
|
||||
@@ -1148,7 +1148,7 @@
|
||||
if (images.length > 0) {
|
||||
html += '<div class="message-images">';
|
||||
for (const img of images) {
|
||||
html += `<img src="data:${escapeHtml(img.mimeType || 'image/png')};base64,${img.data}" class="message-image" />`;
|
||||
html += `<img src="data:${escapeHtml(img.mimeType || 'image/png')};base64,${escapeHtml(img.data || '')}" class="message-image" />`;
|
||||
}
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
@@ -25,4 +25,10 @@ describe("export HTML markdown link sanitization", () => {
|
||||
expect(templateJs).not.toMatch(/\$\{img\.mimeType\}/);
|
||||
expect(templateJs).toMatch(/escapeHtml\(img\.mimeType/);
|
||||
});
|
||||
|
||||
it("escapes image data attributes", () => {
|
||||
// Image data is embedded in src attributes and must not allow attribute breakout.
|
||||
expect(templateJs).not.toMatch(/;base64,\$\{img\.data\}"/);
|
||||
expect(templateJs).toMatch(/;base64,\$\{escapeHtml\(img\.data \|\| (?:''|"")\)\}"/);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user