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.
This commit is contained in:
parent
64d7e303df
commit
2b77216ee2
17
src/fcpat.c
17
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)
|
||||
|
|
Loading…
Reference in New Issue