diff options
author | Dmitry Kalinkin <dmitry.kalinkin@gmail.com> | 2019-05-03 12:56:44 -0400 |
---|---|---|
committer | Dmitry Kalinkin <dmitry.kalinkin@gmail.com> | 2019-05-03 12:56:44 -0400 |
commit | fdada4a45fcf8905b61448094f4de388a89fb444 (patch) | |
tree | 7800d7ba7760388f47e847de3034e802507bb958 /pkgs/build-support/nuke-references | |
parent | 56b560942c7b567b1e3d6c48cce0e5891f4e72e6 (diff) |
nukeReferences: fix for store paths with special characters (like '+' or '.')
This introduces extra escaping for $NIX_STORE that gets interpolated into a PCRE. The escaping is performed using a standard Perl function "quotemeta" (see "perldoc -f quotemeta" for reference). The same value is also used in sed regex which uses POSIX basic regular expressions instead of PCRE, so it needs fewer characters to be escaped. It should not cause much problem to not change sed invocation, but I replace it with equivalent Perl expression (actually the behavior is changed to not output a newline character after the matched output).
Diffstat (limited to 'pkgs/build-support/nuke-references')
-rw-r--r-- | pkgs/build-support/nuke-references/builder.sh | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/pkgs/build-support/nuke-references/builder.sh b/pkgs/build-support/nuke-references/builder.sh index 02eac664d4371..7da322032185d 100644 --- a/pkgs/build-support/nuke-references/builder.sh +++ b/pkgs/build-support/nuke-references/builder.sh @@ -7,7 +7,7 @@ cat > $out/bin/nuke-refs <<EOF excludes="" while getopts e: o; do case "\$o" in - e) storeId=\$(echo "\$OPTARG" | sed -n "s|^$NIX_STORE/\\([a-z0-9]\{32\}\\)-.*|\1|p") + e) storeId=\$(echo "\$OPTARG" | $perl/bin/perl -ne "print \"\\\$1\" if m|^\Q$NIX_STORE\E/([a-z0-9]{32})-.*|") if [ -z "\$storeId" ]; then echo "-e argument must be a Nix store path" exit 1 @@ -20,7 +20,7 @@ shift \$((\$OPTIND-1)) for i in "\$@"; do if test ! -L "\$i" -a -f "\$i"; then - cat "\$i" | $perl/bin/perl -pe "s|$NIX_STORE/\$excludes[a-z0-9]{32}-|$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-|g" > "\$i.tmp" + cat "\$i" | $perl/bin/perl -pe "s|\Q$NIX_STORE\E/\$excludes[a-z0-9]{32}-|$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-|g" > "\$i.tmp" if test -x "\$i"; then chmod +x "\$i.tmp"; fi mv "\$i.tmp" "\$i" fi |