summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Vukicevic <vladimir@pobox.com>2009-11-06 19:06:14 -0500
committerJeff Muizelaar <jmuizelaar@mozilla.com>2010-02-18 15:33:59 -0500
commitd280a4b155590d07a9459d25c3acde144b96a6bc (patch)
treee4a67492f181f8ed95e229f2b23f8163db064910
parentf8e37ec9fb21386e757003d55e040c34f6c5d4ea (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.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/iccread.c b/iccread.c
index d68bb26..e1aa0fe 100644
--- a/iccread.c
+++ b/iccread.c
@@ -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);
}
}