From 8abfec3303461117e5b58930e70ddbefcde0b8fe Mon Sep 17 00:00:00 2001 From: Sharang Parnerkar <30073382+mighty840@users.noreply.github.com> Date: Mon, 30 Mar 2026 15:03:27 +0200 Subject: [PATCH] fix: escape newlines in CopyButton JS string 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) --- compliance-dashboard/src/components/copy_button.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/compliance-dashboard/src/components/copy_button.rs b/compliance-dashboard/src/components/copy_button.rs index 2ea335a..809d387 100644 --- a/compliance-dashboard/src/components/copy_button.rs +++ b/compliance-dashboard/src/components/copy_button.rs @@ -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);