mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-12 04:35:41 +03:00
update-source-version: escape special characters when replacing url
URLs can contain characters that sed would consider special in the context of the regex pattern. Let’s switch the URL replacement `sed` command to use POSIX Basic Regular Expression syntax to reduce the number of characters that need to be escaped: https://www.gnu.org/software/sed/manual/html_node/BRE-syntax.html Then, let’s escape all BRE special characters, plus the separator character `|` of the `s` command in the old URL pattern. Similarly, the replacement part of the `s` command (new URL) can also contain special characters (e.g. the `&` character would be replaced with the whole matched expression), so we need to escape it as well: https://www.gnu.org/software/sed/manual/html_node/The-_0022s_0022-Command.html Co-Authored-By: Jan Tojnar <jtojnar@gmail.com>
This commit is contained in:
parent
49b6072f10
commit
dfb8bf17cf
1 changed files with 4 additions and 3 deletions
|
@ -229,10 +229,11 @@ if [[ -n "$newUrl" ]]; then
|
||||||
die "Couldn't evaluate source url from '$attr.$sourceKey'!"
|
die "Couldn't evaluate source url from '$attr.$sourceKey'!"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Escape regex metacharacter that are allowed in store path names
|
# Escape regex metacharacter that may appear in URLs
|
||||||
oldUrlEscaped=$(echo "$oldUrl" | sed -re 's|[${}.+?]|\\&|g')
|
oldUrlEscaped=$(echo "$oldUrl" | sed -e 's|[*.^$[\|]|\\&|g')
|
||||||
|
newUrlEscaped=$(echo "$newUrl" | sed -e 's|[&\|]|\\&|g')
|
||||||
|
|
||||||
sed -i.cmp "$nixFile" -re "s|\"$oldUrlEscaped\"|\"$newUrl\"|"
|
sed -i.cmp "$nixFile" -e "s|\"$oldUrlEscaped\"|\"$newUrlEscaped\"|"
|
||||||
if cmp -s "$nixFile" "$nixFile.cmp"; then
|
if cmp -s "$nixFile" "$nixFile.cmp"; then
|
||||||
die "Failed to replace source URL '$oldUrl' to '$newUrl' in '$attr'!"
|
die "Failed to replace source URL '$oldUrl' to '$newUrl' in '$attr'!"
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue