Commit 986e3597 authored by Patrick Lam's avatar Patrick Lam
Browse files

Fix for unaligned memory accesses.

reviewed by: plam
parent 58bdd296
2006-01-19 Andreas Schwab <schwab@suse.de>
reviewed by: plam
* src/fcpat.c (FcStrNeededBytes):
Fix for unaligned memory accesses.
2006-01-18 Mike Fabian <mfabian@suse.de>
reviewed by: plam
......@@ -6,7 +13,7 @@
Properly order the FcConfigAddFontDir and FcConfigNormalizeFontDir
calls to avoid crashes.
2006-01-14 Patirck Lam <plam@mit.edu>
2006-01-14 Patrick Lam <plam@mit.edu>
* src/fccache.c (FcDirCacheConsume):
Fix segfault when consuming zero-length caches in fc-cat
......
......@@ -1888,6 +1888,7 @@ FcStrNeededBytes (const FcChar8 * s)
struct objectBucket **p;
struct objectBucket *b;
int size;
FcChar8 *const null = 0;
for (p = &FcStrBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
if (b->hash == hash && !strcmp ((char *)s, (char *) (b + 1)))
......@@ -1905,7 +1906,8 @@ FcStrNeededBytes (const FcChar8 * s)
* incorrect to replace the with a memset, because the C
* specification doesn't guarantee that the null pointer is
* the same as the zero bit pattern. */
*(char **)((char *) (b + 1) + strlen((char *)s) + 1) = 0;
/* Misaligned pointers are not guaranteed to work, either! */
memcpy (((char *) (b + 1) + strlen((char *)s) + 1), &null, sizeof (null));
*p = b;
fcstr_count += strlen((char *)s) + 1;
......@@ -1968,13 +1970,15 @@ FcStrSerialize (int bank, const FcChar8 * s)
for (p = &FcStrBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
if (b->hash == hash && !strcmp ((char *)s, (char *) (b + 1)))
{
FcChar8 * t = *(FcChar8 **)(((FcChar8 *)(b + 1)) + strlen ((char *)s) + 1);
FcChar8 * t;
memcpy (&t, ((FcChar8 *)(b + 1)) + strlen ((char *)s) + 1, sizeof (FcChar8 *));
if (!t)
{
strcpy((char *)(static_strs[bi] + fcstr_ptr), (char *)s);
*(FcChar8 **)((FcChar8 *) (b + 1) + strlen((char *)s) + 1) = (static_strs[bi] + fcstr_ptr);
t = static_strs[bi] + fcstr_ptr;
memcpy ((FcChar8 *) (b + 1) + strlen((char *)s) + 1, &t, sizeof (FcChar8 *));
fcstr_ptr += strlen((char *)s) + 1;
t = *(FcChar8 **)(((FcChar8 *)(b + 1)) + strlen ((char *)s) + 1);
memcpy (&t, ((FcChar8 *)(b + 1)) + strlen ((char *)s) + 1, sizeof (FcChar8 *));
}
return t;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment