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__)