]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: simplify algorithm list functions using xextendf(); ok
authordjm@openbsd.org <djm@openbsd.org>
Tue, 2 Sep 2025 11:08:34 +0000 (11:08 +0000)
committerDamien Miller <djm@mindrot.org>
Tue, 2 Sep 2025 11:09:10 +0000 (21:09 +1000)
dtucker@

OpenBSD-Commit-ID: ffc5f8d0c25b95705a8a66c8b634f98d23bd92dc

cipher.c
kex-names.c
mac.c
sshkey.c

index 8a18da2df8d1f8d4dcff5c69a751da2ffcb14cbb..5e096cebfefad2b3450fe79b95a5434f41504f00 100644 (file)
--- a/cipher.c
+++ b/cipher.c
@@ -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;
 }
index 96deb8817dbbb32b86dc8c06f611c64014438e57..a20ce602ab5188e5d88e27c8f296a20f51155e31 100644 (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;
 }
 
diff --git a/mac.c b/mac.c
index f3dda66928668cc2df3544cd1b9f8d5915cc88b9..ee2c17d0efa1a594da4d9afeae6da7c1828e025a 100644 (file)
--- a/mac.c
+++ b/mac.c
@@ -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;
 }
 
index 6b3e24ec44e111491a04e8e3c85c4d8966603d4d..3633c878ae68469912327992f1fa4f5e0b9703e3 100644 (file)
--- a/sshkey.c
+++ b/sshkey.c
@@ -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;
 }