diff --git a/lib/filters/index.js b/lib/filters/index.js index bcf5d36..2951c4d 100644 --- a/lib/filters/index.js +++ b/lib/filters/index.js @@ -52,7 +52,11 @@ function matchParens(str, openParenIndex) { esc = false; } - return str.length - 1; + var ndx = str.length - 1; + if (str.charAt(ndx) !== ')') + throw new Error(str + ' has unbalanced parentheses'); + + return ndx; } @@ -99,6 +103,7 @@ function _buildFilterTree(expr) { // out (at least for this recursion level) while (expr.length !== 0) { endParen = matchParens(expr); + if (endParen == expr.length - 1) { tree.children[i] = _buildFilterTree(expr); expr = ''; diff --git a/package.json b/package.json index a2d7eb4..f3351fb 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "name": "ldapjs", "homepage": "http://ldapjs.org", "description": "LDAP client and server APIs", - "version": "0.6.1", + "version": "0.6.2", "repository": { "type": "git", "url": "git://github.com/mcavage/node-ldapjs.git" @@ -29,9 +29,9 @@ "assert-plus": "0.1.2", "buffertools": "1.1.0", "bunyan": "0.18.2", - "dtrace-provider": "0.2.7", + "dtrace-provider": "0.2.8", "nopt": "2.1.1", - "pooling": "0.3.2" + "pooling": "0.4.1" }, "devDependencies": { "tap": "0.4.0", diff --git a/test/filters/parse.test.js b/test/filters/parse.test.js index b09fa42..af2e02f 100644 --- a/test/filters/parse.test.js +++ b/test/filters/parse.test.js @@ -139,9 +139,18 @@ test('bogus filter', function (t) { t.end(); }); + test('bogus filter !=', function (t) { t.throws(function () { parse('foo!=1'); }); t.end(); }); + + +test('mismatched parens', function (t) { + t.throws(function () { + parse('(&(foo=bar)(!(state=done))'); + }); + t.end(); +});