[Commits] [SCM] claws branch, master, updated. 3.11.1-24-g07b572b
Colin
colin at claws-mail.org
Mon Nov 17 14:47:29 CET 2014
The branch, master has been updated
via 07b572bc66dd5016e99e3e729055e8b8cdfa72cf (commit)
from d4005f12d64767d6df98b6c6752f61d723cc6777 (commit)
Summary of changes:
src/common/smtp.c | 6 ++----
src/common/utils.c | 11 +++++++++++
src/common/utils.h | 2 ++
src/gtk/gtkutils.c | 8 ++++----
src/ldif.c | 13 +++++--------
src/prefs_account.c | 13 +++++--------
src/prefs_gtk.c | 13 ++++++-------
src/unmime.c | 3 +--
8 files changed, 36 insertions(+), 33 deletions(-)
- Log -----------------------------------------------------------------
commit 07b572bc66dd5016e99e3e729055e8b8cdfa72cf
Author: Colin Leroy <colin at colino.net>
Date: Mon Nov 17 14:47:15 2014 +0100
Add a wrapper function to decode base64, returning a null-terminated string.
diff --git a/src/common/smtp.c b/src/common/smtp.c
index e83a995..a680836 100644
--- a/src/common/smtp.c
+++ b/src/common/smtp.c
@@ -218,13 +218,11 @@ static gint smtp_auth_recv(SMTPSession *session, const gchar *msg)
if (!strncmp(msg, "334 ", 4)) {
gchar *response;
gchar *response64;
- gchar *challenge, *tmp;
+ gchar *challenge;
gsize challengelen;
guchar hexdigest[33];
- tmp = g_base64_decode(msg + 4, &challengelen);
- challenge = g_strndup(tmp, challengelen);
- g_free(tmp);
+ challenge = g_base64_decode_zero(msg + 4, &challengelen);
log_print(LOG_PROTOCOL, "ESMTP< [Decoded: %s]\n", challenge);
g_snprintf(buf, sizeof(buf), "%s", session->pass);
diff --git a/src/common/utils.c b/src/common/utils.c
index 2e41793..9c3d940 100644
--- a/src/common/utils.c
+++ b/src/common/utils.c
@@ -5550,6 +5550,17 @@ int cm_canonicalize_filename(const gchar *filename, gchar **canonical_name) {
return 0;
}
+/* Returns a decoded base64 string, guaranteed to be null-terminated. */
+guchar *g_base64_decode_zero(const gchar *text, gsize *out_len)
+{
+ gchar *tmp = g_base64_decode(text, out_len);
+ gchar *out = g_strndup(tmp, *out_len);
+
+ g_free(tmp);
+
+ return out;
+}
+
#if !GLIB_CHECK_VERSION(2, 30, 0)
/**
* g_utf8_substring:
diff --git a/src/common/utils.h b/src/common/utils.h
index 2df4034..ff01d83 100644
--- a/src/common/utils.h
+++ b/src/common/utils.h
@@ -585,6 +585,8 @@ void cm_mutex_free(GMutex *mutex);
int cm_canonicalize_filename(const gchar *filename, gchar **canonical_name);
+guchar *g_base64_decode_zero(const gchar *text, gsize *out_len);
+
#if !GLIB_CHECK_VERSION(2, 30, 0)
gchar *g_utf8_substring (const gchar *p,
glong start_pos,
diff --git a/src/gtk/gtkutils.c b/src/gtk/gtkutils.c
index b98c93c..8cdbd72 100644
--- a/src/gtk/gtkutils.c
+++ b/src/gtk/gtkutils.c
@@ -1111,7 +1111,7 @@ GtkWidget *xface_get_from_header(const gchar *o_xface)
GtkWidget *face_get_from_header(const gchar *o_face)
{
gchar face[2048];
- gchar face_png[2048];
+ gchar *face_png;
gchar *tmp;
gsize pngsize;
GdkPixbuf *pixbuf;
@@ -1127,17 +1127,17 @@ GtkWidget *face_get_from_header(const gchar *o_face)
unfold_line(face); /* strip all whitespace and linebreaks */
remove_space(face);
- tmp = g_base64_decode(face, &pngsize);
- memcpy(face_png, tmp, pngsize);
- face_png[pngsize] = '\0';
+ face_png = g_base64_decode(face, &pngsize);
debug_print("---------------------- loaded face png\n");
if (!gdk_pixbuf_loader_write (loader, face_png, pngsize, &error) ||
!gdk_pixbuf_loader_close (loader, &error)) {
g_warning("loading face failed\n");
g_object_unref(loader);
+ g_free(face_png);
return NULL;
}
+ g_free(face_png);
pixbuf = g_object_ref(gdk_pixbuf_loader_get_pixbuf(loader));
diff --git a/src/ldif.c b/src/ldif.c
index 46b95be..3bc227b 100644
--- a/src/ldif.c
+++ b/src/ldif.c
@@ -642,8 +642,9 @@ static void ldif_read_file( LdifFile *ldifFile, AddressCache *cache ) {
/* Save record */
fullValue = mgu_list_coalesce( listValue );
if (fullValue && last64) {
+ gchar *tmp = g_base64_decode_zero(fullValue, &len);
g_free(fullValue);
- fullValue = g_base64_decode(fullValue, &len);
+ fullValue = tmp;
}
ldif_add_value( rec, lastTag, fullValue, hashField );
@@ -681,13 +682,9 @@ static void ldif_read_file( LdifFile *ldifFile, AddressCache *cache ) {
fullValue =
mgu_list_coalesce( listValue );
if (fullValue && last64) {
- out = g_base64_decode(fullValue, &len);
- if (len >= 0) {
- g_free(fullValue);
- fullValue = out;
- fullValue[len] = '\0';
- } else
- g_free(out);
+ gchar *tmp = g_base64_decode_zero(fullValue, &len);
+ g_free(fullValue);
+ fullValue = tmp;
}
/* Base-64 encoded data */
/*
diff --git a/src/prefs_account.c b/src/prefs_account.c
index 3db4b33..181be45 100644
--- a/src/prefs_account.c
+++ b/src/prefs_account.c
@@ -3523,7 +3523,6 @@ void prefs_account_read_config(PrefsAccount *ac_prefs, const gchar *label)
strv = g_strsplit(privacy_prefs, ",", 0);
for (cur = strv; *cur != NULL; cur++) {
gchar *encvalue, *tmp;
- gchar value[1024];
encvalue = strchr(*cur, '=');
if (encvalue == NULL)
@@ -3531,13 +3530,11 @@ void prefs_account_read_config(PrefsAccount *ac_prefs, const gchar *label)
encvalue[0] = '\0';
encvalue++;
- tmp = g_base64_decode(encvalue, &len);
- if (len > 0) {
- g_strlcat(value, tmp, 1024);
- value[len] = '\0';
- g_hash_table_insert(ac_prefs->privacy_prefs, g_strdup(*cur), g_strdup(value));
- }
- g_free(tmp);
+ tmp = g_base64_decode_zero(encvalue, &len);
+ if (len > 0)
+ g_hash_table_insert(ac_prefs->privacy_prefs, g_strdup(*cur), tmp);
+ else
+ g_free(tmp);
}
g_strfreev(strv);
g_free(privacy_prefs);
diff --git a/src/prefs_gtk.c b/src/prefs_gtk.c
index dc7e5cf..a4a14e2 100644
--- a/src/prefs_gtk.c
+++ b/src/prefs_gtk.c
@@ -219,16 +219,15 @@ static void prefs_config_parse_one_line(PrefParam *param, const gchar *buf)
case P_PASSWORD:
g_free(*((gchar **)param[i].data));
if (value[0] == '!') {
- gchar *tmp, buf[1024];
+ gchar *tmp;
gsize len;
- tmp = g_base64_decode(&value[1], &len);
- g_strlcat(buf, tmp, 1024);
- g_free(tmp);
- buf[len] = '\0';
- passcrypt_decrypt(buf, len);
+ tmp = g_base64_decode_zero(&value[1], &len);
+ passcrypt_decrypt(tmp, len);
+
*((gchar **)param[i].data) =
- *buf ? g_strdup(buf) : NULL;
+ *tmp ? g_strdup(tmp) : NULL;
+ g_free(tmp);
} else {
*((gchar **)param[i].data) =
*value ? g_strdup(value) : NULL;
diff --git a/src/unmime.c b/src/unmime.c
index aeda9e4..9848977 100644
--- a/src/unmime.c
+++ b/src/unmime.c
@@ -113,9 +113,8 @@ gchar *unmime_header(const gchar *encoded_str, gboolean addr_field)
if (encoding == 'B') {
gchar *tmp;
tmp = g_strndup(text_begin_p + 1, eword_end_p - (text_begin_p + 1) + 1);
- decoded_text = g_base64_decode(tmp, &out_len);
+ decoded_text = g_base64_decode_zero(tmp, &out_len);
g_free(tmp);
- decoded_text[out_len] = '\0';
} else if (encoding == 'Q') {
decoded_text = g_malloc
(eword_end_p - (text_begin_p + 1) + 1);
-----------------------------------------------------------------------
hooks/post-receive
--
Claws Mail
More information about the Commits
mailing list