diff options
author | Dwight <dwight@10gen.com> | 2011-06-01 14:57:40 -0400 |
---|---|---|
committer | Dwight <dwight@10gen.com> | 2011-06-01 14:57:40 -0400 |
commit | e104e01f8410cef79e29e766d66133458df85220 (patch) | |
tree | fd9d6ac6db17e9a82f16347ef9bed2906cc39e70 /db/jsobj.cpp | |
parent | 224069295263b672736845ba40d7f79f82ee42e6 (diff) | |
download | mongo-e104e01f8410cef79e29e766d66133458df85220.tar.gz |
use memcmp, not strcmp for comparing BSON strings
Diffstat (limited to 'db/jsobj.cpp')
-rw-r--r-- | db/jsobj.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/db/jsobj.cpp b/db/jsobj.cpp index 204086a3e8f..c733f279c1f 100644 --- a/db/jsobj.cpp +++ b/db/jsobj.cpp @@ -413,8 +413,18 @@ namespace mongo { case Code: case Symbol: case String: - /* todo: utf version */ - return strcmp(l.valuestr(), r.valuestr()); + /* todo: a utf sort order version one day... */ + { + // we use memcmp as we allow zeros in UTF8 strings + int lsz = l.valuestrsize(); + int rsz = r.valuestrsize(); + int common = min(lsz, rsz); + int res = memcmp(l.valuestr(), r.valuestr(), common); + if( res ) + return res; + // longer string is the greater one + return lsz-rsz; + } case Object: case Array: return l.embeddedObject().woCompare( r.embeddedObject() ); |