diff options
author | Vladimir Vukicevic <vladimir@pobox.com> | 2009-11-06 19:06:14 -0500 |
---|---|---|
committer | Jeff Muizelaar <jmuizelaar@mozilla.com> | 2010-02-18 15:33:59 -0500 |
commit | d280a4b155590d07a9459d25c3acde144b96a6bc (patch) | |
tree | e4a67492f181f8ed95e229f2b23f8163db064910 | |
parent | f8e37ec9fb21386e757003d55e040c34f6c5d4ea (diff) |
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.
-rw-r--r-- | iccread.c | 8 |
1 files changed, 6 insertions, 2 deletions
@@ -87,7 +87,9 @@ static uint32_t read_u32(struct mem_source *mem, size_t offset) 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 @@ static uint16_t read_u16(struct mem_source *mem, size_t offset) 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); } } |