in reply to null byte issue in system command
Prior comments were tripped up by your lack of escaping of your (inner) double quotes; so I'll start by restating the problem without that mistake:
$ perl -e 'system("echo -e \"\xFF\x08\x01\" | od");' 0000000 062455 177440 000410 000012 0000007 $ perl -e 'system("echo -e \"\xFF\x08\x00\" | od");' sh: 1: Syntax error: Unterminated quoted string $
And the explanation is quite simple. Perl supports "\x00" bytes in strings but many of the C library routines that Perl must call only support "\x00"-terminated strings.
Even in C, if you pass "echo blah\0blah blah" to system(), what gets passed is more accurately "echo blah\0blah blah\0" and system()/sh stop copying/parsing the string when they hit a terminating "\0" character... the first one, of course. (This is also described in the standard Perl documentation.)
- tye
|
|---|