diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | libsylph/procmsg.c | 6 |
2 files changed, 11 insertions, 2 deletions
@@ -1,3 +1,10 @@ +2015-11-26 + + * libsylph/procmsg.c: + procmsg_read_cache_data_str_mem() + READ_CACHE_DATA_INT(): fix for sigbus on ARM caused by unaligned access + (#242). + 2015-10-27 * src/prefs_filter_edit.c: prefs_filter_edit_open(): diff --git a/libsylph/procmsg.c b/libsylph/procmsg.c index fe65395a..28d16f32 100644 --- a/libsylph/procmsg.c +++ b/libsylph/procmsg.c @@ -164,7 +164,7 @@ static gint procmsg_read_cache_data_str_mem(const gchar **p, const gchar *endp, if (endp - *p < sizeof(len)) return -1; - len = *(const guint32 *)(*p); + memcpy(&len, *p, sizeof(len)); *p += sizeof(len); if (len > G_MAXINT || len > endp - *p) return -1; @@ -197,7 +197,9 @@ static gint procmsg_read_cache_data_str_mem(const gchar **p, const gchar *endp, g_mapped_file_free(mapfile); \ return NULL; \ } else { \ - n = *(const guint32 *)p; \ + guint32 idata; \ + memcpy(&idata, p, sizeof(idata)); \ + n = idata; \ p += sizeof(guint32); \ } \ } |