chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
libudev: avoid potential misaligned accesses
[elogind.git]
/
src
/
libudev
/
libudev-util.c
diff --git
a/src/libudev/libudev-util.c
b/src/libudev/libudev-util.c
index 62b7e56c05c7e463663f0302c4105055746fa3ba..44f6e4a863b1df1f4f2bef99b5fb762fbb327e8c 100644
(file)
--- a/
src/libudev/libudev-util.c
+++ b/
src/libudev/libudev-util.c
@@
-568,7
+568,7
@@
err:
* Murmurhash is under the MIT license.
*
*/
* Murmurhash is under the MIT license.
*
*/
-static unsigned int murmur_hash2(const char *key,
in
t len, unsigned int seed)
+static unsigned int murmur_hash2(const char *key,
size_
t len, unsigned int seed)
{
/*
* 'm' and 'r' are mixing constants generated offline.
{
/*
* 'm' and 'r' are mixing constants generated offline.
@@
-583,17
+583,18
@@
static unsigned int murmur_hash2(const char *key, int len, unsigned int seed)
/* mix 4 bytes at a time into the hash */
const unsigned char * data = (const unsigned char *)key;
/* mix 4 bytes at a time into the hash */
const unsigned char * data = (const unsigned char *)key;
- while(len >=
4
) {
- unsigned int k
= *(unsigned int *)data
;
+ while(len >=
sizeof(unsigned int)
) {
+ unsigned int k;
+ memcpy(&k, data, sizeof(k));
k *= m;
k ^= k >> r;
k *= m;
h *= m;
h ^= k;
k *= m;
k ^= k >> r;
k *= m;
h *= m;
h ^= k;
- data +=
4
;
- len -=
4
;
+ data +=
sizeof(k)
;
+ len -=
sizeof(k)
;
}
/* handle the last few bytes of the input array */
}
/* handle the last few bytes of the input array */