Avoid doing unaligned reads when parsing icc files
Offsets are not guaranteed to be aligned, so don't assume that they are.
memcpy instead of just casting and dereferencing.
diff --git a/iccread.c b/iccread.c
index d68bb26..e1aa0fe 100644
--- a/iccread.c
+++ b/iccread.c
@@ -87,7 +87,9 @@
invalid_source(mem, "Invalid offset");
return 0;
} else {
- return be32_to_cpu(*(__be32*)(mem->buf + offset));
+ __be32 k;
+ memcpy(&k, mem->buf + offset, sizeof(__be32));
+ return be32_to_cpu(k);
}
}
@@ -97,7 +99,9 @@
invalid_source(mem, "Invalid offset");
return 0;
} else {
- return be16_to_cpu(*(__be16*)(mem->buf + offset));
+ __be16 k;
+ memcpy(&k, mem->buf + offset, sizeof(__be16));
+ return be16_to_cpu(k);
}
}