[tz] [PROPOSED] Don’t assume nonempty argv

Guy Harris gharris at sonic.net
Sat Oct 29 18:55:43 UTC 2022


On Oct 28, 2022, at 11:56 PM, Paul Eggert via tz <tz at iana.org> wrote:

> Don’t dump core if argv[0] is NULL, which is allowed on
> GNU/Linux if the invoker is sufficiently perverse.

Is argc == 0 in that case?

On macOS Monterey, at least, this program:

#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>

int
main(void)
{
	char *args[1] = { NULL };

	if (execv("./me", args) == -1) {
		fprintf(stderr, "Exec of ./me failed: %s\n",
		    strerror(errno));
		return 2;
	}
	// This cannot possibly happen
	return 0;
}

can then exec this program:

#include <stdio.h>

int
main(int argc, char **argv)
{
	printf("argc = %d\n", argc);
	printf("argv[0] = %p\n", argv[0]);
	return 0;
}

and the latter will print

argc = 0
argv[0] = 0x0

I suspect at least some other UN*Xes behave in the same fashion.

Is the first program a sufficiently perverse invoker, in which case I'd expect that argc == 0 will be true of argv[0] == NULL is true, or are you thinking of something even *more* perverse, that gives you a non-zero argc and a null argv[0]?


More information about the tz mailing list