From 8d517021bbe3520ab980724768cb76d71f9a88e3 Mon Sep 17 00:00:00 2001 From: djcb Date: Wed, 1 Aug 2012 23:21:59 +0300 Subject: [PATCH] * mu-msg-file: cleanup message path (realpath) --- lib/mu-msg-file.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/lib/mu-msg-file.c b/lib/mu-msg-file.c index 5ce23492..e48663cd 100644 --- a/lib/mu-msg-file.c +++ b/lib/mu-msg-file.c @@ -104,31 +104,37 @@ init_file_metadata (MuMsgFile *self, const char* path, const gchar* mdir, struct stat statbuf; if (access (path, R_OK) != 0) { - g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_FILE, - "cannot read file %s: %s", - path, strerror(errno)); + mu_util_g_set_error (err, MU_ERROR_FILE, + "cannot read file %s: %s", + path, strerror(errno)); return FALSE; } if (stat (path, &statbuf) < 0) { - g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_FILE, - "cannot stat %s: %s", - path, strerror(errno)); + mu_util_g_set_error (err, MU_ERROR_FILE, + "cannot stat %s: %s", + path, strerror(errno)); return FALSE; } if (!S_ISREG(statbuf.st_mode)) { - g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_FILE, - "not a regular file: %s", path); + mu_util_g_set_error (err, MU_ERROR_FILE, + "not a regular file: %s", path); return FALSE; } self->_timestamp = statbuf.st_mtime; self->_size = (size_t)statbuf.st_size; - strncpy (self->_path, path, PATH_MAX); - strncpy (self->_maildir, mdir ? mdir : "", PATH_MAX); + /* remove double slashes, relative paths etc. from path & mdir */ + if (!realpath (path, self->_path)) { + mu_util_g_set_error (err, MU_ERROR_FILE, + "could not get realpath for %s: %s", + path, strerror(errno)); + return FALSE; + } + strncpy (self->_maildir, mdir ? mdir : "", PATH_MAX); return TRUE; }