From 2b77216ee21de95ec352672aa025195a83925b32 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 2 Dec 2006 13:04:05 -0800 Subject: [PATCH] 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. --- src/fcpat.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) 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) -- 2.39.2