From ad0e12c605e5c3151894153f6838edaca9709b11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20=C3=85kesson?= Date: Sat, 11 Apr 2026 16:38:12 +0200 Subject: [PATCH] fix: escape special characters when sharing qr code --- src/mode/station/share.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/mode/station/share.rs b/src/mode/station/share.rs index 53cfa98..54e22a2 100644 --- a/src/mode/station/share.rs +++ b/src/mode/station/share.rs @@ -20,6 +20,16 @@ pub struct Share { pub passphrase: String, } +// https://github.com/zxing/zxing/wiki/Barcode-Contents#wi-fi-network-config-android-ios-11 +fn get_escaped_wifi_value(value: &str) -> String { + value + .replace('\\', r"\\") + .replace(';', r"\;") + .replace(',', r"\,") + .replace('"', r#"\""#) + .replace(':', r"\:") +} + impl Share { pub fn new(network_name: String) -> Result { let encoded_network_name = iwd_network_name(&network_name); @@ -30,7 +40,11 @@ impl Share { .find(|&line| line.starts_with("Passphrase=")) && let Some((_, passphrase)) = line.split_once('=') { - let message = format!("WIFI:T:WPA;S:{network_name};P:{passphrase};;"); + let message = format!( + "WIFI:T:WPA;S:{};P:{};;", + get_escaped_wifi_value(&network_name), + get_escaped_wifi_value(passphrase), + ); let qr_code = QrCode::new(message)?; Ok(Self { qr_code,