Live data from Hacker News

The Shortest Crashing C Program

llbit.se

91–94 of 94 posts

Re: The Shortest Crashing C Program

#91
post #63
post #31

Earlier quoted context omitted.

Why? The file is marked as executable, so the shell very reasonably tries to execute it by calling some well-chosen member of the exec() family ( http://linux.die.net/man/3/exec ). The exec() function then needs to open and parse the file according to the formats it supports, which of course fails since the file is empty. Do you simply mean that you expected the shell to validate this, and not try to execute empty fi…

Traditionally, if the kernel cannot execute the file, then it is treated as a shell (/bin/sh) script. (Somewhere along the line, #! got added to specify an interpreter other than the shell.) I read POSIX as requiring this " rel="nofollow">http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu... , so if zsh claims to be a POSIX compatible shell, that's probably a bug. In Seventh Edition UNIX, /bin/true is an em…

The particular version of POSIX you linked to (2004) actually forbids the behavior you describe if you read it strictly. [1] defines a text file as "A file that contains characters organized into one or more lines.".

This was altered for 2008[2] to "A file that contains characters organized into zero or more lines."

The 2008 version is actually broken, since it contradicts itself -- a file cannot "contain characters" on zero lines.

[1] http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_...

[2] http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_...

Re: The Shortest Crashing C Program

#92
post #63

Earlier quoted context omitted.

Traditionally, if the kernel cannot execute the file, then it is treated as a shell (/bin/sh) script. (Somewhere along the line, #! got added to specify an interpreter other than the shell.) I read POSIX as requiring this " rel="nofollow">http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu... , so if zsh claims to be a POSIX compatible shell, that's probably a bug. In Seventh Edition UNIX, /bin/true is an em…

The particular version of POSIX you linked to (2004) actually forbids the behavior you describe if you read it strictly. [1] defines a text file as "A file that contains characters organized into one or more lines.". This was altered for 2008[2] to "A file that contains characters organized into zero or more lines." The 2008 version is actually broken, since it contradicts itself -- a file cannot "contain characters"…

> a file cannot "contain characters" on zero lines.

I disagree. To me this doesn't mean that a file "contains at least one character", but that files are containers and their contained values are characters. Like most containers in computer science, the set of contained values can be empty, but it's still meaningful to say that it's a container that "contains characters".

Re: The Shortest Crashing C Program

#94
post #30
post #7

It depends on the definition. You can do better than this if you define a valid C program as anything that passes though the C compiler and generates an executable. Behold the zero length program: $ touch a.c $ gcc -c a.c $ ld a.o ld: warning: cannot find entry symbol _start; defaulting to 0000000000400078 $ ./a.out Segmentation fault

Does not compute. At least on OS X: $ ld a.o ld: warning: -macosx_version_min not specified, assuming 10.7 Undefined symbols for architecture x86_64: "start", referenced from: implicit entry/start for main executable ld: symbol(s) not found for inferred architecture x86_64

How about:

    $ ld a.o -U _main -U start
Post reply on HN