lol

makeBinaryWrapper: protect wildcards in flags

+26 -6
+15
pkgs/build-support/setup-hooks/make-binary-wrapper/make-binary-wrapper.sh
··· 193 193 194 194 addFlags() { 195 195 local n flag before after var 196 + 197 + # Disable file globbing, since bash will otherwise try to find 198 + # filenames matching the the value to be prefixed/suffixed if 199 + # it contains characters considered wildcards, such as `?` and 200 + # `*`. We want the value as is, except we also want to split 201 + # it on on the separator; hence we can't quote it. 202 + local reenableGlob=0 203 + if [[ ! -o noglob ]]; then 204 + reenableGlob=1 205 + fi 206 + set -o noglob 196 207 # shellcheck disable=SC2086 197 208 before=($1) after=($2) 209 + if (( reenableGlob )); then 210 + set +o noglob 211 + fi 212 + 198 213 var="argv_tmp" 199 214 printf '%s\n' "char **$var = calloc(${#before[@]} + argc + ${#after[@]} + 1, sizeof(*$var));" 200 215 printf '%s\n' "assert($var != NULL);"
+7 -5
pkgs/test/make-binary-wrapper/add-flags.c
··· 3 3 #include <assert.h> 4 4 5 5 int main(int argc, char **argv) { 6 - char **argv_tmp = calloc(4 + argc + 2 + 1, sizeof(*argv_tmp)); 6 + char **argv_tmp = calloc(6 + argc + 2 + 1, sizeof(*argv_tmp)); 7 7 assert(argv_tmp != NULL); 8 8 argv_tmp[0] = argv[0]; 9 9 argv_tmp[1] = "-x"; 10 10 argv_tmp[2] = "-y"; 11 11 argv_tmp[3] = "-z"; 12 12 argv_tmp[4] = "-abc"; 13 + argv_tmp[5] = "-g"; 14 + argv_tmp[6] = "*.txt"; 13 15 for (int i = 1; i < argc; ++i) { 14 - argv_tmp[4 + i] = argv[i]; 16 + argv_tmp[6 + i] = argv[i]; 15 17 } 16 - argv_tmp[4 + argc + 0] = "-foo"; 17 - argv_tmp[4 + argc + 1] = "-bar"; 18 - argv_tmp[4 + argc + 2] = NULL; 18 + argv_tmp[6 + argc + 0] = "-foo"; 19 + argv_tmp[6 + argc + 1] = "-bar"; 20 + argv_tmp[6 + argc + 2] = NULL; 19 21 argv = argv_tmp; 20 22 21 23 argv[0] = "/send/me/flags";
+2 -1
pkgs/test/make-binary-wrapper/add-flags.cmdline
··· 1 1 --append-flags "-foo -bar" \ 2 2 --add-flags "-x -y -z" \ 3 - --add-flags -abc 3 + --add-flags -abc \ 4 + --add-flags "-g *.txt"
+2
pkgs/test/make-binary-wrapper/add-flags.env
··· 4 4 -y 5 5 -z 6 6 -abc 7 + -g 8 + *.txt 7 9 -foo 8 10 -bar