From 6541461762be41c69ed4b400f088098aff090c7c Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Thu, 16 Jul 2009 03:26:59 +0200 Subject: [PATCH] obexd: Fix handling of strict-aliasing rules --- obexd/client/pbap.c | 7 +++++-- obexd/src/pbap.c | 26 +++++++++++++++++--------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/obexd/client/pbap.c b/obexd/client/pbap.c index dc3c9e9c5..d637618b7 100644 --- a/obexd/client/pbap.c +++ b/obexd/client/pbap.c @@ -306,8 +306,11 @@ static void read_return_apparam(struct session_data *session, switch (hdr->tag) { case PHONEBOOKSIZE_TAG: - if (hdr->len == PHONEBOOKSIZE_LEN) - *phone_book_size = get_be16(hdr->val); + if (hdr->len == PHONEBOOKSIZE_LEN) { + guint16 val; + memcpy(&val, hdr->val, sizeof(val)); + *phone_book_size = val; + } break; case NEWMISSEDCALLS_TAG: if (hdr->len == NEWMISSEDCALLS_LEN) diff --git a/obexd/src/pbap.c b/obexd/src/pbap.c index c7871a460..5f1fb734a 100644 --- a/obexd/src/pbap.c +++ b/obexd/src/pbap.c @@ -136,22 +136,29 @@ static int pbap_parse_apparam_header(obex_t *obex, obex_object_t *obj, } break; case FILTER_TAG: - if (hdr->len == FILTER_LEN) - apparam->filter = get_be64(hdr->val); + if (hdr->len == FILTER_LEN) { + guint64 val; + memcpy(&val, hdr->val, sizeof(val)); + apparam->filter = get_be64(&val); + } break; case FORMAT_TAG: if (hdr->len == FORMAT_LEN) apparam->format = hdr->val[0]; break; case MAXLISTCOUNT_TAG: - if (hdr->len == MAXLISTCOUNT_LEN) - apparam->maxlistcount = - get_be16(hdr->val); + if (hdr->len == MAXLISTCOUNT_LEN) { + guint16 val; + memcpy(&val, hdr->val, sizeof(val)); + apparam->maxlistcount = get_be16(&val); + } break; case LISTSTARTOFFSET_TAG: - if (hdr->len == LISTSTARTOFFSET_LEN) - apparam->liststartoffset = - get_be16(hdr->val); + if (hdr->len == LISTSTARTOFFSET_LEN) { + guint16 val; + memcpy(&val, hdr->val, sizeof(val)); + apparam->liststartoffset = get_be16(&val); + } break; default: g_free(apparam->searchval); @@ -204,10 +211,11 @@ static int pbap_add_result_apparam_header(obex_t *obex, obex_object_t *obj, if (maxlistcount == 0) { struct apparam_hdr *hdr = ptr; + guint16 val = GUINT16_TO_BE(phonebooksize); hdr->tag = PHONEBOOKSIZE_TAG; hdr->len = PHONEBOOKSIZE_LEN; - put_be16(phonebooksize, hdr->val); + memcpy(hdr->val, &val, sizeof(val)); ptr += APPARAM_HDR_SIZE + PHONEBOOKSIZE_LEN; } -- 2.47.3