On Mon, Dec 22, 2014 at 4:36 PM, Jussi Piitulainen <jpiit...@ling.helsinki.fi> wrote: > Steven D'Aprano writes: > >> Don't try this at home! >> >> # download_naked_pictures_of_jennifer_lawrence.py >> import os >> os.system("rm ――rf /") > > Not sure what that character is (those characters are) but it's not > (they aren't) the hyphen that rm expects in its options, so: > > >>> os.system("rm ――rf /") > rm: cannot remove `――rf': No such file or directory > rm: cannot remove `/': Is a directory > 256
Let‘s ask Python: (polyglot 2.6+/3.3+ code!) from __future__ import print_function import unicodedata command = u"rm ――rf /" for i in command: print(hex(ord(i)), unicodedata.name(i)) 0x72 LATIN SMALL LETTER R 0x6d LATIN SMALL LETTER M 0x20 SPACE 0x2015 HORIZONTAL BAR 0x2015 HORIZONTAL BAR 0x72 LATIN SMALL LETTER R 0x66 LATIN SMALL LETTER F 0x20 SPACE 0x2f SOLIDUS There’s your answer: it’s U+2015 HORIZONTAL BAR, twice. And `rm` wants U+002D HYPHEN-MINUS instead. Moreover, it wants only one HYPHEN-MINUS and not two: Linux: $ rm --rf / rm: unrecognized option '--rf' Try 'rm --help' for more information. BSD: $ rm --rf / rm: illegal option -- - usage: rm [-f | -i] [-dIPRrvWx] file ... unlink file That’s two-step “protection”. (This e-mail brought to you by Unicode.) -- Chris Warrick <https://chriswarrick.com/> PGP: 5EAAEA16 -- https://mail.python.org/mailman/listinfo/python-list