setProgName() crashes when argv[0] == NULL
C89 allows argc to be 0, in which case argv[0] is NULL. This can happen in practice in Linux+glibc with execve(program, {NULL}, ...);.
The RTS assumes that argv[0] always points to a valid string: void setProgName(char *argv[]) { char *last_slash; if ( (last_slash = (char *) strrchr(argv[0], '/')) != NULL ) { ... } else { ... } }.
This means that any GHC-compiled program can be made to segfault with execl("./ghc-compiled-program", NULL);.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.4.2 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Runtime System |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |