* fix for strings exceeding sed's length limit

merge-requests/2/head
Dominika Liberda 2021-02-28 18:27:06 +01:00
parent 68e1c1b06c
commit ecf582c1da
1 changed files with 8 additions and 4 deletions

12
src/template.sh Normal file → Executable file
View File

@ -5,22 +5,26 @@
function render() { function render() {
local template="$(cat "$2")" local template="$(cat "$2")"
local -n ref=$1 local -n ref=$1
local tmp=$(mktemp)
for key in ${!ref[@]}; do for key in ${!ref[@]}; do
local value="$(html_encode "${ref[$key]}" | sed -E 's/\&/<2F>UwU<77>/g')" local value="$(html_encode "${ref[$key]}" | sed -E 's/\&/<2F>UwU<77>/g')"
template="$(sed -E 's/\{\{\.'"$key"'\}\}/'"$value"'/g' <<< "$template")" echo 's/\{\{\.'"$key"'\}\}/'"$value"'/g' >> "$tmp"
done done
template="$(sed -E -f "$tmp" <<< "$template")"
sed -E 's/<2F>UwU<77>/\&/g' <<< "$template" sed -E 's/<2F>UwU<77>/\&/g' <<< "$template"
rm "$tmp"
} }
# render_unsafe(array, template_file) # render_unsafe(array, template_file)
function render_unsafe() { function render_unsafe() {
local template="$(cat "$2")" local template="$(cat "$2")"
local -n ref=$1 local -n ref=$1
local tmp=$(mktemp)
for key in ${!ref[@]}; do for key in ${!ref[@]}; do
local value="$(xxd -ps <<< "${ref[$key]}" | tr -d '\n' | sed -E 's/.{2}/\\x&/g')" 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 done
echo "$template" sed -E -f "$tmp" <<< "$template"
rm "$tmp"
} }