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

Reply via email to