Patch by Andreas Schwab <schwab@xxxxxxx>. See also: http://bugzilla.novell.com/show_bug.cgi?id=142215
--- src/fcpat.c +++ src/fcpat.c @@ -1888,6 +1888,7 @@ 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 @@ * 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 @@ 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; }
-- Mike FABIAN <mfabian@xxxxxxx> http://www.suse.de/~mfabian 睡眠不足はいい仕事の敵だ。
_______________________________________________ Fontconfig mailing list Fontconfig@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/fontconfig