summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2009-06-30 02:30:04 +0200
committerTor Andersson <tor@ghostscript.com>2009-06-30 02:30:04 +0200
commit204b8af3dae7f7cf0b692b8d38533113c0689414 (patch)
tree3f722fb42b4428d86ed1dc55c8ec2dbe943da746
parent0f66fa12ec2b514459e5f456b016ef719f041fc0 (diff)
downloadmupdf-204b8af3dae7f7cf0b692b8d38533113c0689414.tar.xz
Use memcmp to compare fz_obj strings which can contain embedded zeroes.
-rw-r--r--fitz/obj_dict.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/fitz/obj_dict.c b/fitz/obj_dict.c
index 6dfc3a64..0a654f8f 100644
--- a/fitz/obj_dict.c
+++ b/fitz/obj_dict.c
@@ -7,10 +7,11 @@ static int keyvalcmp(const void *ap, const void *bp)
{
const fz_keyval *a = ap;
const fz_keyval *b = bp;
- if (fz_isname(a->k))
+ if (fz_isname(a->k) && fz_isname(b->k))
return strcmp(fz_toname(a->k), fz_toname(b->k));
- if (fz_isstring(a->k))
- return strcmp(fz_tostrbuf(a->k), fz_tostrbuf(b->k));
+ if (fz_isstring(a->k) && fz_isstring(b->k))
+ if (fz_tostrlen(a->k) == fz_tostrlen(b->k))
+ return memcmp(fz_tostrbuf(a->k), fz_tostrbuf(b->k), fz_tostrlen(a->k));
return -1;
}
@@ -19,7 +20,8 @@ static inline int keystrcmp(fz_obj *key, char *s)
if (fz_isname(key))
return strcmp(fz_toname(key), s);
if (fz_isstring(key))
- return strcmp(fz_tostrbuf(key), s);
+ if (strlen(s) == fz_tostrlen(key))
+ return memcmp(fz_tostrbuf(key), s, fz_tostrlen(key));
return -1;
}