diff --git a/lib/filters/index.js b/lib/filters/index.js index 75774e2..d86eba4 100644 --- a/lib/filters/index.js +++ b/lib/filters/index.js @@ -165,14 +165,13 @@ function cloneFilter (input) { } function escapedToHex (str) { - return str.replace(/\\([0-9a-f][^0-9a-f]|[0-9a-f]$|[^0-9a-f]|$)/gi, function (match, p1) { + return str.replace(/\\([0-9a-f](?![0-9a-f])|[^0-9a-f]|$)/gi, function (match, p1) { if (!p1) { return '\\5c' } const hexCode = p1.charCodeAt(0).toString(16) - const rest = p1.substring(1) - return '\\' + hexCode + rest + return '\\' + hexCode }) } diff --git a/package.json b/package.json index d634b3b..786b84b 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "name": "ldapjs", "homepage": "http://ldapjs.org", "description": "LDAP client and server APIs", - "version": "2.0.0-pre.1", + "version": "2.0.0-pre.2", "license": "MIT", "repository": { "type": "git", diff --git a/test/filters/parse.test.js b/test/filters/parse.test.js index 5eb6a94..bfe6607 100644 --- a/test/filters/parse.test.js +++ b/test/filters/parse.test.js @@ -26,6 +26,16 @@ test('GH-50 = in filter', function (t) { t.end() }) +test('convert to hex code', function (t) { + const str = 'foo=bar\\(abcd\\e\\fg\\h\\69\\a' + const f = parse(str) + t.ok(f) + t.equal(f.attribute, 'foo') + t.equal(f.value, 'bar(abcdefghia') + t.equal(f.toString(), '(foo=bar\\28abcdefghia)') + t.end() +}) + test('( in filter', function (t) { const str = '(foo=bar\\()' const f = parse(str) @@ -56,6 +66,16 @@ test('\\ in filter', function (t) { t.end() }) +test('not escaped \\ at end of filter', function (t) { + const str = 'foo=bar\\' + const f = parse(str) + t.ok(f) + t.equal(f.attribute, 'foo') + t.equal(f.value, 'bar\\') + t.equal(f.toString(), '(foo=bar\\5c)') + t.end() +}) + test('* in equality filter', function (t) { const str = '(foo=bar\\*)' const f = parse(str)