tidying: formatted listmaker
authorJeremy Harris <jgh146exb@wizmail.org>
Sat, 7 Sep 2024 14:36:23 +0000 (15:36 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Sat, 7 Sep 2024 15:34:14 +0000 (16:34 +0100)
src/src/daemon.c
src/src/expand.c
src/src/functions.h
src/src/miscmods/arc.c
src/src/string.c
src/src/tlscert-gnu.c
src/src/tlscert-openssl.c

index fc8c7fdd220fea6e906c60a7f7ec230408714ccc..20e6bc05d40e13fe766526a007fbd5bf8b6b510c 100644 (file)
@@ -1976,16 +1976,17 @@ if (f.daemon_listen && !f.inetd_wait_mode)
       tls_in.on_connect_ports = NULL;
       sep = 0;
       while ((s = string_nextinlist(&list, &sep, big_buffer, big_buffer_size)))
-       {
-        if (!isdigit(*s))
+        if (isdigit(*s))
+         g = string_append_listele(g, ':', s);
+       else
          {
          struct servent * smtp_service = getservbyname(CS s, "tcp");
          if (!smtp_service)
            log_write(0, LOG_PANIC_DIE|LOG_CONFIG, "TCP port \"%s\" not found", s);
-         s = string_sprintf("%d", (int)ntohs(smtp_service->s_port));
+         g = string_append_listele_fmt(g, ':', FALSE, "%d",
+                                             (int)ntohs(smtp_service->s_port));
          }
-       g = string_append_listele(g, ':', s);
-       }
+
       if (g)
        tls_in.on_connect_ports = g->s;
       break;
index 521a30d4958e8cac56f6b04e95292e3617b78da5..cdfe93cdc6b3fce2d2d493450a697244e82bfa7e 100644 (file)
@@ -5535,8 +5535,7 @@ while (*s)
 
          /* First option has no tag and is timeout */
          if ((item = string_nextinlist(&list, &sep, NULL, 0)))
-           g = string_append_listele(g, ',',
-                 string_sprintf("timeout=%s", item));
+           g = string_append_listele_fmt(g, ',', TRUE, "timeout=%s", item);
 
          /* The rest of the options from the expansion */
          while ((item = string_nextinlist(&list, &sep, NULL, 0)))
@@ -5547,9 +5546,8 @@ while (*s)
          options is the readsock expansion. */
 
          if (sub_arg[3] && *sub_arg[3])
-           g = string_append_listele(g, ',',
-                 string_sprintf("eol=%s",
-                   string_printing2(sub_arg[3], SP_TAB|SP_SPACE)));
+           g = string_append_listele_fmt(g, ',', TRUE, 
+                 "eol=%s", string_printing2(sub_arg[3], SP_TAB|SP_SPACE));
          }
 
        /* Gat a (possibly cached) handle for the connection */
index ac0c310970a941c83a7134ccc42029b6486b7213..493b2287e4ea8813527224aff7f3b95bd7a821bf 100644 (file)
@@ -555,7 +555,7 @@ extern void    store_writeprotect(int);
 extern gstring *string_append(gstring *, int, ...) WARN_UNUSED_RESULT;
 extern gstring *string_append_listele(gstring *, uschar, const uschar *) WARN_UNUSED_RESULT;
 extern gstring *string_append_listele_n(gstring *, uschar, const uschar *, unsigned) WARN_UNUSED_RESULT;
-extern gstring *string_append_listele_fmt(gstring *, uschar, const char *, ...) WARN_UNUSED_RESULT;
+extern gstring *string_append_listele_fmt(gstring *, uschar, BOOL, const char *, ...) WARN_UNUSED_RESULT;
 extern gstring *string_append2_listele_n(gstring *, const uschar *, const uschar *, unsigned) WARN_UNUSED_RESULT;
 extern uschar *string_base62_32(unsigned long int);
 extern uschar *string_base62_64(unsigned long int);
index a48d1987b1e428f971b9886699412dd7285e0500..b35c17277e7c9328a7fd6cf032d5fabe0dfaa310 100644 (file)
@@ -2105,7 +2105,8 @@ if (arc_state)
     arc_line * line = as->hdr_as;
     if (line)
       {
-      g = string_append_listele_fmt(g, ',', " (\"i\":%u"                 /*)*/
+      g = string_append_listele_fmt(g, ',', FALSE,
+                                           " (\"i\":%u"                 /*)*/
                                            ", \"d\":\"%#b\""
                                            ", \"s\":\"%#b\"",
                  as->instance, &line->d, &line->s);
index 33c0332aa904befea59dcf365891ec5868a1bb62..1169f0e2c8e2aa6c29e57a578ce71b7f791638b5 100644 (file)
@@ -1093,22 +1093,45 @@ return list;
 
 
 /* Listmaker that takes a format string and args for the element.
-Currently no checking of the element content for sep chars */
+A flag arg is required to handle embedded sep chars in the (expanded) element;
+if false then no check is done */
 
 gstring *
-string_append_listele_fmt(gstring * list, uschar sep, const char * fmt, ...)
+string_append_listele_fmt(gstring * list, uschar sep, BOOL check,
+  const char * fmt, ...)
 {
+va_list ap;
+unsigned start;
+gstring * g;
+
 if (list && list->ptr)
+  {
   list = string_catn(list, &sep, 1);
+  start = list->ptr;
+  }
+else
+  start = 0;
 
-va_list ap;
 va_start(ap, fmt);
 list = string_vformat_trc(list, US __FUNCTION__, __LINE__,
          STRING_SPRINTF_BUFFER_SIZE, SVFMT_REBUFFER|SVFMT_EXTEND, fmt, ap);
 va_end(ap);
 
 (void) string_from_gstring(list);
-return list;
+
+/* if the appended element turns out to have an embedded sep char, rewind
+and do the lazy-coded separate string method */
+
+if (!check || !Ustrchr(&list->s[start], sep))
+  return list;
+
+va_start(ap, fmt);
+g = string_vformat_trc(NULL, US __FUNCTION__, __LINE__,
+       STRING_SPRINTF_BUFFER_SIZE, SVFMT_REBUFFER|SVFMT_EXTEND, fmt, ap);
+va_end(ap);
+
+list->ptr = start;
+return string_append_listele_n(list, sep, g->s, g->ptr);
 }
 
 
index a3f6d44349fc2621c1bba8fee36fa19e822e0d65..b130ef06f9d2dc6d6bd35f73a01c2c240e719df8 100644 (file)
@@ -334,8 +334,9 @@ for (int index = 0;; index++)
     case GNUTLS_SAN_RFC822NAME: tag = US"MAIL"; break;
     default: continue;        /* ignore unrecognised types */
     }
-  list = string_append_listele(list, sep,
-          match == -1 ? string_sprintf("%s=%s", tag, ele) : ele);
+  list = match == -1
+    ? string_append_listele_fmt(list, sep, TRUE, "%s=%s", tag, ele)
+    : string_append_listele(list, sep, ele);
   }
 /*NOTREACHED*/
 }
index 343f3d3fc5944ba7374d4a8fd73d4d4489d9079d..d4b9de359191bdb28d9d8176535362803a67e5fa 100644 (file)
@@ -411,8 +411,9 @@ while (sk_GENERAL_NAME_num(san) > 0)
     ele = string_copyn(ele, len);
 
   if (Ustrlen(ele) == len)     /* ignore any with embedded nul */
-    list = string_append_listele(list, osep,
-         match == -1 ? string_sprintf("%s=%s", tag, ele) : ele);
+    list = match == -1
+      ? string_append_listele_fmt(list, osep, TRUE, "%s=%s", tag, ele)
+      : string_append_listele(list, osep, ele);
   }
 
 sk_GENERAL_NAME_free(san);