From bc099baeb11fcb4cc43747c3f58d1df24f6e664a Mon Sep 17 00:00:00 2001 From: Michael Bisbjerg Date: Sun, 6 Apr 2025 01:10:27 +0200 Subject: [PATCH] Guard against hostnames/avahi responses with spaces --- tools/wled-tools | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/tools/wled-tools b/tools/wled-tools index d99e9e51a..345ef1ec1 100644 --- a/tools/wled-tools +++ b/tools/wled-tools @@ -68,22 +68,23 @@ EOF } # Discover devices using mDNS -discover_devices() { - if ! command -v avahi-browse &> /dev/null; then - log "ERROR" "$RED" "'avahi-browse' is required but not installed." - exit 1 - fi +discover_devices() { + if ! command -v avahi-browse &> /dev/null; then + log "ERROR" "$RED" "'avahi-browse' is required but not installed." + exit 1 + fi - mapfile -t raw_devices < <(avahi-browse _wled._tcp --terminate -r -p | awk -F';' '/^=/ {print $7, $8, $9}') + # Map avahi responses to strings seperated by 0x1F (unit separator) + mapfile -t raw_devices < <(avahi-browse _wled._tcp --terminate -r -p | awk -F';' '/^=/ {print $7"\x1F"$8"\x1F"$9}') - local devices_array=() - for device in "${raw_devices[@]}"; do - read -r hostname address port <<< "$device" - devices_array+=("$hostname" "$address" "$port") - done + local devices_array=() + for device in "${raw_devices[@]}"; do + IFS=$'\x1F' read -r hostname address port <<< "$device" + devices_array+=("$hostname" "$address" "$port") + done - echo "${devices_array[@]}" -} + echo "${devices_array[@]}" +} # Backup one device backup_one() {