From 6522ae4fb3f567f3385a9d5ad7f67b015aeb22ac Mon Sep 17 00:00:00 2001 From: Sakala Venkata Krishna Rohit Date: Mon, 27 Aug 2018 16:16:09 +0530 Subject: [PATCH] Bugfix on bigendianess by casting size_t to unint32_t The reason for typecasting size_t to unint32_t is that size_t is 8 bytes and uint32_t is only 4 bytes. If not typecasted Memcpy fails to copy the *correct* four bytes in big endian platforms. --- upb/table.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/upb/table.c b/upb/table.c index 61202b0e99..99ae5c3050 100644 --- a/upb/table.c +++ b/upb/table.c @@ -272,7 +272,8 @@ static size_t begin(const upb_table *t) { static upb_tabkey strcopy(lookupkey_t k2, upb_alloc *a) { char *str = upb_malloc(a, k2.str.len + sizeof(uint32_t) + 1); if (str == NULL) return 0; - memcpy(str, &k2.str.len, sizeof(uint32_t)); + uint32_t len = (uint32_t) k2.str.len; + memcpy(str, &len, sizeof(uint32_t)); memcpy(str + sizeof(uint32_t), k2.str.str, k2.str.len + 1); return (uintptr_t)str; }