Set argv[argc] to NULL when calling main

ISO C states that argv[argc] shall be a null pointer.

The OpenSSH codebase does not appear to rely on this currently, but
better to be safe in case something changes.
This commit is contained in:
Mike Gilbert 2024-10-09 16:24:26 -04:00
parent e1661bfcb4
commit b726e8a3ed
3 changed files with 19 additions and 22 deletions

View File

@ -43,13 +43,12 @@ wmain(int argc, wchar_t **wargv) {
char** argv = NULL;
int i, r;
_set_invalid_parameter_handler(invalid_parameter_handler);
if (argc) {
if ((argv = malloc(argc * sizeof(char*))) == NULL)
if ((argv = malloc((argc + 1) * sizeof(char*))) == NULL)
fatal("out of memory");
for (i = 0; i < argc; i++)
if ((argv[i] = utf16_to_utf8(wargv[i])) == NULL)
fatal("out of memory");
for (i = 0; i < argc; i++)
if ((argv[i] = utf16_to_utf8(wargv[i])) == NULL)
fatal("out of memory");
}
argv[argc] = NULL;
if (getenv("SSH_AUTH_SOCK") == NULL)
_putenv("SSH_AUTH_SOCK=\\\\.\\pipe\\openssh-ssh-agent");

View File

@ -50,16 +50,15 @@ int sshd_session_main(int argc, wchar_t **wargv) {
int i, r;
_set_invalid_parameter_handler(invalid_parameter_handler);
if (argc) {
if ((argv = malloc(argc * sizeof(char*))) == NULL) {
printf("out of memory");
exit(255);
}
for (i = 0; i < argc; i++)
argv[i] = utf16_to_utf8(wargv[i]);
if ((argv = malloc((argc + 1) * sizeof(char*))) == NULL) {
printf("out of memory");
exit(255);
}
for (i = 0; i < argc; i++)
argv[i] = utf16_to_utf8(wargv[i]);
argv[argc] = NULL;
w32posix_initialize();
r = main(argc, argv);

View File

@ -202,16 +202,15 @@ int sshd_main(int argc, wchar_t **wargv) {
int i, r;
_set_invalid_parameter_handler(invalid_parameter_handler);
if (argc) {
if ((argv = malloc(argc * sizeof(char*))) == NULL) {
printf("out of memory");
exit(255);
}
for (i = 0; i < argc; i++)
argv[i] = utf16_to_utf8(wargv[i]);
if ((argv = malloc((argc + 1) * sizeof(char*))) == NULL) {
printf("out of memory");
exit(255);
}
for (i = 0; i < argc; i++)
argv[i] = utf16_to_utf8(wargv[i]);
argv[argc] = NULL;
w32posix_initialize();
r = main(argc, argv);