unsigned char *p = byte;
size_t encoded_size;
- byte_len = *((size_t *)p);
-
if (byte_size < sz_byte_len)
return 0;
+ memcpy(&byte_len, p, sz_byte_len);
+ if (byte_size < byte_len)
+ return 0;
+
byte_size -= sz_byte_len;
p += sz_byte_len;
- type = *((int *)p);
if (byte_size < sz_type)
return 0;
+ memcpy(&type, p, sz_type);
+
byte_size -= sz_type;
p += sz_type;
- keysize = *((size_t *)p);
if (byte_size < sz_keysize)
return 0;
+ memcpy(&keysize, p, sz_keysize);
+
byte_size -= sz_keysize;
p += sz_keysize;
- key = (char *)p;
if (byte_size < keysize)
return 0;
+ key = (char *)p;
if (!key || (strnlen(key, keysize) + 1) != keysize)
return 0;
byte_size -= keysize;
p += keysize;
- size = *((size_t *)p);
if (byte_size < sz_size)
return 0;
- byte_size -= sz_size;
- p += sz_size;
- val = (void *)p;
+ memcpy(&size, p, sz_size);
encoded_size = sz_byte_len + sz_type + sz_keysize + keysize +
sz_size + size;
if (encoded_size != byte_len)
return 0;
- p += size;
+ p += sz_size;
+ val = (void *)p;
if (kv)
*kv = keyval_new(*kv, key, type, val, size);
int type;
p += sz_byte_len;
- type = *((int *)p);
+ memcpy(&type, p, sizeof(int));
return type;
}