fix: escape newlines in CopyButton JS string
All checks were successful
CI / Check (pull_request) Successful in 9m38s
CI / Detect Changes (pull_request) Has been skipped
CI / Deploy Agent (pull_request) Has been skipped
CI / Deploy Dashboard (pull_request) Has been skipped
CI / Deploy Docs (pull_request) Has been skipped
CI / Deploy MCP (pull_request) Has been skipped

Valid finding from PR review: copy button's JS string could break
on values with newlines. Added \n and \r escaping.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sharang Parnerkar
2026-03-30 15:03:27 +02:00
parent 2534c03e3b
commit 8abfec3303

View File

@@ -22,8 +22,12 @@ pub fn CopyButton(value: String, #[props(default = false)] small: bool) -> Eleme
title: if copied() { "Copied!" } else { "Copy to clipboard" },
onclick: move |_| {
let val = value.clone();
// Escape single quotes for JS
let escaped = val.replace('\\', "\\\\").replace('\'', "\\'");
// Escape for JS single-quoted string
let escaped = val
.replace('\\', "\\\\")
.replace('\'', "\\'")
.replace('\n', "\\n")
.replace('\r', "\\r");
let js = format!("navigator.clipboard.writeText('{escaped}')");
document::eval(&js);
copied.set(true);