summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2011-03-28 16:33:12 -0400
committerBehdad Esfahbod <behdad@behdad.org>2011-03-28 16:33:12 -0400
commit1c475d5c8cb265ac939d6b9e097666e300162511 (patch)
tree46f2f2e382202ec932066cf31c0dc151cb009b49
parentf0ee5761e1ab63d848f980a767dd8475986f1342 (diff)
Bug 35587 - Add padding to make valgrind and glibc not hate each other
-rw-r--r--src/fccfg.c13
-rw-r--r--src/fcpat.c10
2 files changed, 18 insertions, 5 deletions
diff --git a/src/fccfg.c b/src/fccfg.c
index 4beb7d2..09c5991 100644
--- a/src/fccfg.c
+++ b/src/fccfg.c
@@ -1689,10 +1689,19 @@ static FcChar8 *
FcConfigFileExists (const FcChar8 *dir, const FcChar8 *file)
{
FcChar8 *path;
+ int size;
if (!dir)
dir = (FcChar8 *) "";
- path = malloc (strlen ((char *) dir) + 1 + strlen ((char *) file) + 1);
+
+ size = strlen ((char *) dir) + 1 + strlen ((char *) file) + 1;
+ /*
+ * workaround valgrind warning because glibc takes advantage of how it knows memory is
+ * allocated to implement strlen by reading in groups of 4
+ */
+ size = (size + 3) & ~3;
+
+ path = malloc (size);
if (!path)
return 0;
@@ -1711,7 +1720,7 @@ FcConfigFileExists (const FcChar8 *dir, const FcChar8 *file)
#endif
strcat ((char *) path, (char *) file);
- FcMemAlloc (FC_MEM_STRING, strlen ((char *) path) + 1);
+ FcMemAlloc (FC_MEM_STRING, size);
if (access ((char *) path, R_OK) == 0)
return path;
diff --git a/src/fcpat.c b/src/fcpat.c
index be01a4f..8f63659 100644
--- a/src/fcpat.c
+++ b/src/fcpat.c
@@ -1057,9 +1057,13 @@ FcStrStaticName (const FcChar8 *name)
if (b->hash == hash && !strcmp ((char *)name, (char *) (b + 1)))
return (FcChar8 *) (b + 1);
size = sizeof (struct objectBucket) + strlen ((char *)name) + 1;
- b = malloc (size + sizeof (int));
- /* workaround glibc bug which reads strlen in groups of 4 */
- FcMemAlloc (FC_MEM_STATICSTR, size + sizeof (int));
+ /*
+ * workaround valgrind warning because glibc takes advantage of how it knows memory is
+ * allocated to implement strlen by reading in groups of 4
+ */
+ size = (size + 3) & ~3;
+ b = malloc (size);
+ FcMemAlloc (FC_MEM_STATICSTR, size);
if (!b)
return NULL;
b->next = 0;