From ecf582c1da4880ce20f6b18a66fe557f7a14e207 Mon Sep 17 00:00:00 2001 From: Dominika Liberda Date: Sun, 28 Feb 2021 18:27:06 +0100 Subject: [PATCH] * fix for strings exceeding sed's length limit --- src/template.sh | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) mode change 100644 => 100755 src/template.sh diff --git a/src/template.sh b/src/template.sh old mode 100644 new mode 100755 index cce137b..68ad0c2 --- a/src/template.sh +++ b/src/template.sh @@ -5,22 +5,26 @@ function render() { local template="$(cat "$2")" local -n ref=$1 + local tmp=$(mktemp) for key in ${!ref[@]}; do local value="$(html_encode "${ref[$key]}" | sed -E 's/\&/�UwU�/g')" - template="$(sed -E 's/\{\{\.'"$key"'\}\}/'"$value"'/g' <<< "$template")" + echo 's/\{\{\.'"$key"'\}\}/'"$value"'/g' >> "$tmp" done - + template="$(sed -E -f "$tmp" <<< "$template")" sed -E 's/�UwU�/\&/g' <<< "$template" + rm "$tmp" } # render_unsafe(array, template_file) function render_unsafe() { local template="$(cat "$2")" local -n ref=$1 + local tmp=$(mktemp) for key in ${!ref[@]}; do local value="$(xxd -ps <<< "${ref[$key]}" | tr -d '\n' | sed -E 's/.{2}/\\x&/g')" - template="$(sed -E 's/\{\{\.'"$key"'\}\}/'"$value"'/g' <<< "$template")" + echo 's/\{\{\.'"$key"'\}\}/'"$value"'/g' >> "$tmp" done - echo "$template" + sed -E -f "$tmp" <<< "$template" + rm "$tmp" }