From d8853401f834b59a1a2a9cebb6939bc9c4b13e1b Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Wed, 16 Oct 2013 18:25:18 +0900 Subject: evas/cserve2: Fix SIGBUS on ARM devices Unaligned access to Evas_Image_Load_Opts fields is not possible on (many) ARM devices, as it will cause a SIGBUS. Solution: copy the data into a stack buffer. --- src/bin/evas/evas_cserve2_main.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/bin/evas/evas_cserve2_main.c b/src/bin/evas/evas_cserve2_main.c index 05def93c9c..1e8fd182dc 100644 --- a/src/bin/evas/evas_cserve2_main.c +++ b/src/bin/evas/evas_cserve2_main.c @@ -137,6 +137,7 @@ _cserve2_client_open(Client *client) Msg_Open *msg = (Msg_Open *)client->msg.buf; const char *path, *key, *end; Evas_Image_Load_Opts *opts = NULL; + Evas_Image_Load_Opts opts_copy; path = ((const char *)msg) + sizeof(*msg) + msg->path_offset; key = ((const char *)msg) + sizeof(*msg) + msg->key_offset; @@ -148,7 +149,10 @@ _cserve2_client_open(Client *client) if (!key[0]) key = NULL; if (msg->has_load_opts) - opts = (Evas_Image_Load_Opts *) end; + { + opts = &opts_copy; + memcpy(&opts_copy, end, sizeof(opts_copy)); + } cserve2_cache_file_open(client, msg->file_id, path, key, msg->base.rid, opts); -- cgit v1.2.1