наб <nabijaczleweli@xxxxxxxxxxxxxxxxxx> wrote: > [-- text/plain, encoding quoted-printable, charset: us-ascii, 109 lines --] > > See standards quote within, but the fun bit is: > alias "a'b=c" "ls&id=cd"; alias > outputs > ls&id='cd' > a'b='c' > neither of which is What You Want, and also you can't invoke them > because you need to escape the quote/&/whatever, which disables > alias processing. Forbid the minimum broken set. > > For reference's sake, here's a test driver: > #include <stdio.h> > #include <stdlib.h> > #include <string.h> > #include <sys/wait.h> > #include <unistd.h> > int main(int _, char ** argv) { > putenv("LC_ALL=C"); > char val[] = "alias 'aQb=echo a' && alias"; > unsigned char * vp = strchr(val, 'Q'); > for(unsigned i = 0; i <= 0xFF; ++i) { > *vp = i; > if(!vfork()) { > execl(argv[1], "sh", "-c", val, (char *)NULL); > _exit(-1); > } > int r; > wait(&r); > fprintf(stderr, "%02x: %d\n", i, WEXITSTATUS(r)); > } > } > > zsh refuses nothing > dash refuses 09 0a 20 22 24 26 27 28 29 3b 3c 3e 5c 60 7c > bash refuses dash + 2f > mksh refuses bash + 23 + 2a + 3f + 5e + <20 + >7c > ksh refuses bash + 2a + 3f + 5b + 7b + 7d > > Fixes: https://bugs.debian.org/758542 The main objective of dash is to try to be minimal, so I'm not going to take this patch. Thanks, -- Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt