diff options
author | 2003-09-25 07:15:40 +0000 | |
---|---|---|
committer | 2003-09-25 07:15:40 +0000 | |
commit | 4a2d5e93a5feb47fe9a8f40a2f7b87f8f62d7758 (patch) | |
tree | 7f98167761dd58e2528f733df859fbb41242fd28 | |
parent | sync (diff) | |
download | wireguard-openbsd-4a2d5e93a5feb47fe9a8f40a2f7b87f8f62d7758.tar.xz wireguard-openbsd-4a2d5e93a5feb47fe9a8f40a2f7b87f8f62d7758.zip |
correct realloc (no ptr = realloc(ptr, ...)); comment & ok deraadt
-rw-r--r-- | libexec/telnetd/sys_term.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/libexec/telnetd/sys_term.c b/libexec/telnetd/sys_term.c index 2f548b2a45e..14acb909f62 100644 --- a/libexec/telnetd/sys_term.c +++ b/libexec/telnetd/sys_term.c @@ -1376,10 +1376,18 @@ start_login(const char *host, int autologin, char *name) static void addarg(struct arg_val *argv, const char *val) { - if(argv->size <= argv->argc+1) { - argv->argv = realloc(argv->argv, sizeof(char*) * (argv->size + 10)); - if (argv->argv == NULL) + const char **tmp; + + if (argv->size <= argv->argc+1) { + tmp = realloc(argv->argv, sizeof(char*) * (argv->size + 10)); + if (tmp == NULL) { + if (argv->argv) + free(argv->argv); + argv->argv = NULL; + argv->size = 0; fatal (net, "realloc: out of memory"); + } + argv->argv = tmp; argv->size+=10; } argv->argv[argv->argc++] = val; |