summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@neko.keithp.com>2006-12-02 13:04:05 -0800
committerKeith Packard <keithp@neko.keithp.com>2006-12-02 13:04:05 -0800
commit2b77216ee21de95ec352672aa025195a83925b32 (patch)
tree2670359e4027e9a13b5c5deed6eb80b253536fe9
parent64d7e303df441f274ee194a401dcd14dfb58af7e (diff)
downloadfontconfig-2b77216ee21de95ec352672aa025195a83925b32.tar.gz
Avoid writing uninitialized structure pad bytes to cache files.
The union inside the FcValue structure contains pad bytes. Instead of copying the whole structure to the cache block, copy only the initialized fields to avoid writing whichever bytes serve as padding within the structure.
-rw-r--r--src/fcpat.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/fcpat.c b/src/fcpat.c
index bf34c2e..052874f 100644
--- a/src/fcpat.c
+++ b/src/fcpat.c
@@ -1174,8 +1174,14 @@ FcValueListSerialize (FcSerialize *serialize, const FcValueList *vl)
head_serialized = vl_serialized;
vl_serialized->next = NULL;
- vl_serialized->value = vl->value;
+ vl_serialized->value.type = vl->value.type;
switch (vl->value.type) {
+ case FcTypeInteger:
+ vl_serialized->value.u.i = vl->value.u.i;
+ break;
+ case FcTypeDouble:
+ vl_serialized->value.u.d = vl->value.u.d;
+ break;
case FcTypeString:
s_serialized = FcStrSerialize (serialize, vl->value.u.s);
if (!s_serialized)
@@ -1184,6 +1190,12 @@ FcValueListSerialize (FcSerialize *serialize, const FcValueList *vl)
s_serialized,
FcChar8);
break;
+ case FcTypeBool:
+ vl_serialized->value.u.b = vl->value.u.b;
+ break;
+ case FcTypeMatrix:
+ /* can't happen */
+ break;
case FcTypeCharSet:
c_serialized = FcCharSetSerialize (serialize, vl->value.u.c);
if (!c_serialized)
@@ -1192,6 +1204,9 @@ FcValueListSerialize (FcSerialize *serialize, const FcValueList *vl)
c_serialized,
FcCharSet);
break;
+ case FcTypeFTFace:
+ /* can't happen */
+ break;
case FcTypeLangSet:
l_serialized = FcLangSetSerialize (serialize, vl->value.u.l);
if (!l_serialized)