nix-prefetch-git: escape string fields properly

json requires certain characters to be escaped in strings.
This commit is contained in:
Jörg Thalheim 2016-10-08 19:07:20 +02:00
parent 7d44426ccd
commit 954d995394
No known key found for this signature in database
GPG Key ID: CA4106B8D7CC79FA

View File

@ -322,6 +322,18 @@ clone_user_rev() {
fi fi
} }
json_escape() {
local s="$1"
s="${s//\\/\\\\}" # \
s="${s//\"/\\\"}" # "
s="${s//^H/\\\b}" # \b (backspace)
s="${s//^L/\\\f}" # \f (form feed)
s="${s//
/\\\n}" # \n (newline)
s="${s//^M/\\\r}" # \r (carriage return)
s="${s// /\\t}" # \t (tab)
echo "$s"
}
print_results() { print_results() {
hash="$1" hash="$1"
@ -338,17 +350,15 @@ print_results() {
fi fi
fi fi
if test -n "$hash"; then if test -n "$hash"; then
echo "{" cat <<EOF
echo " \"url\": \"$url\"," {
echo " \"rev\": \"$fullRev\"," "url": "$(json_escape "$url")",
echo " \"date\": \"$commitDateStrict8601\"," "rev": "$(json_escape "$fullRev")",
echo -n " \"$hashType\": \"$hash\"" "date": "$(json_escape "$commitDateStrict8601")",
if test -n "$fetchSubmodules"; then "$(json_escape "$hashType")": "$(json_escape "$hash")",
echo "," "fetchSubmodules": $([[ -n "fetchSubmodules" ]] && echo true || echo false)
echo -n " \"fetchSubmodules\": true" }
fi EOF
echo ""
echo "}"
fi fi
} }