summaryrefslogtreecommitdiff
path: root/db/jsobj.cpp
diff options
context:
space:
mode:
authorDwight <dwight@10gen.com>2011-06-01 14:57:40 -0400
committerDwight <dwight@10gen.com>2011-06-01 14:57:40 -0400
commite104e01f8410cef79e29e766d66133458df85220 (patch)
treefd9d6ac6db17e9a82f16347ef9bed2906cc39e70 /db/jsobj.cpp
parent224069295263b672736845ba40d7f79f82ee42e6 (diff)
downloadmongo-e104e01f8410cef79e29e766d66133458df85220.tar.gz
use memcmp, not strcmp for comparing BSON strings
Diffstat (limited to 'db/jsobj.cpp')
-rw-r--r--db/jsobj.cpp14
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() );