diff options
author | Tor Andersson <tor@ghostscript.com> | 2009-06-30 02:30:04 +0200 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2009-06-30 02:30:04 +0200 |
commit | 204b8af3dae7f7cf0b692b8d38533113c0689414 (patch) | |
tree | 3f722fb42b4428d86ed1dc55c8ec2dbe943da746 | |
parent | 0f66fa12ec2b514459e5f456b016ef719f041fc0 (diff) | |
download | mupdf-204b8af3dae7f7cf0b692b8d38533113c0689414.tar.xz |
Use memcmp to compare fz_obj strings which can contain embedded zeroes.
-rw-r--r-- | fitz/obj_dict.c | 10 |
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; } |