On Tuesday 04 June 2013 19:16:21 Paul J Stevens wrote:
> On 06/04/2013 07:07 PM, Paul J Stevens wrote:
> > I suspect there is a problem with g_strdup_vprintf or my usage of it.
>
> looks like the latter.
>
> va_start and va_copy *both* need their own va_end it seems.
>
> I misread the man-page.
Alas doesn't appear to be the issue here, g_strdup_vprintf still segfaults
with va_end. Will continue checking.
diff --git a/src/clientbase.c b/src/clientbase.c
index 95bf17c..abee351 100644
--- a/src/clientbase.c
+++ b/src/clientbase.c
@@ -279,6 +279,7 @@ int ci_write(ClientBase_T *client, char * msg, ...)
va_copy(cp, ap);
p_string_append_vprintf(client->write_buffer, msg, cp);
va_end(cp);
+ va_end(ap);
}
if (p_string_len(client->write_buffer) < 1) {
diff --git a/src/dbmail-imapsession.c b/src/dbmail-imapsession.c
index a600a40..a112a83 100644
--- a/src/dbmail-imapsession.c
+++ b/src/dbmail-imapsession.c
@@ -1245,6 +1245,7 @@ int dbmail_imap_session_buff_printf(ImapSession * self, char * message, ...)
va_copy(cp, ap);
p_string_append_vprintf(self->buff, message, cp);
va_end(cp);
+ va_end(ap);
l = p_string_len(self->buff);
diff --git a/src/dm_db.c b/src/dm_db.c
index 85172f9..2b16fef 100644
--- a/src/dm_db.c
+++ b/src/dm_db.c
@@ -316,6 +316,7 @@ gboolean db_exec(Connection_T c, const char *q, ...)
va_copy(cp, ap);
query = g_strdup_vprintf(q, cp);
va_end(cp);
+ va_end(ap);
TRACE(TRACE_DATABASE,"[%p] [%s]", c, query);
TRY
@@ -346,6 +347,7 @@ ResultSet_T db_query(Connection_T c, const char *q, ...)
va_copy(cp, ap);
query = g_strdup_vprintf(q, cp);
va_end(cp);
+ va_end(ap);
g_strstrip(query);
@@ -376,6 +378,7 @@ gboolean db_update(const char *q, ...)
va_copy(cp, ap);
vsnprintf(query, DEF_QUERYSIZE, q, cp);
va_end(cp);
+ va_end(ap);
c = db_con_get();
TRY
@@ -402,6 +405,7 @@ PreparedStatement_T db_stmt_prepare(Connection_T c, const char *q, ...)
va_copy(cp, ap);
query = g_strdup_vprintf(q, cp);
va_end(cp);
+ va_end(ap);
TRACE(TRACE_DATABASE,"[%p] [%s]", c, query);
s = Connection_prepareStatement(c, "%s", (const char *)query);
diff --git a/src/dm_debug.c b/src/dm_debug.c
index 40a0b1b..22bb212 100644
--- a/src/dm_debug.c
+++ b/src/dm_debug.c
@@ -102,6 +102,7 @@ void trace(Trace_T level, const char * module, const char * function, int line,
va_copy(cp, ap);
vsnprintf(message, MESSAGESIZE-1, formatstring, cp);
va_end(cp);
+ va_end(ap);
l = strlen(message);
diff --git a/src/dm_list.c b/src/dm_list.c
index 999aa83..de2bb83 100644
--- a/src/dm_list.c
+++ b/src/dm_list.c
@@ -300,6 +300,7 @@ GList * g_list_append_printf(GList * list, const char * format, ...)
va_copy(cp, ap);
list = g_list_append(list, g_strdup_vprintf(format, cp));
va_end(cp);
+ va_end(ap);
return list;
}
diff --git a/src/imap4.c b/src/imap4.c
index 76149d2..0e88e3f 100644
--- a/src/imap4.c
+++ b/src/imap4.c
@@ -277,6 +277,7 @@ static int imap_session_printf(ImapSession * self, char * message, ...)
va_copy(cp, ap);
p_string_append_vprintf(self->buff, message, cp);
va_end(cp);
+ va_end(ap);
if ((e = ci_write(self->ci, (char *)p_string_str(self->buff))) < 0) {
TRACE(TRACE_DEBUG, "ci_write failed [%s]", strerror(e));
diff --git a/src/lmtp.c b/src/lmtp.c
index bb6094f..60c9a74 100644
--- a/src/lmtp.c
+++ b/src/lmtp.c
@@ -186,6 +186,7 @@ int lmtp_error(ClientSession_T * session, const char *formatstring, ...)
va_copy(cp, ap);
s = g_strdup_vprintf(formatstring, cp);
va_end(cp);
+ va_end(ap);
ci_write(session->ci, s);
g_free(s);
diff --git a/src/pop3.c b/src/pop3.c
index 9730a9f..eed2072 100644
--- a/src/pop3.c
+++ b/src/pop3.c
@@ -303,6 +303,7 @@ int pop3_error(ClientSession_T * session, const char *formatstring, ...)
va_copy(cp, ap);
s = g_strdup_vprintf(formatstring, cp);
va_end(cp);
+ va_end(ap);
ci_write(ci, s);
g_free(s);
}
diff --git a/src/timsieve.c b/src/timsieve.c
index 4533296..09cc63d 100644
--- a/src/timsieve.c
+++ b/src/timsieve.c
@@ -176,6 +176,7 @@ int tims_error(ClientSession_T * session, const char *formatstring, ...)
va_copy(cp, ap);
s = g_strdup_vprintf(formatstring, cp);
va_end(cp);
+ va_end(ap);
ci_write(session->ci, s);
g_free(s);
_______________________________________________
Dbmail-dev mailing list
Dbmail-dev@dbmail.org
http://mailman.fastxs.nl/cgi-bin/mailman/listinfo/dbmail-dev