upstream: simplify algorithm list functions using xextendf(); ok

dtucker@

OpenBSD-Commit-ID: ffc5f8d0c25b95705a8a66c8b634f98d23bd92dc
This commit is contained in:
djm@openbsd.org
2025-09-02 11:08:34 +00:00
committed by Damien Miller
parent 8866d24cdd
commit cc4eb3d694
4 changed files with 21 additions and 56 deletions

View File

@@ -1,4 +1,4 @@
/* $OpenBSD: cipher.c,v 1.124 2025/03/14 09:49:49 tb Exp $ */
/* $OpenBSD: cipher.c,v 1.125 2025/09/02 11:08:34 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -116,25 +116,16 @@ static const struct sshcipher ciphers[] = {
char *
cipher_alg_list(char sep, int auth_only)
{
char *tmp, *ret = NULL;
size_t nlen, rlen = 0;
char *ret = NULL;
const struct sshcipher *c;
char sep_str[2] = {sep, '\0'};
for (c = ciphers; c->name != NULL; c++) {
if ((c->flags & CFLAG_INTERNAL) != 0)
continue;
if (auth_only && c->auth_len == 0)
continue;
if (ret != NULL)
ret[rlen++] = sep;
nlen = strlen(c->name);
if ((tmp = realloc(ret, rlen + nlen + 2)) == NULL) {
free(ret);
return NULL;
}
ret = tmp;
memcpy(ret + rlen, c->name, nlen + 1);
rlen += nlen;
xextendf(&ret, sep_str, "%s", c->name);
}
return ret;
}

View File

@@ -1,4 +1,4 @@
/* $OpenBSD: kex-names.c,v 1.5 2025/08/11 10:55:38 djm Exp $ */
/* $OpenBSD: kex-names.c,v 1.6 2025/09/02 11:08:34 djm Exp $ */
/*
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
*
@@ -94,22 +94,13 @@ static const struct kexalg kexalgs[] = {
char *
kex_alg_list(char sep)
{
char *ret = NULL, *tmp;
size_t nlen, rlen = 0;
char *ret = NULL;
const struct kexalg *k;
char sep_str[2] = {sep, '\0'};
for (k = kexalgs; k->name != NULL; k++)
xextendf(&ret, sep_str, "%s", k->name);
for (k = kexalgs; k->name != NULL; k++) {
if (ret != NULL)
ret[rlen++] = sep;
nlen = strlen(k->name);
if ((tmp = realloc(ret, rlen + nlen + 2)) == NULL) {
free(ret);
return NULL;
}
ret = tmp;
memcpy(ret + rlen, k->name, nlen + 1);
rlen += nlen;
}
return ret;
}

21
mac.c
View File

@@ -1,4 +1,4 @@
/* $OpenBSD: mac.c,v 1.35 2019/09/06 04:53:27 djm Exp $ */
/* $OpenBSD: mac.c,v 1.36 2025/09/02 11:08:34 djm Exp $ */
/*
* Copyright (c) 2001 Markus Friedl. All rights reserved.
*
@@ -83,22 +83,13 @@ static const struct macalg macs[] = {
char *
mac_alg_list(char sep)
{
char *ret = NULL, *tmp;
size_t nlen, rlen = 0;
char *ret = NULL;
const struct macalg *m;
char sep_str[2] = {sep, '\0'};
for (m = macs; m->name != NULL; m++)
xextendf(&ret, sep_str, "%s", m->name);
for (m = macs; m->name != NULL; m++) {
if (ret != NULL)
ret[rlen++] = sep;
nlen = strlen(m->name);
if ((tmp = realloc(ret, rlen + nlen + 2)) == NULL) {
free(ret);
return NULL;
}
ret = tmp;
memcpy(ret + rlen, m->name, nlen + 1);
rlen += nlen;
}
return ret;
}

View File

@@ -1,4 +1,4 @@
/* $OpenBSD: sshkey.c,v 1.152 2025/08/29 03:50:38 djm Exp $ */
/* $OpenBSD: sshkey.c,v 1.153 2025/09/02 11:08:34 djm Exp $ */
/*
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
* Copyright (c) 2008 Alexander von Gernler. All rights reserved.
@@ -308,9 +308,10 @@ sshkey_match_keyname_to_sigalgs(const char *keyname, const char *sigalgs)
char *
sshkey_alg_list(int certs_only, int plain_only, int include_sigonly, char sep)
{
char *tmp, *ret = NULL;
size_t i, nlen, rlen = 0;
char *ret = NULL;
size_t i;
const struct sshkey_impl *impl;
char sep_str[2] = {sep, '\0'};
for (i = 0; keyimpls[i] != NULL; i++) {
impl = keyimpls[i];
@@ -320,16 +321,7 @@ sshkey_alg_list(int certs_only, int plain_only, int include_sigonly, char sep)
continue;
if ((certs_only && !impl->cert) || (plain_only && impl->cert))
continue;
if (ret != NULL)
ret[rlen++] = sep;
nlen = strlen(impl->name);
if ((tmp = realloc(ret, rlen + nlen + 2)) == NULL) {
free(ret);
return NULL;
}
ret = tmp;
memcpy(ret + rlen, impl->name, nlen + 1);
rlen += nlen;
xextendf(&ret, sep_str, "%s", impl->name);
}
return ret;
}