[exim-cvs] string handling: strlen for gstring

Αρχική Σελίδα
Delete this message
Reply to this message
Συντάκτης: Exim Git Commits Mailing List
Ημερομηνία:  
Προς: exim-cvs
Αντικείμενο: [exim-cvs] string handling: strlen for gstring
Gitweb: https://git.exim.org/exim.git/commitdiff/ba5120a469a78ca316916e7be98c5fcb0ddd0d33
Commit:     ba5120a469a78ca316916e7be98c5fcb0ddd0d33
Parent:     9c43aff91481faddf4ca3763657d3ae2a63acb65
Author:     Jeremy Harris <jgh146exb@???>
AuthorDate: Sun Jan 12 14:52:00 2020 +0000
Committer:  Jeremy Harris <jgh146exb@???>
CommitDate: Sun Jan 12 14:52:00 2020 +0000


    string handling: strlen for gstring
---
 src/src/acl.c       |  4 ++--
 src/src/arc.c       |  2 +-
 src/src/expand.c    | 27 +++++++++------------------
 src/src/functions.h |  6 ++++++
 4 files changed, 18 insertions(+), 21 deletions(-)


diff --git a/src/src/acl.c b/src/src/acl.c
index 3166069..13cda1a 100644
--- a/src/src/acl.c
+++ b/src/src/acl.c
@@ -1022,8 +1022,8 @@ for (p = q; *p; p = q)
   if (!*hptr)
     {
     /* The header_line struct itself is not tainted, though it points to
-    tainted data. */
-    header_line *h = store_get(sizeof(header_line), FALSE);
+    possibly tainted data. */
+    header_line * h = store_get(sizeof(header_line), FALSE);
     h->text = hdr;
     h->next = NULL;
     h->type = newtype;
diff --git a/src/src/arc.c b/src/src/arc.c
index 9436549..b453e17 100644
--- a/src/src/arc.c
+++ b/src/src/arc.c
@@ -1192,7 +1192,7 @@ static gstring *
 arc_sign_append_aar(gstring * g, arc_ctx * ctx,
   const uschar * identity, int instance, blob * ar)
 {
-int aar_off = g ? g->ptr : 0;
+int aar_off = gstring_length(g);
 arc_set * as =
   store_get(sizeof(arc_set) + sizeof(arc_line) + sizeof(header_line), FALSE);
 arc_line * al = (arc_line *)(as+1);
diff --git a/src/src/expand.c b/src/src/expand.c
index 55aaf53..7986bbd 100644
--- a/src/src/expand.c
+++ b/src/src/expand.c
@@ -1630,8 +1630,8 @@ for (header_line * h = header_list; h; h = h->next)


       /* Trim the header roughly if we're approaching limits */
       inc = t - s;
-      if ((g ? g->ptr : 0) + inc > header_insert_maxlen)
-    inc = header_insert_maxlen - (g ? g->ptr : 0);
+      if (gstring_length(g) + inc > header_insert_maxlen)
+    inc = header_insert_maxlen - gstring_length(g);


       /* For raw just copy the data; for a list, add the data as a colon-sep
       list-element; for comma-list add as an unchecked comma,newline sep
@@ -1643,17 +1643,12 @@ for (header_line * h = header_list; h; h = h->next)
       if (flags & FH_WANT_LIST)
         g = string_append_listele_n(g, ':', s, (unsigned)inc);
       else if (flags & FH_WANT_RAW)
-    {
     g = string_catn(g, s, (unsigned)inc);
-    (void) string_from_gstring(g);
-    }
       else if (inc > 0)
-    if (comma)
-      g = string_append2_listele_n(g, US",\n", s, (unsigned)inc);
-    else
-      g = string_append2_listele_n(g, US"\n", s, (unsigned)inc);
+    g = string_append2_listele_n(g, comma ? US",\n" : US"\n",
+      s, (unsigned)inc);


-      if (g && g->ptr >= header_insert_maxlen) break;
+      if (gstring_length(g) >= header_insert_maxlen) break;
       }


 if (!found) return NULL;    /* No header found */
@@ -1663,7 +1658,7 @@ if (!g) return US"";


*newsize = g->size;
if (flags & FH_WANT_RAW)
- return g->s;
+ return string_from_gstring(g);

/* Otherwise do RFC 2047 decoding, translating the charset if requested.
The rfc2047_decode2() function can return an error with decoded data if the
@@ -1671,16 +1666,12 @@ charset translation fails. If decoding fails, it returns NULL. */

 else
   {
-  uschar *decoded, *error;
-
-  decoded = rfc2047_decode2(g->s, check_rfc2047_length, charset, '?', NULL,
-    newsize, &error);
+  uschar * error, * decoded = rfc2047_decode2(string_from_gstring(g),
+    check_rfc2047_length, charset, '?', NULL, newsize, &error);
   if (error)
-    {
     DEBUG(D_any) debug_printf("*** error in RFC 2047 decoding: %s\n"
       "    input was: %s\n", error, g->s);
-    }
-  return decoded ? decoded : g->s;
+  return decoded ? decoded : string_from_gstring(g);
   }
 }


diff --git a/src/src/functions.h b/src/src/functions.h
index fe15cc5..7677a3c 100644
--- a/src/src/functions.h
+++ b/src/src/functions.h
@@ -820,6 +820,12 @@ g->s[g->ptr] = '\0';
return g->s;
}

+static inline unsigned
+gstring_length(const gstring * g)
+{
+return g ? (unsigned)g->ptr : 0;
+}
+

 #define gstring_release_unused(g) \
     gstring_release_unused_trc(g, __FUNCTION__, __LINE__)