const char **key_r, const char **value_r)
{
struct db_dict *dict = (struct db_dict *)ctx->ctx.dict;
+ uint32_t value;
if (ret == DB_NOTFOUND)
return 0;
switch (dict->value_type) {
case DICT_DATA_TYPE_UINT32:
i_assert(ctx->pdata.size == sizeof(uint32_t));
- *value_r = p_strdup(ctx->pool,
- dec2str(*((uint32_t *)ctx->pdata.data)));
+
+ /* data may not be aligned, so use memcpy() */
+ memcpy(&value, ctx->pdata.data, sizeof(value));
+ *value_r = p_strdup(ctx->pool, dec2str(value));
break;
case DICT_DATA_TYPE_STRING:
*value_r = p_strndup(ctx->pool,
{
struct db_dict *dict = (struct db_dict *)_dict;
DBT pkey, pdata;
+ uint32_t value;
int ret;
memset(&pkey, 0, sizeof(DBT));
switch (dict->value_type) {
case DICT_DATA_TYPE_UINT32:
i_assert(pdata.size == sizeof(uint32_t));
- *value_r = p_strdup(pool, dec2str(*((uint32_t *)pdata.data)));
+
+ /* data may not be aligned, so use memcpy() */
+ memcpy(&value, pdata.data, sizeof(value));
+ *value_r = p_strdup(pool, dec2str(value));
break;
case DICT_DATA_TYPE_STRING:
*value_r = p_strndup(pool, pdata.data, pdata.size);